Salome HOME
[bos #38045][bos #38046] New SA versions of NETGEN and GMSH.
[modules/smesh.git] / doc / examples / creating_parallel_gmsh_mesh.py
1 # contains function to compute a mesh in parallel
2 import salome
3
4 salome.salome_init()
5 import salome_notebook
6 notebook = salome_notebook.NoteBook()
7
8 ###
9 ### GEOM component
10 ###
11
12 import GEOM
13 from salome.geom import geomBuilder
14 from salome.smesh import smeshBuilder
15 import SALOMEDS
16
17 import numpy as np
18
19 geompy = geomBuilder.New()
20
21
22 nbox = 2
23 boxsize = 100
24 offset = 0
25 # Create 3D faces
26 boxes = []
27 # First creating all the boxes
28 for i in range(nbox):
29     for j in range(nbox):
30         for k in range(nbox):
31
32             x_orig = i*(boxsize+offset)
33             y_orig = j*(boxsize+offset)
34             z_orig = k*(boxsize+offset)
35
36             tmp_box = geompy.MakeBoxDXDYDZ(boxsize, boxsize, boxsize)
37
38             if not i == j == k == 0:
39                 box = geompy.MakeTranslation(tmp_box, x_orig,
40                                              y_orig, z_orig)
41             else:
42                 box = tmp_box
43
44             geompy.addToStudy(box, 'box_{}:{}:{}'.format(i, j, k))
45
46             boxes.append(box)
47
48 # Create fuse of all boxes
49 all_boxes = geompy.MakeCompound(boxes)
50 geompy.addToStudy(all_boxes, 'Compound_1')
51
52 # Removing duplicates faces and edges
53 all_boxes = geompy.MakeGlueFaces(all_boxes, 1e-07)
54 geompy.addToStudy(all_boxes, 'Glued_Faces_1')
55
56 rubik_cube = geompy.MakeGlueEdges(all_boxes, 1e-07)
57 geompy.addToStudy(all_boxes, 'rubik_cube')
58
59 smesh = smeshBuilder.New()
60 print("Creating Parallel Mesh")
61 par_mesh = smesh.ParallelMesh(rubik_cube, name="par_mesh", mesher3D="GMSH")
62
63 print("Creating hypoehtesis for netgen")
64 NETGEN_3D_Parameters_1 = smesh.CreateHypothesisByAverageLength( 'NETGEN_Parameters',
65                                          'NETGENEngine', 34.641, 0 )
66 print("Adding hypothesis")
67 par_mesh.AddGlobalHypothesis(NETGEN_3D_Parameters_1, mesher="GMSH" )
68
69 #Set here particular mesh parameters in 3D
70 for algo3d in par_mesh._algo3d:
71     param3d = algo3d.Parameters()
72     param3d.Set2DAlgo(0)
73     param3d.Set3DAlgo(0)
74     param3d.SetSmouthSteps(2)
75     param3d.SetSizeFactor(1.1)
76
77 print("Setting parallelism method")
78 par_mesh.SetParallelismMethod(smeshBuilder.MULTITHREAD)
79
80 print("Setting parallelism options")
81 param = par_mesh.GetParallelismSettings()
82 param.SetNbThreads(6)
83
84 print("Starting parallel compute")
85 is_done = par_mesh.Compute()
86 if not is_done:
87     raise Exception("Error when computing Mesh")
88
89 print("  Tetrahedron: ",  par_mesh.NbTetras())
90 print("  Triangle: ", par_mesh.NbTriangles())
91 print("  edge: ", par_mesh.NbEdges())
92
93 assert  par_mesh.NbTetras() > 0
94 assert  par_mesh.NbTriangles() > 0
95 assert  par_mesh.NbEdges() > 0