smesh/doc/examples/cartesian_algo.py

109 lines
3.0 KiB
Python
Raw Permalink Normal View History

2013-02-12 20:37:44 +06:00
# Usage of Body Fitting algorithm
import salome
salome.salome_init_without_session()
2022-04-11 18:28:01 +05:00
from salome.geom import geomBuilder
from salome.smesh import smeshBuilder
2022-04-11 18:28:01 +05:00
geom_builder = geomBuilder.New()
smesh_builder = smeshBuilder.New()
2013-02-12 20:37:44 +06:00
# create a sphere
2022-04-11 18:28:01 +05:00
sphere = geom_builder.MakeSphereR( 50 )
# cut the sphere by a box
2022-04-11 18:28:01 +05:00
box = geom_builder.MakeBoxDXDYDZ( 100, 100, 100 )
partition = geom_builder.MakePartition([ sphere ], [ box ], theName="partition")
2013-02-12 20:37:44 +06:00
# create a mesh and assign a "Body Fitting" algo
2022-04-11 18:28:01 +05:00
mesh = smesh_builder.Mesh( partition )
2013-02-12 20:37:44 +06:00
cartAlgo = mesh.BodyFitted()
# define a cartesian grid using Coordinates
2017-03-20 17:27:30 +05:00
coords = list(range(-100,100,10))
2013-02-12 20:37:44 +06:00
cartHyp = cartAlgo.SetGrid( coords,coords,coords, 1000000)
# compute the mesh
mesh.Compute()
2017-03-20 17:27:30 +05:00
print("nb hexahedra",mesh.NbHexas())
print("nb tetrahedra",mesh.NbTetras())
print("nb polyhedra",mesh.NbPolyhedrons())
print()
2013-02-12 20:37:44 +06:00
# define the grid by setting constant spacing
cartHyp = cartAlgo.SetGrid( "10","10","10", 1000000)
mesh.Compute()
2017-03-20 17:27:30 +05:00
print("nb hexahedra",mesh.NbHexas())
print("nb tetrahedra",mesh.NbTetras())
print("nb polyhedra",mesh.NbPolyhedrons())
print("nb faces",mesh.NbFaces())
print()
# activate creation of faces
cartHyp.SetToCreateFaces( True )
mesh.Compute()
print("nb hexahedra",mesh.NbHexas())
print("nb tetrahedra",mesh.NbTetras())
print("nb polyhedra",mesh.NbPolyhedrons())
print("nb faces",mesh.NbFaces())
print()
2013-02-12 20:37:44 +06:00
# enable consideration of shared faces
cartHyp.SetToConsiderInternalFaces( True )
mesh.Compute()
print("nb hexahedra",mesh.NbHexas())
print("nb tetrahedra",mesh.NbTetras())
print("nb polyhedra",mesh.NbPolyhedrons())
print("nb faces",mesh.NbFaces())
print()
2013-02-12 20:37:44 +06:00
# define the grid by setting different spacing in 2 sub-ranges of geometry
spaceFuns = ["5","10+10*t"]
cartAlgo.SetGrid( [spaceFuns, [0.5]], [spaceFuns, [0.5]], [spaceFuns, [0.25]], 10 )
mesh.Compute()
2017-03-20 17:27:30 +05:00
print("nb hexahedra",mesh.NbHexas())
print("nb tetrahedra",mesh.NbTetras())
print("nb polyhedra",mesh.NbPolyhedrons())
print()
# Example of customization of dirtections of the grid axes
# make a box with non-orthogonal edges
2022-04-11 18:28:01 +05:00
xDir = geom_builder.MakeVectorDXDYDZ( 1.0, 0.1, 0.0, "xDir" )
yDir = geom_builder.MakeVectorDXDYDZ(-0.1, 1.0, 0.0, "yDir" )
zDir = geom_builder.MakeVectorDXDYDZ( 0.2, 0.3, 1.0, "zDir" )
face = geom_builder.MakePrismVecH( xDir, yDir, 1.0 )
box = geom_builder.MakePrismVecH( face, zDir, 1.0, theName="box" )
spc = "0.1" # spacing
# default axes
2022-04-11 18:28:01 +05:00
mesh = smesh_builder.Mesh( box, "custom axes")
algo = mesh.BodyFitted()
algo.SetGrid( spc, spc, spc, 10000 )
mesh.Compute()
2017-03-20 17:27:30 +05:00
print("Default axes")
print(" nb hex:",mesh.NbHexas())
# set axes using edges of the box
algo.SetAxesDirs( xDir, [-0.1,1,0], zDir )
mesh.Compute()
2017-03-20 17:27:30 +05:00
print("Manual axes")
print(" nb hex:",mesh.NbHexas())
# set optimal orthogonal axes
algo.SetOptimalAxesDirs( isOrthogonal=True )
mesh.Compute()
2017-03-20 17:27:30 +05:00
print("Optimal orthogonal axes")
print(" nb hex:",mesh.NbHexas())
# set optimal non-orthogonal axes
algo.SetOptimalAxesDirs( isOrthogonal=False )
mesh.Compute()
2017-03-20 17:27:30 +05:00
print("Optimal non-orthogonal axes")
print(" nb hex:",mesh.NbHexas())