]> SALOME platform Git repositories - plugins/hybridplugin.git/blob - tests/test_enforced_mesh.py
Salome HOME
Enable ctest, make test and salome test
[plugins/hybridplugin.git] / tests / test_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 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 p1 = geompy.MakeVertex(0, -0.25, 1)
55 p2 = geompy.MakeVertex(0, 0.25, 1)
56 p3 = geompy.MakeVertex(0, 0.25, 3)
57 p4 = geompy.MakeVertex(0, -0.25, 3)
58
59 wire = geompy.MakePolyline([p1, p2, p3, p4, p1])
60 face = geompy.MakeFace(wire, 1, theName="face")
61
62 ###
63 ### SMESH component
64 ###
65
66 import  SMESH, SALOMEDS
67 from salome.smesh import smeshBuilder
68
69 from salome.StdMeshers import StdMeshersBuilder
70
71 smesh = smeshBuilder.New(theStudy)
72
73 Mesh_faces = smesh.Mesh(face)
74 Mesh_faces.Triangle(algo=smeshBuilder.MG_CADSurf)
75 Mesh_faces.Compute()
76
77
78 # Viscous layers with Netgen additional hypothesis
79 # ================================================
80
81 Mesh_1 = smesh.Mesh(piquage)
82 NETGEN_2D = Mesh_1.Triangle(algo=smeshBuilder.NETGEN_1D2D)
83 NETGEN_2D_Parameters = NETGEN_2D.Parameters()
84
85 NETGEN_2D_Parameters.SetMinSize( 0.01 )
86 NETGEN_2D_Parameters.SetLocalSizeOnShape(corner, 0.01)
87 NETGEN_2D_Parameters.SetFineness( 5 )
88 NETGEN_2D_Parameters.SetGrowthRate( 0.1 )
89 NETGEN_2D_Parameters.SetNbSegPerEdge( 2 )
90 NETGEN_2D_Parameters.SetNbSegPerRadius( 3 )
91
92 NETGEN_3D = Mesh_1.Tetrahedron()
93 Viscous_Layers_1 = NETGEN_3D.ViscousLayers(0.05,3,1.1,[],1,StdMeshersBuilder.SURF_OFFSET_SMOOTH)
94 Viscous_Layers_1.SetTotalThickness( 0.05 )
95 Viscous_Layers_1.SetNumberLayers( 3 )
96 Viscous_Layers_1.SetStretchFactor( 1.1 )
97 Viscous_Layers_1.SetMethod( StdMeshersBuilder.SURF_OFFSET_SMOOTH )
98 Viscous_Layers_1.SetFaces( [ 7, 17 ], 0 )
99
100
101 #isDone = Mesh_1.Compute()
102 #Mesh_1.SplitVolumesIntoTetra( Mesh_1, 1 )
103
104 Outlet_1 = Mesh_1.GroupOnGeom(Outlet,'Outlet',SMESH.FACE)
105 Wall_1 = Mesh_1.GroupOnGeom(Wall,'Wall',SMESH.FACE)
106 Inlet_z_1 = Mesh_1.GroupOnGeom(Inlet_z,'Inlet_z',SMESH.FACE)
107 Inlet_x_1 = Mesh_1.GroupOnGeom(Inlet_x,'Inlet_x',SMESH.FACE)
108
109 # Enforced mesh without layer
110 # ===========================
111
112 Mesh_2 = smesh.Mesh(piquage, "Mesh_without_layer")
113
114 NETGEN_2D_1_1 = Mesh_2.Triangle(algo=smeshBuilder.NETGEN_1D2D)
115 status = Mesh_2.AddHypothesis(NETGEN_2D_Parameters)
116
117 MG_Hybrid_2 = Mesh_2.Tetrahedron(algo=smeshBuilder.HYBRID)
118 MG_Hybrid_Parameters_2 = MG_Hybrid_2.Parameters()
119 MG_Hybrid_Parameters_2.SetLayersOnAllWrap( 0 )
120 MG_Hybrid_Parameters_2.SetElementGeneration( 0 )
121 #MG_Hybrid_Parameters_2.SetHeightFirstLayer( 0.01 )
122 #MG_Hybrid_Parameters_2.SetBoundaryLayersProgression( 1.1 )
123 #MG_Hybrid_Parameters_2.SetNbOfBoundaryLayers( 3 )
124 MG_Hybrid_Parameters_2.SetEnforcedMeshWithGroup( Mesh_faces.GetMesh(), SMESH.FACE, "LayersGroup" )
125 MG_Hybrid_Parameters_2.SetKeepFiles(1)
126
127 isDone = Mesh_2.Compute()
128
129 if not isDone:
130   raise Exception("Error when computing Mesh_without_layer")
131
132 # Check that a group has been created with the enforced mesh
133 assert len(Mesh_2.GetGroups()) == 1
134 assert Mesh_2.GetGroups()[0].GetName() == 'LayersGroup'
135 assert Mesh_2.GetGroups()[0].Size() > 0
136
137 # Enforced mesh with layers
138 # =========================
139
140 Mesh_3 = smesh.Mesh(piquage, "Mesh_with_layer")
141
142 NETGEN_2D_1_1 = Mesh_3.Triangle(algo=smeshBuilder.NETGEN_1D2D)
143 status = Mesh_3.AddHypothesis(NETGEN_2D_Parameters)
144
145 MG_Hybrid_3 = Mesh_3.Tetrahedron(algo=smeshBuilder.HYBRID)
146 MG_Hybrid_Parameters_3 = MG_Hybrid_3.Parameters()
147 MG_Hybrid_Parameters_3.SetLayersOnAllWrap( 0 )
148 MG_Hybrid_Parameters_3.SetElementGeneration( 0 )
149 MG_Hybrid_Parameters_3.SetHeightFirstLayer( 0.01 )
150 MG_Hybrid_Parameters_3.SetBoundaryLayersProgression( 1.1 )
151 MG_Hybrid_Parameters_3.SetNbOfBoundaryLayers( 3 )
152 MG_Hybrid_Parameters_3.SetEnforcedMeshWithGroup( Mesh_faces.GetMesh(), SMESH.FACE, "LayersGroup" )
153 MG_Hybrid_Parameters_3.SetKeepFiles(1)
154 MG_Hybrid_3.SetFacesWithLayers( Wall )
155
156
157 isDone = Mesh_3.Compute()
158
159 if not isDone:
160   raise Exception("Error when computing Mesh_with_layer")
161
162 # Check that a group has been created with the enforced mesh
163 assert len(Mesh_3.GetGroups()) == 1
164 assert Mesh_3.GetGroups()[0].GetName() == 'LayersGroup'
165 assert Mesh_3.GetGroups()[0].Size() > 0
166
167 if salome.sg.hasDesktop():
168   salome.sg.updateObjBrowser(1)