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