Salome HOME
Do not set the mesh in error if there is no log file as requested
[plugins/ghs3dplugin.git] / doc / salome / examples / ghs3d_optimization_no_log.py
1 import salome
2 salome.salome_init()
3
4 from salome.geom import geomBuilder
5 geompy = geomBuilder.New()
6
7 import SMESH
8 from salome.smesh import smeshBuilder
9 smesh =  smeshBuilder.New()
10
11 # create a disk
12 disk = geompy.MakeDiskR(100., 1, theName="disk")
13
14 # triangulate the disk
15 mesh = smesh.Mesh( disk )
16 cadsurf = mesh.Triangle( smeshBuilder.MG_CADSurf )
17 cadsurf.SetQuadAllowed( True )
18 ok = mesh.Compute()
19 if not ok:
20   raise Exception("Error when computing mesh")
21
22 # extrude the 2D mesh into a prismatic mesh
23 mesh.ExtrusionSweepObject( mesh, [0,0,10], 7 )
24
25 # split prisms into tetrahedra
26 mesh.SplitVolumesIntoTetra( mesh )
27
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" )
31
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 )
36 mg_opt.SetPrintLogInFile( False )
37
38 # run optimization
39 ok = optMesh.Compute()
40 if not ok:
41   raise Exception("Error when computing optimization mesh")
42
43 print("Nb tetra before optimization", mesh.NbTetras())
44 print("Nb tetra after  optimization", optMesh.NbTetras())
45
46 # Check that aspect ratio 3D of optimized mesh is better than original mesh
47 min_aspectratio_orig, max_aspectratio_orig = mesh.GetMinMax(SMESH.FT_AspectRatio3D)
48 min_aspectratio_optim, max_aspectratio_optim = optMesh.GetMinMax(SMESH.FT_AspectRatio3D)
49
50 assert (min_aspectratio_orig - min_aspectratio_optim)/min_aspectratio_orig < 0.5
51 assert (max_aspectratio_orig - max_aspectratio_optim)/max_aspectratio_orig < 0.5
52
53 # End of script
54