11 import GEOM, SMESH, SALOMEDS
13 from salome.geom import geomBuilder
14 from salome.smesh import smeshBuilder
18 smesh = smeshBuilder.New()
19 geompy = geomBuilder.New()
21 import medcoupling as mc
23 def create_param_file(param_file):
24 """ Create a parameter file for runner """
52 with open(param_file, "w") as ffile:
55 def create_maxarea_param_file_2D(param_file,maxArea):
56 """ Create a parameter file for runner """
60 with open(param_file, "w") as ffile:
63 def create_lenghtFromEdges_param_file_2D(param_file):
64 """ Create a parameter file for runner """
68 with open(param_file, "w") as ffile:
71 def CommonFunction(netgen,case,numberOfEdges1D,hypo,maxArea):
73 geometry = geompy.MakeBoxDXDYDZ(200, 200, 200)
74 # Create 1D regular elements
75 mesh_1d = smesh.Mesh(geometry, 'Maillage_1')
76 mesh_1d.Segment().NumberOfSegments(numberOfEdges1D)
77 isDone = mesh_1d.Compute()
80 raise Exception("Error when computing Mesh")
82 smesh.SetName(mesh_1d, 'Maillage_1')
87 with tempfile.TemporaryDirectory() as tmp_dir:
88 mesh_file = path.join(tmp_dir, "mesh.med")
89 shape_file = path.join(tmp_dir, "shape.brep")
92 param_file = path.join(tmp_dir, "param.txt")
93 create_param_file(param_file )
96 param_file = path.join(tmp_dir, "param_lenghtfromedge.txt")
97 create_lenghtFromEdges_param_file_2D(param_file )
100 param_file = path.join(tmp_dir, "param_maxarea.txt")
101 create_maxarea_param_file_2D(param_file,maxArea)
103 bin_file = path.join(tmp_dir, "mesh.bin")
104 output_mesh = path.join(tmp_dir, "meshout.med")
106 print("Running in folder: ", tmp_dir)
108 mesh_1d.ExportMED(mesh_file, 0, 41, 1, mesh_1d, 1, [], '', -1, 1)
109 geompy.ExportBREP( geometry, shape_file )
111 runner = path.join("${NETGENPLUGIN_ROOT_DIR}",
114 "NETGENPlugin_Runner")
116 if sys.platform == 'win32':
119 cmd = "{runner} {NETGEN} {mesh_file} {shape_file} "\
120 "{param_file} NONE {bin_file} {output_mesh}"\
121 .format(runner=runner,
124 shape_file=shape_file,
125 param_file=param_file,
127 output_mesh=output_mesh)
129 subprocess.check_call(cmd, shell=True)
130 mesh_read = mc.ReadUMeshFromFile(output_mesh, "MESH", 0)
131 nb_points = mesh_read.getNumberOfNodes()
133 nb_triangles = mesh_read.getNumberOfCellsWithType(mc.NORM_TRI3)
134 mesh_read = mc.ReadUMeshFromFile(output_mesh, "MESH", -1)
135 nb_segments = mesh_read.getNumberOfCellsWithType(mc.NORM_SEG2)
137 return [nb_points,nb_segments,nb_triangles,nb_tetras]
141 """ Test netgen2d mesher """
142 [nb_points,nb_segments,nb_triangles,nb_tetras] = CommonFunction( "NETGEN2D", 2, 3, 0, 0.0 )
144 print("Nb Triangles:", nb_triangles)
145 print("Nb Segments:", nb_segments)
146 print("Nb Points:", nb_points)
148 assert nb_triangles > 12
150 assert nb_segments > 12
152 def test_netgen2dMaxArea():
153 """ Test netgen2d mesher """
154 [nb_points,nb_segments,nb_triangles,nb_tetras] = CommonFunction( "NETGEN2D", 2, 3, 2, 75.0 )
156 print("Nb Triangles:", nb_triangles)
157 print("Nb Segments:", nb_segments)
158 print("Nb Points:", nb_points)
160 assert nb_triangles > 12
162 assert nb_segments > 12
164 def test_netgen2dLenghtFromEdge():
165 """ Test netgen2d mesher """
166 [nb_points,nb_segments,nb_triangles,nb_tetras] = CommonFunction( "NETGEN2D", 2, 1, 1, 0.0 )
168 print("Nb Triangles:", nb_triangles)
169 print("Nb Segments:", nb_segments)
170 print("Nb Points:", nb_points)
172 assert nb_triangles == 12*2
173 assert nb_points == 14
174 assert nb_segments == 12
176 if __name__ == "__main__":
177 if sys.platform == "win32":
178 print("Disabled on windows")
181 test_netgen2dMaxArea()
182 test_netgen2dLenghtFromEdge()