Salome HOME
update CDMATH
[tools/solverlab.git] / CDMATH / postprocessing / PV_routines.py
1 import paraview.simple as pvs
2 import os
3 import time
4 import numpy as np
5 # do I need to kill the pipeline?
6
7 def Extract_PV_data_over_line_to_txt_file(inputFileName, outputFileName,
8                                            point1, point2,
9                                            resolution
10                                            ):
11     pvs._DisableFirstRenderCameraReset()
12     data_vtu = pvs.XMLUnstructuredGridReader(FileName=[inputFileName])
13     PlotOverLine1 = pvs.PlotOverLine(Source="High Resolution Line Source"
14                                      )
15     PlotOverLine1.Source.Point1 = point1
16     PlotOverLine1.Source.Point2 = point2
17     PlotOverLine1.Source.Resolution = resolution
18     writer = pvs.CreateWriter(outputFileName, PlotOverLine1)
19     writer.FieldAssociation = "Points"  # or "Cells"
20     writer.UpdatePipeline()
21     
22 def Extract_PV_data_over_line_to_numpyArray(inputFileName, point1, point2, resolution):
23     dirName = os.path.dirname(inputFileName)
24     outputFileName = os.path.join(dirName, "tmp." + str(os.getpid()) + str(time.clock()) + ".csv")
25     Extract_PV_data_over_line_to_txt_file(inputFileName, outputFileName, point1, point2, resolution)
26     var, x1, x2, x3 = np.loadtxt(outputFileName, delimiter=',',
27                                 skiprows=1, usecols=(0, 3, 4, 5), unpack=True)
28     os.remove(outputFileName)
29     return x1, x2, x3, var
30
31 # TODO : this routine 
32 # should be rewritten in order to skip the tmp file
33 # and directly convert the field data to a numpy array
34
35 def Slice_PV_data_to_numpyArray(inputFileName, point, normal, resolution):
36     dirName = os.path.dirname(inputFileName)
37     outputFileName = os.path.join(dirName, "tmp." + str(os.getpid()) + str(time.clock()) + ".csv")
38     Slice_PV_data_to_txt_file(inputFileName, outputFileName, point, normal, resolution)
39     var = np.loadtxt(outputFileName, delimiter=',',
40                                 skiprows=1, usecols=(0), unpack=True)
41     os.remove(outputFileName)
42     return var
43
44 def Slice_PV_data_to_txt_file(inputFileName,
45                                         outputFileName,
46                                         point,
47                                         normal,resolution):
48     pvs._DisableFirstRenderCameraReset()
49     data_vtu = pvs.XMLUnstructuredGridReader(FileName=[inputFileName])
50     Slice1 = pvs.Slice(SliceType="Plane")
51     Slice1.SliceOffsetValues = [0.0]
52     Slice1.SliceType.Origin = point
53     Slice1.SliceType.Normal = normal
54     CellCenters1 = pvs.CellCenters()    
55     writer = pvs.CreateWriter(outputFileName, CellCenters1)
56     writer.Precision=resolution
57     writer.FieldAssociation = "Points"  # or "Cells"
58     writer.UpdatePipeline()
59  
60 def Slice_PV_field_data_to_numpyArray(field,
61                                    point, normal,
62                                    resolution
63                                    ):
64     inputFileName = field.getName()
65     field.writeVTK(inputFileName)
66  
67     numpy_array = Slice_PV_data_to_numpyArray(inputFileName+"_1.vtu", point, normal, resolution)
68
69     os.remove(inputFileName+"_1.vtu")
70     return numpy_array
71
72 def Slice_PV_field_data_to_txt_file(field, outputFileName,
73                                         point, normal,
74                                         resolution):
75     numpy_array = Slice_PV_field_data_to_numpyArray(field, point, normal, resolution)
76
77     np.savetxt(outputFileName, numpy_array, delimiter=" ")
78
79
80
81 def Save_PV_data_to_picture_file(inputFileName, field_name,
82                              node_or_cell,outputFileName
83                              ):
84     pvs._DisableFirstRenderCameraReset()
85
86     #pvs.HideAll(view=None)#Not available in paraview 5.1.2
87     view = pvs.GetActiveView()
88     sources = pvs.GetSources().values()
89     for aSource in sources:
90         pvs.Hide(aSource, view)
91
92     # create a new 'XML Unstructured Grid Reader'
93     reader = pvs.XMLUnstructuredGridReader(FileName=[inputFileName])
94     if node_or_cell== 'CELLS':
95         reader.CellArrayStatus = [field_name]
96     elif node_or_cell== 'NODES':
97         reader.PointArrayStatus = [field_name]
98     else:
99         raise ValueError("unknown type : should be CELLS or NODES")
100         
101     # get active view
102     renderView1 = pvs.GetActiveViewOrCreate('RenderView')
103     # uncomment following to set a specific view size
104     # renderView1.ViewSize = [1057, 499]
105
106     # show data in view
107     display = pvs.Show(reader, renderView1);
108     # trace defaults for the display properties.
109     display.ColorArrayName = [None, '']
110     display.GlyphType = 'Arrow'
111     display.ScalarOpacityUnitDistance = 0.02234159571242408
112
113     # reset view to fit data
114     renderView1.ResetCamera()
115
116     # set scalar coloring
117     if node_or_cell== 'CELLS':
118         pvs.ColorBy(display, ('CELLS', field_name))
119     elif node_or_cell== 'NODES':
120         pvs.ColorBy(display, ('POINTS', field_name))
121     else:
122         raise ValueError("unknown type : should be CELLS or NODES")
123
124     # rescale color and/or opacity maps used to include current data range
125     display.RescaleTransferFunctionToDataRange(True)
126
127     # show color bar/color legend
128     display.SetScalarBarVisibility(renderView1, True)
129
130     pvs.SaveScreenshot(outputFileName+".png", magnification=1, quality=100, view=renderView1)
131     display.SetScalarBarVisibility(renderView1, False)
132
133     if field_name=='Velocity' :
134         #pvs.HideAll(view=None)#Not available in paraview 5.1.2
135         view = pvs.GetActiveView()
136         sources = pvs.GetSources().values()
137         for aSource in sources:
138             pvs.Hide(aSource, view)
139         # create a new 'Stream Tracer'
140         streamTracer1 = pvs.StreamTracer(Input=reader, SeedType='Point Source')
141         streamTracer1.Vectors = ['CELLS', 'Velocity']
142         
143         # init the 'Point Source' selected for 'SeedType'
144         streamTracer1.SeedType.Center = [0.5, 0.5, 0.0]
145         streamTracer1.SeedType.Radius = 0.0
146         
147         # Properties modified on streamTracer1
148         streamTracer1.SeedType = 'High Resolution Line Source'
149         
150         # Properties modified on streamTracer1.SeedType
151         streamTracer1.SeedType.Point1 = [0.0, 0.0, 0.0]
152         streamTracer1.SeedType.Point2 = [1.0, 1.0, 0.0]
153         streamTracer1.SeedType.Resolution = 20# Pb : claims attribute Resolution does not exist
154
155         # show data in view
156         streamTracer1Display = pvs.Show(streamTracer1, renderView1)
157         
158         # create a new 'Stream Tracer'
159         streamTracer2 = pvs.StreamTracer(Input=reader, SeedType='Point Source')
160         streamTracer2.Vectors = ['CELLS', 'Velocity']
161         
162         # init the 'Point Source' selected for 'SeedType'
163         streamTracer2.SeedType.Center = [0.5, 0.5, 0.0]
164         streamTracer2.SeedType.Radius = 0.0
165         
166         # Properties modified on streamTracer2
167         streamTracer2.SeedType = 'High Resolution Line Source'
168         
169         # Properties modified on streamTracer2.SeedType
170         streamTracer2.SeedType.Point1 = [0.0, 1.0, 0.0]
171         streamTracer2.SeedType.Point2 = [1.0, 0.0, 0.0]
172         streamTracer2.SeedType.Resolution = 25# Pb : claims attribute Resolution does not exist
173         
174         # show data in view
175         streamTracer2Display = pvs.Show(streamTracer2, renderView1)
176
177         pvs.SaveScreenshot(outputFileName+"_streamlines.png", magnification=1, quality=100, view=renderView1)
178     
179     pvs.Delete()
180     
181