Salome HOME
Merge V9_dev branch into master
[plugins/hybridplugin.git] / tests / enforced_mesh.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 # first cylinder
22 r1 = 0.5
23 h1 = 5
24
25 # second cylinder
26 r2 = 0.3
27 h2 = 3
28
29 length_piquage = 1.5
30
31 O = geompy.MakeVertex(0, 0, 0)
32 OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
33 OY = geompy.MakeVectorDXDYDZ(0, 1, 0)
34 OZ = geompy.MakeVectorDXDYDZ(0, 0, 1)
35 geompy.addToStudy( O, 'O' )
36 geompy.addToStudy( OX, 'OX' )
37 geompy.addToStudy( OY, 'OY' )
38 geompy.addToStudy( OZ, 'OZ' )
39
40 Cylinder_1 = geompy.MakeCylinderRH(r1, h1)
41 Cylinder_2 = geompy.MakeCylinderRH(r2, h2)
42 Rotation_1 = geompy.MakeRotation(Cylinder_2, OY, -90*math.pi/180.0)
43 Translation_1 = geompy.MakeTranslation(Rotation_1, 0, 0, length_piquage)
44
45 piquage = geompy.MakeFuseList([Cylinder_1, Translation_1], True, True)
46 geompy.addToStudy( piquage, 'piquage' )
47
48 Inlet_z = geompy.GetFaceNearPoint(piquage, O)
49 geompy.addToStudyInFather( piquage, Inlet_z, 'Inlet_z' )
50
51 p_inlet_x = geompy.MakeVertex(-h2, 0, length_piquage)
52 Inlet_x = geompy.GetFaceNearPoint(piquage, p_inlet_x)
53 geompy.addToStudyInFather( piquage, Inlet_x, 'Inlet_x' )
54
55 p_outlet = geompy.MakeVertex(0, 0, h1)
56 Outlet = geompy.GetFaceNearPoint(piquage, p_outlet)
57 geompy.addToStudyInFather( piquage, Outlet, 'Outlet' )
58
59 Wall = geompy.CreateGroup(piquage, geompy.ShapeType["FACE"])
60 faces = geompy.SubShapeAll(piquage, geompy.ShapeType["FACE"])
61 geompy.UnionList(Wall, faces)
62 geompy.DifferenceList(Wall, [Inlet_x, Inlet_z, Outlet])
63 geompy.addToStudyInFather( piquage, Wall, 'Wall' )
64
65 p_corner = geompy.MakeVertex(-r2, 0, length_piquage+r2)
66 corner = geompy.GetVertexNearPoint(piquage, p_corner)
67 geompy.addToStudyInFather( piquage, corner, 'corner' )
68
69 p1 = geompy.MakeVertex(0, -0.25, 1)
70 p2 = geompy.MakeVertex(0, 0.25, 1)
71 p3 = geompy.MakeVertex(0, 0.25, 3)
72 p4 = geompy.MakeVertex(0, -0.25, 3)
73
74 wire = geompy.MakePolyline([p1, p2, p3, p4, p1])
75 face = geompy.MakeFace(wire, 1, theName="face")
76
77 ###
78 ### SMESH component
79 ###
80
81 import  SMESH, SALOMEDS
82 from salome.smesh import smeshBuilder
83
84 from salome.StdMeshers import StdMeshersBuilder
85
86 smesh = smeshBuilder.New(theStudy)
87
88 Mesh_faces = smesh.Mesh(face)
89 Mesh_faces.Triangle(algo=smeshBuilder.MG_CADSurf)
90 Mesh_faces.Compute()
91
92
93 # Viscous layers with Netgen additional hypothesis
94 # ================================================
95
96 Mesh_1 = smesh.Mesh(piquage)
97 NETGEN_2D = Mesh_1.Triangle(algo=smeshBuilder.NETGEN_1D2D)
98 NETGEN_2D_Parameters = NETGEN_2D.Parameters()
99
100 NETGEN_2D_Parameters.SetMinSize( 0.01 )
101 NETGEN_2D_Parameters.SetLocalSizeOnShape(corner, 0.01)
102 NETGEN_2D_Parameters.SetFineness( 5 )
103 NETGEN_2D_Parameters.SetGrowthRate( 0.1 )
104 NETGEN_2D_Parameters.SetNbSegPerEdge( 2 )
105 NETGEN_2D_Parameters.SetNbSegPerRadius( 3 )
106
107 wall_faces = geompy.SubShapeAll(Wall, geompy.ShapeType["FACE"])
108 wall_ids = geompy.GetSubShapesIDs(piquage, wall_faces)
109
110 NETGEN_3D = Mesh_1.Tetrahedron()
111 Viscous_Layers_1 = NETGEN_3D.ViscousLayers(0.05,3,1.1,[],1,StdMeshersBuilder.SURF_OFFSET_SMOOTH)
112 Viscous_Layers_1.SetTotalThickness( 0.05 )
113 Viscous_Layers_1.SetNumberLayers( 3 )
114 Viscous_Layers_1.SetStretchFactor( 1.1 )
115 Viscous_Layers_1.SetMethod( StdMeshersBuilder.SURF_OFFSET_SMOOTH )
116 Viscous_Layers_1.SetFaces( wall_ids, 0 )
117
118
119 #isDone = Mesh_1.Compute()
120 #Mesh_1.SplitVolumesIntoTetra( Mesh_1, 1 )
121
122 Outlet_1 = Mesh_1.GroupOnGeom(Outlet,'Outlet',SMESH.FACE)
123 Wall_1 = Mesh_1.GroupOnGeom(Wall,'Wall',SMESH.FACE)
124 Inlet_z_1 = Mesh_1.GroupOnGeom(Inlet_z,'Inlet_z',SMESH.FACE)
125 Inlet_x_1 = Mesh_1.GroupOnGeom(Inlet_x,'Inlet_x',SMESH.FACE)
126
127 # Enforced mesh without layer
128 # ===========================
129
130 Mesh_2 = smesh.Mesh(piquage, "Mesh_without_layer")
131
132 NETGEN_2D_1_1 = Mesh_2.Triangle(algo=smeshBuilder.NETGEN_1D2D)
133 status = Mesh_2.AddHypothesis(NETGEN_2D_Parameters)
134
135 MG_Hybrid_2 = Mesh_2.Tetrahedron(algo=smeshBuilder.HYBRID)
136 MG_Hybrid_Parameters_2 = MG_Hybrid_2.Parameters()
137 MG_Hybrid_Parameters_2.SetLayersOnAllWrap( 0 )
138 MG_Hybrid_Parameters_2.SetElementGeneration( 0 )
139 #MG_Hybrid_Parameters_2.SetHeightFirstLayer( 0.01 )
140 #MG_Hybrid_Parameters_2.SetBoundaryLayersProgression( 1.1 )
141 #MG_Hybrid_Parameters_2.SetNbOfBoundaryLayers( 3 )
142 MG_Hybrid_Parameters_2.SetEnforcedMeshWithGroup( Mesh_faces.GetMesh(), SMESH.FACE, "LayersGroup" )
143 MG_Hybrid_Parameters_2.SetKeepFiles(1)
144
145 isDone = Mesh_2.Compute()
146
147 if not isDone:
148   raise Exception("Error when computing Mesh_without_layer")
149
150 # Check that a group has been created with the enforced mesh
151 assert len(Mesh_2.GetGroups()) == 1
152 assert Mesh_2.GetGroups()[0].GetName() == 'LayersGroup'
153 assert Mesh_2.GetGroups()[0].Size() > 0
154
155 # Enforced mesh with layers
156 # =========================
157
158 Mesh_3 = smesh.Mesh(piquage, "Mesh_with_layer")
159
160 NETGEN_2D_1_1 = Mesh_3.Triangle(algo=smeshBuilder.NETGEN_1D2D)
161 status = Mesh_3.AddHypothesis(NETGEN_2D_Parameters)
162
163 MG_Hybrid_3 = Mesh_3.Tetrahedron(algo=smeshBuilder.HYBRID)
164 MG_Hybrid_Parameters_3 = MG_Hybrid_3.Parameters()
165 MG_Hybrid_Parameters_3.SetLayersOnAllWrap( 0 )
166 MG_Hybrid_Parameters_3.SetElementGeneration( 0 )
167 MG_Hybrid_Parameters_3.SetHeightFirstLayer( 0.01 )
168 MG_Hybrid_Parameters_3.SetBoundaryLayersProgression( 1.1 )
169 MG_Hybrid_Parameters_3.SetNbOfBoundaryLayers( 3 )
170 MG_Hybrid_Parameters_3.SetEnforcedMeshWithGroup( Mesh_faces.GetMesh(), SMESH.FACE, "LayersGroup" )
171 MG_Hybrid_Parameters_3.SetKeepFiles(1)
172 MG_Hybrid_3.SetFacesWithLayers( Wall )
173
174
175 isDone = Mesh_3.Compute()
176
177 if not isDone:
178   raise Exception("Error when computing Mesh_with_layer")
179
180 # Check that a group has been created with the enforced mesh
181 assert len(Mesh_3.GetGroups()) == 1
182 assert Mesh_3.GetGroups()[0].GetName() == 'LayersGroup'
183 assert Mesh_3.GetGroups()[0].Size() > 0
184
185 if salome.sg.hasDesktop():
186   salome.sg.updateObjBrowser(1)