mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2024-12-27 09:50:34 +05:00
84 lines
2.9 KiB
Python
84 lines
2.9 KiB
Python
|
# Viscous layers construction
|
||
|
|
||
|
import salome
|
||
|
salome.salome_init_without_session()
|
||
|
|
||
|
import SMESH
|
||
|
from salome.geom import geomBuilder
|
||
|
from salome.smesh import smeshBuilder
|
||
|
|
||
|
geom_builder = geomBuilder.New()
|
||
|
smesh_builder = smeshBuilder.New()
|
||
|
|
||
|
X = geom_builder.MakeVectorDXDYDZ( 1,0,0 )
|
||
|
O = geom_builder.MakeVertex( 100,50,50 )
|
||
|
plane = geom_builder.MakePlane( O, X, 200 ) # plane YZ
|
||
|
|
||
|
box = geom_builder.MakeBoxDXDYDZ(200,100,100)
|
||
|
|
||
|
shape = geom_builder.MakeHalfPartition( box, plane )
|
||
|
|
||
|
faces = geom_builder.SubShapeAllSorted(shape, geom_builder.ShapeType["FACE"])
|
||
|
face1 = faces[1]
|
||
|
# 4 left, 34 middle, 50 right
|
||
|
# Have to pass the middle face id, otherwise it is going to create two disjoint boxes
|
||
|
# because the common face is not going to be ignored and both boxes are going to shrink
|
||
|
# in this direction too
|
||
|
ignoreFaces = [4,34,50]
|
||
|
|
||
|
geom_builder.addToStudy( shape, "shape" )
|
||
|
geom_builder.addToStudyInFather( shape, face1, "face1")
|
||
|
|
||
|
# 3D Viscous layers
|
||
|
mesh = smesh_builder.Mesh(shape, "CFD")
|
||
|
|
||
|
ViscousBuilder = mesh.ViscousLayerBuilder()
|
||
|
thickness = 20
|
||
|
numberOfLayers = 10
|
||
|
stretchFactor = 1.5
|
||
|
groupName = "Boundary layers"
|
||
|
ViscousBuilder.setBuilderParameters( thickness, numberOfLayers, stretchFactor,
|
||
|
ignoreFaces, # optional
|
||
|
groupName = groupName ) # optional
|
||
|
|
||
|
Shrinkshape = ViscousBuilder.GetShrinkGeometry()
|
||
|
|
||
|
shrinkMesh = smesh_builder.Mesh(Shrinkshape, "Shrink")
|
||
|
shrinkMesh.Segment().NumberOfSegments( 4 )
|
||
|
faces = geom_builder.SubShapeAllSorted(Shrinkshape, geom_builder.ShapeType["FACE"])
|
||
|
shrinkFace1 = faces[1]
|
||
|
|
||
|
shrinkMesh.Triangle()
|
||
|
shrinkMesh.Quadrangle(shrinkFace1)
|
||
|
algo3D = shrinkMesh.Tetrahedron()
|
||
|
|
||
|
if not shrinkMesh.Compute(): raise Exception("Error when computing Mesh")
|
||
|
|
||
|
#Add viscous layer
|
||
|
FinalMesh = ViscousBuilder.AddLayers( shrinkMesh )
|
||
|
|
||
|
mesh.MakeGroup("Tetras",SMESH.VOLUME,SMESH.FT_ElemGeomType,"=",SMESH.Geom_TETRA)
|
||
|
mesh.MakeGroup("Pyras",SMESH.VOLUME,SMESH.FT_ElemGeomType,"=",SMESH.Geom_PYRAMID)
|
||
|
mesh.MakeGroup("Prims",SMESH.VOLUME,SMESH.FT_ElemGeomType,"=",SMESH.Geom_PENTA)
|
||
|
|
||
|
# 2D Viscous layers
|
||
|
|
||
|
# 3 edges of the 4 edges of face1
|
||
|
edgeIds = geom_builder.SubShapeAllIDs( face1, geom_builder.ShapeType["EDGE"])[:-1]
|
||
|
|
||
|
mesh = smesh_builder.Mesh(face1,"Face1")
|
||
|
ViscousBuilder = mesh.ViscousLayerBuilder()
|
||
|
ViscousBuilder.setBuilderParameters( 2, 3, 1.5,
|
||
|
edgeIds, True, # optional
|
||
|
groupName = groupName ) # optional
|
||
|
|
||
|
#For 2D, edges are not selectable (to be developed in occt) the entire face is shrink
|
||
|
shrinkFace = ViscousBuilder.GetShrinkGeometry()
|
||
|
shrinkMesh = smesh_builder.Mesh(shrinkFace, "VicsousLayers2D")
|
||
|
|
||
|
shrinkMesh.Segment().NumberOfSegments( 5 )
|
||
|
algo2D = shrinkMesh.Triangle()
|
||
|
|
||
|
if not shrinkMesh.Compute(): raise Exception("Error when computing Mesh of shrink face")
|
||
|
|
||
|
FinalMeshFace = ViscousBuilder.AddLayers( shrinkMesh )
|