Salome HOME
Add layers imprinting on faces.
[plugins/hybridplugin.git] / tests / test_layers_imprinting.py
1 # -*- coding: utf-8 -*-
2
3 ###
4 ### This file is generated automatically by SALOME v7.6.0 with dump python functionality
5 ###
6
7 import sys
8 import salome
9
10 salome.salome_init()
11 theStudy = salome.myStudy
12
13 ###
14 ### GEOM component
15 ###
16
17 import GEOM
18 from salome.geom import geomBuilder
19 import math
20 import SALOMEDS
21
22
23 geompy = geomBuilder.New(theStudy)
24
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' )
57
58 geom_groups = [Inlet_x, Inlet_z, Outlet, Wall]
59 d_geom_groups = {}
60
61 ###
62 ### SMESH component
63 ###
64
65 import  SMESH, SALOMEDS
66 from salome.smesh import smeshBuilder
67
68 from salome.StdMeshers import StdMeshersBuilder
69
70 smesh = smeshBuilder.New(theStudy)
71
72
73 # Viscous layers without imprinting
74 # =================================
75
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()
79
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 )
86
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 ] )
95
96
97 isDone = Mesh_1.Compute()
98
99 if not isDone:
100   raise Exception("Error when computing Mesh_without_imprinting")
101
102 d_groups_1 = {}
103
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
109
110 assert Mesh_1.NbQuadrangles() == 0
111
112 shape_volume = geompy.BasicProperties(piquage)[2]
113
114 # Compare whole mesh volume
115 volume_error_1 = abs(shape_volume-Mesh_1.GetVolume())/shape_volume
116
117 assert volume_error_1 < 0.015
118
119 # Viscous layers with imprinting
120 # ==============================
121
122 Mesh_2 = smesh.Mesh(piquage, "Mesh_with_imprinting")
123
124 NETGEN_2D_1_1 = Mesh_2.Triangle(algo=smeshBuilder.NETGEN_1D2D)
125 status = Mesh_2.AddHypothesis(NETGEN_2D_Parameters)
126
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 ] )
136
137 isDone = Mesh_2.Compute()
138
139 if not isDone:
140   raise Exception("Error when computing Mesh_with_imprinting")
141
142 #assert Mesh_2.NbQuadrangles() > 0
143
144 d_groups_2 = {}
145
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
150
151 faces_imprinted = ["Inlet_x", "Inlet_z", "Outlet"]
152
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
162
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
169
170 # Compare whole mesh volume
171 mesh_2_volume = Mesh_2.GetVolume()
172 volume_error_2 = abs(shape_volume-mesh_2_volume)/shape_volume
173
174 assert volume_error_2 < 0.015
175
176 # Viscous layers with imprinting set by groups
177 # ============================================
178
179 Mesh_3 = smesh.Mesh(piquage, "Mesh_with_imprinting_set_by_groups")
180
181 NETGEN_2D_1_1 = Mesh_3.Triangle(algo=smeshBuilder.NETGEN_1D2D)
182 status = Mesh_3.AddHypothesis(NETGEN_2D_Parameters)
183
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 ] )
193
194 isDone = Mesh_3.Compute()
195
196 if not isDone:
197   raise Exception("Error when computing Mesh_with_imprinting_set_by_groups")
198
199 d_groups_3 = {}
200
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
205
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
209
210 assert abs(mesh_3_volume-mesh_2_volume)/mesh_2_volume < 1e-10
211
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]
219
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
223
224 if salome.sg.hasDesktop():
225   salome.sg.updateObjBrowser(1)