Coverage for bim2sim/plugins/PluginOpenFOAM/bim2sim_openfoam/utils/paraViewScripts.py: 0%
82 statements
« prev ^ index » next coverage.py v7.10.7, created at 2025-10-01 10:24 +0000
« prev ^ index » next coverage.py v7.10.7, created at 2025-10-01 10:24 +0000
1from paraview.simple import *
3"""
4A collection of paraView scripts for plotting different aspects of a
5simulated OpenFOAM case.
6!Can only be run inside paraView!
7"""
10def differenceSlice(case1: str, case2: str, var: str):
11 """
12 Calculates the mean-squared error between 2 OpenFOAM cases of the
13 same geometry by taking a slice of the x-y-plane along the center of the
14 space.
15 case 1 and case2 must be paths to the OpenFOAM base directory containing
16 the controlDict. Coloring is automatically scaled to a very small range
17 and might need adjustment. var refers to the quantity to investigate and
18 must be either T, U, U_X, U_Y, U_Z, AoA, Co, G, p, p_rgh or yPlus.
19 """
20 paraview.simple._DisableFirstRenderCameraReset()
21 renderView1 = GetActiveViewOrCreate('RenderView')
22 materialLibrary1 = GetMaterialLibrary()
24 file1 = case1 + '/system/controlDict'
25 file2 = case2 + '/system/controlDict'
26 difference_variable = var # T, U_X, U_Y, U_Z
27 # difference_variable = 'U' # for magnitude
29 # create a new 'Open FOAM Reader'
30 controlDict1 = OpenFOAMReader(registrationName='controlDict1', FileName=file1)
31 controlDict1Display = Show(controlDict1, renderView1, 'UnstructuredGridRepresentation')
32 controlDict1Display.Representation = 'Surface'
33 controlDict1Display.SetScalarBarVisibility(renderView1, True)
35 # create a new 'Slice'
36 slice1 = Slice(registrationName='Slice1', Input=controlDict1)
37 slice1Display = Show(slice1, renderView1, 'GeometryRepresentation')
38 slice1Display.Representation = 'Surface'
39 slice1Display.SetScalarBarVisibility(renderView1, True)
41 # create a new 'Open FOAM Reader'
42 controlDict = OpenFOAMReader(registrationName='controlDict', FileName=file2)
43 controlDictDisplay = Show(controlDict, renderView1, 'UnstructuredGridRepresentation')
44 controlDictDisplay.Representation = 'Surface'
45 controlDictDisplay.SetScalarBarVisibility(renderView1, True)
48 # create a new 'Slice'
49 slice2 = Slice(registrationName='Slice2', Input=controlDict)
50 slice2Display = Show(slice2, renderView1, 'GeometryRepresentation')
51 slice2Display.Representation = 'Surface'
52 slice2Display.SetScalarBarVisibility(renderView1, True)
55 # set active source
56 renameArrays1 = RenameArrays(registrationName='RenameArrays1', Input=slice1)
57 renameArrays1.PointArrays = ['AoA', 'AoA_1', 'Co', 'Co_1', 'G', 'G_1', 'T',
58 'T_1', 'U', 'U_1', 'a', 'a', 'alphat',
59 'alphat', 'k', 'k', 'nut', 'nut', 'omega',
60 'omega', 'p', 'p_1', 'p_rgh', 'p_rgh_1', 'qr',
61 'qr', 'wallHeatFlux', 'wallHeatFlux', 'yPlus',
62 'yPlus_1']
63 renameArrays1Display = Show(renameArrays1, renderView1, 'GeometryRepresentation')
64 renameArrays1Display.Representation = 'Surface'
65 renameArrays1Display.SetScalarBarVisibility(renderView1, True)
67 # create a new 'RenameArrays'
68 renameArrays2 = RenameArrays(registrationName='RenameArrays2', Input=slice2)
69 renameArrays2.PointArrays = ['AoA', 'AoA_2', 'Co', 'Co_2', 'G', 'G_2', 'T',
70 'T_2', 'U', 'U_2', 'a', 'a', 'alphat',
71 'alphat', 'k', 'k', 'nut', 'nut', 'omega',
72 'omega', 'p', 'p_2', 'p_rgh', 'p_rgh_2', 'qr',
73 'qr_2', 'wallHeatFlux', 'wallHeatFlux',
74 'yPlus', 'yPlus_2']
75 renameArrays2Display = Show(renameArrays2, renderView1, 'GeometryRepresentation')
76 renameArrays2Display.Representation = 'Surface'
77 renameArrays2Display.SetScalarBarVisibility(renderView1, True)
80 # create a new 'Resample With Dataset'
81 resampleWithDataset1 = ResampleWithDataset(registrationName='ResampleWithDataset1', SourceDataArrays=renameArrays2,
82 DestinationMesh=renameArrays1)
83 resampleWithDataset1.PassPointArrays = 1
84 resampleWithDataset1Display = Show(resampleWithDataset1, renderView1, 'GeometryRepresentation')
85 resampleWithDataset1Display.Representation = 'Surface'
87 var1 = difference_variable + '_1'
88 var2 = difference_variable + '_2'
89 result_var = 'MSE(' + difference_variable + ')'
90 # create a new 'Calculator'
91 calculator1 = Calculator(registrationName='MSE-Calc',
92 Input=resampleWithDataset1)
93 if difference_variable == 'U':
94 calculator1.ResultArrayName = result_var + ' (mag)'
95 calculator1.Function = 'sqrt((U_1_X - U_2_X)^2 + (U_1_Y - U_2_Y)^2 + (' \
96 'U_1_Z - U_2_Z)^2)'
97 else:
98 calculator1.ResultArrayName = result_var
99 calculator1.Function = 'sqrt((' + var1 + '-' + var2 + ')^2)'
100 calculator1Display = Show(calculator1, renderView1, 'GeometryRepresentation')
101 calculator1Display.Representation = 'Surface'
102 calculator1Display.SetScalarBarVisibility(renderView1, True)
104 Hide(controlDict1, renderView1)
105 Hide(controlDict, renderView1)
106 Hide(slice1, renderView1)
107 Hide(slice2, renderView1)
108 Hide(renameArrays1, renderView1)
109 Hide(renameArrays2, renderView1)
110 Hide(resampleWithDataset1, renderView1)
112 # get color transfer function/color map for 'T_diff'
113 # get 2D transfer function for 'Result'
114 resultTF2D = GetTransferFunction2D(result_var)
115 resultTF2D.ScalarRangeInitialized = 1
116 resultTF2D.Range = [0.0, 5.0, 0.0, 1.0]
118 # get color transfer function/color map for 'Result'
119 resultLUT = GetColorTransferFunction(result_var)
120 resultLUT.TransferFunction2D = resultTF2D
121 resultLUT.RGBPoints = [0.0, 0.231373, 0.298039, 0.752941, 1.5, 0.865003, 0.865003, 0.865003, 3.0, 0.705882, 0.0156863, 0.14902]
122 resultLUT.ScalarRangeInitialized = 1.0
124 # Apply a preset using its name. Note this may not work as expected when presets have duplicate names.
125 resultLUT.ApplyPreset('Rainbow Desaturated', True)
127 # get opacity transfer function/opacity map for 'Result'
128 resultPWF = GetOpacityTransferFunction(result_var)
129 resultPWF.Points = [0.0, 0.0, 0.5, 0.0, 3.0, 1.0, 0.5, 0.0]
130 resultPWF.ScalarRangeInitialized = 1
131 resultLUT.RescaleTransferFunction(0.0, 5.0)
132 resultPWF.RescaleTransferFunction(0.0, 5.0)
133 resultTF2D.RescaleTransferFunction(0.0, 5.0, 0.0, 1.0)
134 renderView1 = GetActiveViewOrCreate('RenderView')
136 # get layout
137 layout1 = GetLayout()
138 layout1.SetSize(1124, 789)
139 renderView1.InteractionMode = '2D'
140 renderView1.CameraPosition = [14.478500080108644, 7.84499979019165, 1.348009467124939]
141 renderView1.CameraFocalPoint = [2.049999952316284, 7.84499979019165, 1.348009467124939]
142 renderView1.CameraViewUp = [0.0, 0.0, 1.0]
143 renderView1.CameraParallelScale = 1.8950963928630833
145 file_name = difference_variable + '_Difference.png'
146 SaveScreenshot(file_name)