1 # -*- coding: utf-8 -*-
4 ### This file is generated automatically by SALOME v7.6.0 with dump python functionality
11 theStudy = salome.myStudy
18 from salome.geom import geomBuilder
23 geompy = geomBuilder.New(theStudy)
25 O = geompy.MakeVertex(0, 0, 0)
26 OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
27 OY = geompy.MakeVectorDXDYDZ(0, 1, 0)
28 OZ = geompy.MakeVectorDXDYDZ(0, 0, 1)
29 Cylinder_1 = geompy.MakeCylinderRH(0.5, 5)
30 Cylinder_2 = geompy.MakeCylinderRH(0.3, 3)
31 Rotation_1 = geompy.MakeRotation(Cylinder_2, OY, -90*math.pi/180.0)
32 Translation_1 = geompy.MakeTranslation(Rotation_1, 0, 0, 1.5)
33 piquage = geompy.MakeFuseList([Cylinder_1, Translation_1], True, True)
34 [Outlet] = geompy.SubShapes(piquage, [15])
35 [Inlet_z,Inlet_x] = geompy.SubShapes(piquage, [3, 22])
36 [corner] = geompy.SubShapes(piquage, [14])
37 geomObj_1 = geompy.MakeVertex(0, 0, 0)
38 geomObj_2 = geompy.MakeVectorDXDYDZ(1, 0, 0)
39 geomObj_3 = geompy.MakeVectorDXDYDZ(0, 1, 0)
40 geomObj_4 = geompy.MakeVectorDXDYDZ(0, 0, 1)
41 Wall = geompy.CreateGroup(piquage, geompy.ShapeType["FACE"])
42 geompy.UnionIDs(Wall, [7, 17])
43 geompy.addToStudy( O, 'O' )
44 geompy.addToStudy( OX, 'OX' )
45 geompy.addToStudy( OY, 'OY' )
46 geompy.addToStudy( OZ, 'OZ' )
47 geompy.addToStudy( Cylinder_1, 'Cylinder_1' )
48 geompy.addToStudy( Cylinder_2, 'Cylinder_2' )
49 geompy.addToStudy( Rotation_1, 'Rotation_1' )
50 geompy.addToStudy( Translation_1, 'Translation_1' )
51 geompy.addToStudy( piquage, 'piquage' )
52 geompy.addToStudyInFather( piquage, Inlet_x, 'Inlet_x' )
53 geompy.addToStudyInFather( piquage, Outlet, 'Outlet' )
54 geompy.addToStudyInFather( piquage, Wall, 'Wall' )
55 geompy.addToStudyInFather( piquage, Inlet_z, 'Inlet_z' )
56 geompy.addToStudyInFather( piquage, corner, 'corner' )
58 geom_groups = [Inlet_x, Inlet_z, Outlet, Wall]
65 import SMESH, SALOMEDS
66 from salome.smesh import smeshBuilder
68 from salome.StdMeshers import StdMeshersBuilder
70 smesh = smeshBuilder.New(theStudy)
73 # Viscous layers without imprinting
74 # =================================
76 Mesh_1 = smesh.Mesh(piquage, "Mesh_without_imprinting")
77 NETGEN_2D = Mesh_1.Triangle(algo=smeshBuilder.NETGEN_1D2D)
78 NETGEN_2D_Parameters = NETGEN_2D.Parameters()
80 NETGEN_2D_Parameters.SetMinSize( 0.01 )
81 NETGEN_2D_Parameters.SetLocalSizeOnShape(corner, 0.01)
82 NETGEN_2D_Parameters.SetFineness( 5 )
83 NETGEN_2D_Parameters.SetGrowthRate( 0.1 )
84 NETGEN_2D_Parameters.SetNbSegPerEdge( 2 )
85 NETGEN_2D_Parameters.SetNbSegPerRadius( 3 )
87 MG_Hybrid = Mesh_1.Tetrahedron(algo=smeshBuilder.HYBRID)
88 MG_Hybrid_Parameters_1 = MG_Hybrid.Parameters()
89 MG_Hybrid_Parameters_1.SetLayersOnAllWrap( 0 )
90 MG_Hybrid_Parameters_1.SetElementGeneration( 0 )
91 MG_Hybrid_Parameters_1.SetHeightFirstLayer( 0.01 )
92 MG_Hybrid_Parameters_1.SetBoundaryLayersProgression( 1.1 )
93 MG_Hybrid_Parameters_1.SetNbOfBoundaryLayers( 3 )
94 MG_Hybrid_Parameters_1.SetFacesWithLayers( [ 7, 17 ] )
97 isDone = Mesh_1.Compute()
100 raise Exception("Error when computing Mesh_without_imprinting")
104 for geom_group in geom_groups:
105 name = geom_group.GetName()
106 gr = Mesh_1.Group(geom_group)
107 d_groups_1[name] = gr
108 d_geom_groups[name] = geom_group
110 assert Mesh_1.NbQuadrangles() == 0
112 shape_volume = geompy.BasicProperties(piquage)[2]
114 # Compare whole mesh volume
115 volume_error_1 = abs(shape_volume-Mesh_1.GetVolume())/shape_volume
117 assert volume_error_1 < 0.015
119 # Viscous layers with imprinting
120 # ==============================
122 Mesh_2 = smesh.Mesh(piquage, "Mesh_with_imprinting")
124 NETGEN_2D_1_1 = Mesh_2.Triangle(algo=smeshBuilder.NETGEN_1D2D)
125 status = Mesh_2.AddHypothesis(NETGEN_2D_Parameters)
127 MG_Hybrid_2 = Mesh_2.Tetrahedron(algo=smeshBuilder.HYBRID)
128 MG_Hybrid_Parameters_2 = MG_Hybrid_2.Parameters()
129 MG_Hybrid_Parameters_2.SetLayersOnAllWrap( 0 )
130 MG_Hybrid_Parameters_2.SetElementGeneration( 0 )
131 MG_Hybrid_Parameters_2.SetHeightFirstLayer( 0.01 )
132 MG_Hybrid_Parameters_2.SetBoundaryLayersProgression( 1.1 )
133 MG_Hybrid_Parameters_2.SetNbOfBoundaryLayers( 3 )
134 MG_Hybrid_Parameters_2.SetFacesWithLayers( [ 7, 17 ] )
135 MG_Hybrid_Parameters_2.SetFacesWithImprinting( [ 22, 15, 3 ] )
137 isDone = Mesh_2.Compute()
140 raise Exception("Error when computing Mesh_with_imprinting")
142 #assert Mesh_2.NbQuadrangles() > 0
146 for geom_group in geom_groups:
147 name = geom_group.GetName()
148 gr = Mesh_2.Group(geom_group)
149 d_groups_2[name] = gr
151 faces_imprinted = ["Inlet_x", "Inlet_z", "Outlet"]
153 # Check viscous layers with imprinting
154 for name in faces_imprinted:
155 geom_area = geompy.BasicProperties(d_geom_groups[name])[1]
156 gr_1 = d_groups_1[name]
157 gr_2 = d_groups_2[name]
158 #assert gr_1.Size() > 0
159 assert gr_2.Size() > 0
160 # Nb of quadrangles is in 7th index of mesh info
161 assert gr_2.GetMeshInfo()[7] > 0
163 # Compare mesh group and geom group
164 area_error_1 = abs(geom_area-smesh.GetArea(gr_2))/geom_area
165 assert area_error_1 < 0.025
166 # Compare mesh group with imprinting and mesh group without imprinting
167 area_error_2 = abs(smesh.GetArea(gr_1)-smesh.GetArea(gr_2))/smesh.GetArea(gr_1)
168 assert area_error_2 < 1e-10
170 # Compare whole mesh volume
171 mesh_2_volume = Mesh_2.GetVolume()
172 volume_error_2 = abs(shape_volume-mesh_2_volume)/shape_volume
174 assert volume_error_2 < 0.015
176 # Viscous layers with imprinting set by groups
177 # ============================================
179 Mesh_3 = smesh.Mesh(piquage, "Mesh_with_imprinting_set_by_groups")
181 NETGEN_2D_1_1 = Mesh_3.Triangle(algo=smeshBuilder.NETGEN_1D2D)
182 status = Mesh_3.AddHypothesis(NETGEN_2D_Parameters)
184 MG_Hybrid_3 = Mesh_3.Tetrahedron(algo=smeshBuilder.HYBRID)
185 MG_Hybrid_Parameters_3 = MG_Hybrid_3.Parameters()
186 MG_Hybrid_Parameters_3.SetLayersOnAllWrap( 0 )
187 MG_Hybrid_Parameters_3.SetElementGeneration( 0 )
188 MG_Hybrid_Parameters_3.SetHeightFirstLayer( 0.01 )
189 MG_Hybrid_Parameters_3.SetBoundaryLayersProgression( 1.1 )
190 MG_Hybrid_Parameters_3.SetNbOfBoundaryLayers( 3 )
191 MG_Hybrid_3.SetFacesWithLayers( Wall )
192 MG_Hybrid_3.SetFacesWithImprinting( [ Inlet_x, Inlet_z, Outlet ] )
194 isDone = Mesh_3.Compute()
197 raise Exception("Error when computing Mesh_with_imprinting_set_by_groups")
201 for geom_group in geom_groups:
202 name = geom_group.GetName()
203 gr = Mesh_3.Group(geom_group)
204 d_groups_3[name] = gr
206 # Compare whole mesh volume
207 mesh_3_volume = Mesh_3.GetVolume()
208 volume_error_3 = abs(mesh_2_volume-mesh_3_volume)/mesh_2_volume
210 assert abs(mesh_3_volume-mesh_2_volume)/mesh_2_volume < 1e-10
212 # Check viscous layers with imprinting
213 for name in faces_imprinted:
214 gr_2 = d_groups_2[name]
215 gr_3 = d_groups_3[name]
216 assert gr_3.Size() > 0
217 # Nb of quadrangles is in 7th index of mesh info
218 assert gr_2.GetMeshInfo()[7] == gr_3.GetMeshInfo()[7]
220 # Compare mesh group with imprinting set by ids and mesh group with imprinting set by geom group
221 area_error_3 = abs(smesh.GetArea(gr_2)-smesh.GetArea(gr_3))/smesh.GetArea(gr_2)
222 assert area_error_3 < 1e-10
224 if salome.sg.hasDesktop():
225 salome.sg.updateObjBrowser(1)