1 # -*- coding: utf-8 -*-
13 from salome.geom import geomBuilder
18 geompy = geomBuilder.New()
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' )
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)
44 piquage = geompy.MakeFuseList([Cylinder_1, Translation_1], True, True)
45 geompy.addToStudy( piquage, 'piquage' )
47 Inlet_z = geompy.GetFaceNearPoint(piquage, O)
48 geompy.addToStudyInFather( piquage, Inlet_z, 'Inlet_z' )
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' )
54 p_outlet = geompy.MakeVertex(0, 0, h1)
55 Outlet = geompy.GetFaceNearPoint(piquage, p_outlet)
56 geompy.addToStudyInFather( piquage, Outlet, 'Outlet' )
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' )
64 p_corner = geompy.MakeVertex(-r2, 0, length_piquage+r2)
65 corner = geompy.GetVertexNearPoint(piquage, p_corner)
66 geompy.addToStudyInFather( piquage, corner, 'corner' )
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)
73 wire = geompy.MakePolyline([p1, p2, p3, p4, p1])
74 face = geompy.MakeFace(wire, 1, theName="face")
80 import SMESH, SALOMEDS
81 from salome.smesh import smeshBuilder
83 from salome.StdMeshers import StdMeshersBuilder
85 smesh = smeshBuilder.New()
87 Mesh_faces = smesh.Mesh(face)
88 Mesh_faces.Triangle(algo=smeshBuilder.MG_CADSurf)
92 # Viscous layers with Netgen additional hypothesis
93 # ================================================
95 Mesh_1 = smesh.Mesh(piquage)
96 NETGEN_2D = Mesh_1.Triangle(algo=smeshBuilder.NETGEN_1D2D)
97 NETGEN_2D_Parameters = NETGEN_2D.Parameters()
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 )
106 wall_faces = geompy.SubShapeAll(Wall, geompy.ShapeType["FACE"])
107 wall_ids = geompy.GetSubShapesIDs(piquage, wall_faces)
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 )
118 #isDone = Mesh_1.Compute()
119 #Mesh_1.SplitVolumesIntoTetra( Mesh_1, 1 )
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)
126 # Enforced mesh without layer
127 # ===========================
129 Mesh_2 = smesh.Mesh(piquage, "Mesh_without_layer")
131 NETGEN_2D_1_1 = Mesh_2.Triangle(algo=smeshBuilder.NETGEN_1D2D)
132 status = Mesh_2.AddHypothesis(NETGEN_2D_Parameters)
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)
144 isDone = Mesh_2.Compute()
147 raise Exception("Error when computing Mesh_without_layer")
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
154 # Enforced mesh with layers
155 # =========================
157 Mesh_3 = smesh.Mesh(piquage, "Mesh_with_layer")
159 NETGEN_2D_1_1 = Mesh_3.Triangle(algo=smeshBuilder.NETGEN_1D2D)
160 status = Mesh_3.AddHypothesis(NETGEN_2D_Parameters)
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 )
174 isDone = Mesh_3.Compute()
177 raise Exception("Error when computing Mesh_with_layer")
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