1 # contains function to compute a mesh in parallel
2 from platform import java_ver
11 import salome_notebook
12 notebook = salome_notebook.NoteBook()
19 from salome.geom import geomBuilder
20 from salome.smesh import smeshBuilder
26 geompy = geomBuilder.New()
28 smesh = smeshBuilder.New()
31 def build_seq_mesh(nbox, boxsize, offset):
34 # First creating all the boxes
39 x_orig = i*(boxsize+offset)
40 y_orig = j*(boxsize+offset)
41 z_orig = k*(boxsize+offset)
43 tmp_box = geompy.MakeBoxDXDYDZ(boxsize, boxsize, boxsize)
45 if not i == j == k == 0:
46 box = geompy.MakeTranslation(tmp_box, x_orig,
51 geompy.addToStudy(box, 'box_{}:{}:{}'.format(i, j, k))
55 # Create fuse of all boxes
56 all_boxes = geompy.MakeCompound(boxes)
57 geompy.addToStudy(all_boxes, 'Compound_1')
59 # Removing duplicates faces and edges
60 all_boxes = geompy.MakeGlueFaces(all_boxes, 1e-07)
61 geompy.addToStudy(all_boxes, 'Glued_Faces_1')
63 all_boxes = geompy.MakeGlueEdges(all_boxes, 1e-07)
64 geompy.addToStudy(all_boxes, 'rubik_cube')
67 # Building sequetial mesh
68 print("Creating mesh")
69 all_box_mesh = smesh.Mesh(all_boxes, "seq_mesh")
72 algo3d = all_box_mesh.Tetrahedron(algo=smeshBuilder.NETGEN_1D2D3D)
74 netgen_parameters = algo3d.Parameters()
75 netgen_parameters.SetMaxSize(34.641)
76 netgen_parameters.SetMinSize(0.141421)
77 netgen_parameters.SetOptimize(1)
78 netgen_parameters.SetCheckOverlapping(0)
79 netgen_parameters.SetCheckChartBoundary(0)
80 netgen_parameters.SetFineness(5)
81 netgen_parameters.SetNbSegPerEdge(16*(boxsize//100))
82 netgen_parameters.SetNbSegPerRadius(1.5)
83 netgen_parameters.SetGrowthRate(0.15)
84 netgen_parameters.SetChordalError(-1)
85 netgen_parameters.SetChordalErrorEnabled(0)
86 netgen_parameters.SetUseSurfaceCurvature(1)
87 netgen_parameters.SetQuadAllowed(0)
88 netgen_parameters.SetCheckOverlapping(False)
89 netgen_parameters.SetNbThreads(2)
91 return all_boxes, all_box_mesh, netgen_parameters
93 def run_test(nbox=2, boxsize=100):
94 """ Run sequential mesh and parallel version of it
97 boxsize: Size of each box
99 geom, seq_mesh, netgen_parameters = build_seq_mesh(nbox, boxsize, 0)
101 par_mesh = smesh.ParallelMesh(geom, netgen_parameters, 6, name="par_mesh")
103 start = time.monotonic()
104 is_done = seq_mesh.Compute()
106 stop = time.monotonic()
107 time_seq = stop-start
109 start = time.monotonic()
110 is_done = par_mesh.Compute()
112 stop = time.monotonic()
113 time_par = stop-start
115 print(" Tetrahedron: ", seq_mesh.NbTetras(), par_mesh.NbTetras())
116 print(" Triangle: ", seq_mesh.NbTriangles(), par_mesh.NbTriangles())
117 print(" edge: ", seq_mesh.NbEdges(), par_mesh.NbEdges())
119 assert par_mesh.NbTetras() > 0
120 assert par_mesh.NbTriangles() > 0
121 assert par_mesh.NbEdges() > 0
123 print("Time elapsed (seq, par): ", time_seq, time_par)
128 run_test(nbox, boxsize)