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