]> SALOME platform Git repositories - plugins/hybridplugin.git/blob - tests/layers_imprinting.py
Salome HOME
Regression of tests/enforced_mesh.py
[plugins/hybridplugin.git] / tests / layers_imprinting.py
1 # -*- coding: utf-8 -*-
2
3 import sys
4 import salome
5
6 salome.salome_init()
7 theStudy = salome.myStudy
8
9 ###
10 ### GEOM component
11 ###
12
13 import GEOM
14 from salome.geom import geomBuilder
15 import math
16 import SALOMEDS
17
18
19 geompy = geomBuilder.New(theStudy)
20
21 O = geompy.MakeVertex(0, 0, 0)
22 OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
23 OY = geompy.MakeVectorDXDYDZ(0, 1, 0)
24 OZ = geompy.MakeVectorDXDYDZ(0, 0, 1)
25 Cylinder_1 = geompy.MakeCylinderRH(0.5, 5)
26 Cylinder_2 = geompy.MakeCylinderRH(0.3, 3)
27 Rotation_1 = geompy.MakeRotation(Cylinder_2, OY, -90*math.pi/180.0)
28 Translation_1 = geompy.MakeTranslation(Rotation_1, 0, 0, 1.5)
29 piquage = geompy.MakeFuseList([Cylinder_1, Translation_1], True, True)
30 [Outlet] = geompy.SubShapes(piquage, [15])
31 [Inlet_z,Inlet_x] = geompy.SubShapes(piquage, [3, 22])
32 [corner] = geompy.SubShapes(piquage, [14])
33 geomObj_1 = geompy.MakeVertex(0, 0, 0)
34 geomObj_2 = geompy.MakeVectorDXDYDZ(1, 0, 0)
35 geomObj_3 = geompy.MakeVectorDXDYDZ(0, 1, 0)
36 geomObj_4 = geompy.MakeVectorDXDYDZ(0, 0, 1)
37 Wall = geompy.CreateGroup(piquage, geompy.ShapeType["FACE"])
38 geompy.UnionIDs(Wall, [7, 17])
39 geompy.addToStudy( O, 'O' )
40 geompy.addToStudy( OX, 'OX' )
41 geompy.addToStudy( OY, 'OY' )
42 geompy.addToStudy( OZ, 'OZ' )
43 geompy.addToStudy( Cylinder_1, 'Cylinder_1' )
44 geompy.addToStudy( Cylinder_2, 'Cylinder_2' )
45 geompy.addToStudy( Rotation_1, 'Rotation_1' )
46 geompy.addToStudy( Translation_1, 'Translation_1' )
47 geompy.addToStudy( piquage, 'piquage' )
48 geompy.addToStudyInFather( piquage, Inlet_x, 'Inlet_x' )
49 geompy.addToStudyInFather( piquage, Outlet, 'Outlet' )
50 geompy.addToStudyInFather( piquage, Wall, 'Wall' )
51 geompy.addToStudyInFather( piquage, Inlet_z, 'Inlet_z' )
52 geompy.addToStudyInFather( piquage, corner, 'corner' )
53
54 geom_groups = [Inlet_x, Inlet_z, Outlet, Wall]
55 d_geom_groups = {}
56
57 ###
58 ### SMESH component
59 ###
60
61 import  SMESH, SALOMEDS
62 from salome.smesh import smeshBuilder
63
64 from salome.StdMeshers import StdMeshersBuilder
65 from salome.HYBRIDPlugin import HYBRIDPluginBuilder
66
67 smesh = smeshBuilder.New(theStudy)
68
69
70 # Viscous layers without imprinting
71 # =================================
72
73 Mesh_1 = smesh.Mesh(piquage, "Mesh_without_imprinting")
74 NETGEN_2D = Mesh_1.Triangle(algo=smeshBuilder.NETGEN_1D2D)
75 NETGEN_2D_Parameters = NETGEN_2D.Parameters()
76
77 NETGEN_2D_Parameters.SetMinSize( 0.01 )
78 NETGEN_2D_Parameters.SetLocalSizeOnShape(corner, 0.01)
79 NETGEN_2D_Parameters.SetFineness( 5 )
80 NETGEN_2D_Parameters.SetGrowthRate( 0.1 )
81 NETGEN_2D_Parameters.SetNbSegPerEdge( 2 )
82 NETGEN_2D_Parameters.SetNbSegPerRadius( 3 )
83
84 MG_Hybrid = Mesh_1.Tetrahedron(algo=smeshBuilder.HYBRID)
85 MG_Hybrid_Parameters_1 = MG_Hybrid.Parameters()
86 MG_Hybrid_Parameters_1.SetLayersOnAllWrap( 0 )
87 MG_Hybrid_Parameters_1.SetElementGeneration( HYBRIDPluginBuilder.Generation_Tetra_Dominant )
88 MG_Hybrid_Parameters_1.SetHeightFirstLayer( 0.01 )
89 MG_Hybrid_Parameters_1.SetBoundaryLayersProgression( 1.1 )
90 MG_Hybrid_Parameters_1.SetNbOfBoundaryLayers( 3 )
91 MG_Hybrid_Parameters_1.SetFacesWithLayers( [ 7, 17 ] )
92
93
94 isDone = Mesh_1.Compute()
95
96 if not isDone:
97   raise Exception("Error when computing Mesh_without_imprinting")
98
99 d_groups_1 = {}
100
101 for geom_group in geom_groups:
102   name = geom_group.GetName()
103   gr = Mesh_1.Group(geom_group)
104   d_groups_1[name] = gr
105   d_geom_groups[name] = geom_group
106
107 assert Mesh_1.NbQuadrangles() == 0
108
109 shape_volume = geompy.BasicProperties(piquage)[2]
110
111 # Compare whole mesh volume
112 volume_error_1 = abs(shape_volume-Mesh_1.GetVolume())/shape_volume
113
114 assert volume_error_1 < 0.02
115
116 # Viscous layers with imprinting
117 # ==============================
118
119 Mesh_2 = smesh.Mesh(piquage, "Mesh_with_imprinting")
120
121 NETGEN_2D_1_1 = Mesh_2.Triangle(algo=smeshBuilder.NETGEN_1D2D)
122 status = Mesh_2.AddHypothesis(NETGEN_2D_Parameters)
123
124 MG_Hybrid_2 = Mesh_2.Tetrahedron(algo=smeshBuilder.HYBRID)
125 MG_Hybrid_Parameters_2 = MG_Hybrid_2.Parameters()
126 MG_Hybrid_Parameters_2.SetLayersOnAllWrap( 0 )
127 MG_Hybrid_Parameters_2.SetElementGeneration( HYBRIDPluginBuilder.Generation_Tetra_Dominant )
128 MG_Hybrid_Parameters_2.SetHeightFirstLayer( 0.01 )
129 MG_Hybrid_Parameters_2.SetBoundaryLayersProgression( 1.1 )
130 MG_Hybrid_Parameters_2.SetNbOfBoundaryLayers( 3 )
131 MG_Hybrid_Parameters_2.SetFacesWithLayers( [ 7, 17 ] )
132 MG_Hybrid_Parameters_2.SetFacesWithImprinting( [ 22, 15, 3 ] )
133
134 isDone = Mesh_2.Compute()
135
136 if not isDone:
137   raise Exception("Error when computing Mesh_with_imprinting")
138
139 assert Mesh_2.NbQuadrangles() > 0
140
141 d_groups_2 = {}
142
143 for geom_group in geom_groups:
144   name = geom_group.GetName()
145   gr = Mesh_2.Group(geom_group)
146   d_groups_2[name] = gr
147
148 faces_imprinted = ["Inlet_x", "Inlet_z", "Outlet"]
149
150 # Check viscous layers with imprinting
151 for name in faces_imprinted:
152   geom_area = geompy.BasicProperties(d_geom_groups[name])[1]
153   gr_1 = d_groups_1[name]
154   gr_2 = d_groups_2[name]
155   #assert gr_1.Size() > 0
156   assert gr_2.Size() > 0
157   # Nb of quadrangles is in 7th index of mesh info
158   assert gr_2.GetMeshInfo()[7] > 0
159
160   # Compare mesh group and geom group
161   area_error_1 = abs(geom_area-smesh.GetArea(gr_2))/geom_area
162   assert area_error_1 < 0.025
163   # Compare mesh group with imprinting and mesh group without imprinting
164   area_error_2 = abs(smesh.GetArea(gr_1)-smesh.GetArea(gr_2))/smesh.GetArea(gr_1)
165   assert area_error_2 < 1e-10
166
167 # Compare whole mesh volume
168 mesh_2_volume = Mesh_2.GetVolume()
169 volume_error_2 = abs(shape_volume-mesh_2_volume)/shape_volume
170
171 assert volume_error_2 < 0.015
172
173 # Viscous layers with imprinting set by groups
174 # ============================================
175
176 Mesh_3 = smesh.Mesh(piquage, "Mesh_with_imprinting_set_by_groups")
177
178 NETGEN_2D_1_1 = Mesh_3.Triangle(algo=smeshBuilder.NETGEN_1D2D)
179 status = Mesh_3.AddHypothesis(NETGEN_2D_Parameters)
180
181 MG_Hybrid_3 = Mesh_3.Tetrahedron(algo=smeshBuilder.HYBRID)
182 MG_Hybrid_Parameters_3 = MG_Hybrid_3.Parameters()
183 MG_Hybrid_Parameters_3.SetLayersOnAllWrap( 0 )
184 MG_Hybrid_Parameters_3.SetElementGeneration( HYBRIDPluginBuilder.Generation_Tetra_Dominant )
185 MG_Hybrid_Parameters_3.SetHeightFirstLayer( 0.01 )
186 MG_Hybrid_Parameters_3.SetBoundaryLayersProgression( 1.1 )
187 MG_Hybrid_Parameters_3.SetNbOfBoundaryLayers( 3 )
188 MG_Hybrid_3.SetFacesWithLayers( Wall )
189 MG_Hybrid_3.SetFacesWithImprinting( [ Inlet_x, Inlet_z, Outlet ] )
190
191 isDone = Mesh_3.Compute()
192
193 if not isDone:
194   raise Exception("Error when computing Mesh_with_imprinting_set_by_groups")
195
196 d_groups_3 = {}
197
198 for geom_group in geom_groups:
199   name = geom_group.GetName()
200   gr = Mesh_3.Group(geom_group)
201   d_groups_3[name] = gr
202
203 # Compare whole mesh volume
204 mesh_3_volume = Mesh_3.GetVolume()
205 volume_error_3 = abs(mesh_2_volume-mesh_3_volume)/mesh_2_volume
206
207 assert abs(mesh_3_volume-mesh_2_volume)/mesh_2_volume < 1e-10
208
209 # Check viscous layers with imprinting
210 for name in faces_imprinted:
211   gr_2 = d_groups_2[name]
212   gr_3 = d_groups_3[name]
213   assert gr_3.Size() > 0
214   # Nb of quadrangles is in 7th index of mesh info
215   assert gr_2.GetMeshInfo()[7] == gr_3.GetMeshInfo()[7]
216
217   # Compare mesh group with imprinting set by ids and mesh group with imprinting set by geom group
218   area_error_3 = abs(smesh.GetArea(gr_2)-smesh.GetArea(gr_3))/smesh.GetArea(gr_2)
219   assert area_error_3 < 1e-10
220
221 if salome.sg.hasDesktop():
222   salome.sg.updateObjBrowser(1)