4 from salome.geom import geomBuilder
5 geompy = geomBuilder.New()
8 from salome.smesh import smeshBuilder
9 smesh = smeshBuilder.New()
12 disk = geompy.MakeDiskR(100., 1, theName="disk")
14 # triangulate the disk
15 mesh = smesh.Mesh( disk )
16 cadsurf = mesh.Triangle( smeshBuilder.MG_CADSurf )
17 cadsurf.SetQuadAllowed( True )
20 raise Exception("Error when computing mesh")
22 # extrude the 2D mesh into a prismatic mesh
23 mesh.ExtrusionSweepObject( mesh, [0,0,10], 7 )
25 # split prisms into tetrahedra
26 mesh.SplitVolumesIntoTetra( mesh )
28 # copy the mesh into a new mesh, since only a mesh not based of geometry
29 # can be optimized using MG-Tetra Optimization
30 optMesh = smesh.CopyMesh( mesh, "optimization" )
32 # add MG-Tetra Optimization
33 mg_opt = optMesh.Tetrahedron( smeshBuilder.MG_Tetra_Optimization )
34 mg_opt.SetSmoothOffSlivers( True )
35 mg_opt.SetOptimizationLevel( smeshBuilder.Strong_Optimization )
38 ok = optMesh.Compute()
40 raise Exception("Error when computing optimization mesh")
42 print("Nb tetra before optimization", mesh.NbTetras())
43 print("Nb tetra after optimization", optMesh.NbTetras())
45 # Check that aspect ratio 3D of optimized mesh is better than original mesh
46 min_aspectratio_orig, max_aspectratio_orig = mesh.GetMinMax(SMESH.FT_AspectRatio3D)
47 min_aspectratio_optim, max_aspectratio_optim = optMesh.GetMinMax(SMESH.FT_AspectRatio3D)
49 assert (min_aspectratio_orig - min_aspectratio_optim)/min_aspectratio_orig < 0.5
50 assert (max_aspectratio_orig - max_aspectratio_optim)/max_aspectratio_orig < 0.5