X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=test%2Fnetgen_runner_2D.py;fp=test%2Fnetgen_runner_2D.py;h=36be1b7170b22e7bfc39aeb05a4eea01ee087000;hp=0000000000000000000000000000000000000000;hb=a33b1ed60ee2ef17a8bb2bd0d58d1b7fffbbc8d5;hpb=d2955ae6fb075ec5a396154cdde519bbc9d94421 diff --git a/test/netgen_runner_2D.py b/test/netgen_runner_2D.py new file mode 100644 index 000000000..36be1b717 --- /dev/null +++ b/test/netgen_runner_2D.py @@ -0,0 +1,182 @@ +#!/usr/bin/env python +import sys +import salome + +salome.salome_init() + +from os import path +import tempfile +import subprocess + +import GEOM, SMESH, SALOMEDS + +from salome.geom import geomBuilder +from salome.smesh import smeshBuilder + +import math + +smesh = smeshBuilder.New() +geompy = geomBuilder.New() + +import medcoupling as mc + +def create_param_file(param_file): + """ Create a parameter file for runner """ + param = """1 +34.641 +0.14 +16 +0.15 +1.5 +0 +0 +1 +5 +1 +1 +-1 +3 +3 +0.2 +2 +1 +0 +0 +2 +2 +0 + +0 +0 +0""" + with open(param_file, "w") as ffile: + ffile.write(param) + +def create_maxarea_param_file_2D(param_file,maxArea): + """ Create a parameter file for runner """ + param = """1 +{} +""".format(maxArea) + with open(param_file, "w") as ffile: + ffile.write(param) + +def create_lenghtFromEdges_param_file_2D(param_file): + """ Create a parameter file for runner """ + param = """1 +""" + + with open(param_file, "w") as ffile: + ffile.write(param) + +def CommonFunction(netgen,case,numberOfEdges1D,hypo,maxArea): + # Building geometry + geometry = geompy.MakeBoxDXDYDZ(200, 200, 200) + # Create 1D regular elements + mesh_1d = smesh.Mesh(geometry, 'Maillage_1') + mesh_1d.Segment().NumberOfSegments(numberOfEdges1D) + isDone = mesh_1d.Compute() + + if not isDone: + raise Exception("Error when computing Mesh") + + smesh.SetName(mesh_1d, 'Maillage_1') + nb_points = 0 + nb_segments = 0 + nb_triangles = 0 + nb_tetras = 0 + with tempfile.TemporaryDirectory() as tmp_dir: + mesh_file = path.join(tmp_dir, "mesh.med") + shape_file = path.join(tmp_dir, "shape.brep") + + if ( hypo == 0 ): + param_file = path.join(tmp_dir, "param.txt") + create_param_file(param_file ) + + if ( hypo == 1 ): + param_file = path.join(tmp_dir, "param_lenghtfromedge.txt") + create_lenghtFromEdges_param_file_2D(param_file ) + + if ( hypo == 2 ): + param_file = path.join(tmp_dir, "param_maxarea.txt") + create_maxarea_param_file_2D(param_file,maxArea) + + bin_file = path.join(tmp_dir, "mesh.bin") + output_mesh = path.join(tmp_dir, "meshout.med") + + print("Running in folder: ", tmp_dir) + + mesh_1d.ExportMED(mesh_file, 0, 41, 1, mesh_1d, 1, [], '', -1, 1) + geompy.ExportBREP( geometry, shape_file ) + + runner = path.join("${NETGENPLUGIN_ROOT_DIR}", + "bin", + "salome", + "NETGENPlugin_Runner") + + if sys.platform == 'win32': + runner += ".exe" + + cmd = "{runner} {NETGEN} {mesh_file} {shape_file} "\ + "{param_file} NONE {bin_file} {output_mesh}"\ + .format(runner=runner, + NETGEN=netgen, + mesh_file=mesh_file, + shape_file=shape_file, + param_file=param_file, + bin_file=bin_file, + output_mesh=output_mesh) + print(cmd) + subprocess.check_call(cmd, shell=True) + mesh_read = mc.ReadUMeshFromFile(output_mesh, "MESH", 0) + nb_points = mesh_read.getNumberOfNodes() + if (case == 2): + nb_triangles = mesh_read.getNumberOfCellsWithType(mc.NORM_TRI3) + mesh_read = mc.ReadUMeshFromFile(output_mesh, "MESH", -1) + nb_segments = mesh_read.getNumberOfCellsWithType(mc.NORM_SEG2) + + return [nb_points,nb_segments,nb_triangles,nb_tetras] + + +def test_netgen2d(): + """ Test netgen2d mesher """ + [nb_points,nb_segments,nb_triangles,nb_tetras] = CommonFunction( "NETGEN2D", 2, 3, 0, 0.0 ) + + print("Nb Triangles:", nb_triangles) + print("Nb Segments:", nb_segments) + print("Nb Points:", nb_points) + + assert nb_triangles > 12 + assert nb_points > 8 + assert nb_segments > 12 + +def test_netgen2dMaxArea(): + """ Test netgen2d mesher """ + [nb_points,nb_segments,nb_triangles,nb_tetras] = CommonFunction( "NETGEN2D", 2, 3, 2, 75.0 ) + + print("Nb Triangles:", nb_triangles) + print("Nb Segments:", nb_segments) + print("Nb Points:", nb_points) + + assert nb_triangles > 12 + assert nb_points > 8 + assert nb_segments > 12 + +def test_netgen2dLenghtFromEdge(): + """ Test netgen2d mesher """ + [nb_points,nb_segments,nb_triangles,nb_tetras] = CommonFunction( "NETGEN2D", 2, 1, 1, 0.0 ) + + print("Nb Triangles:", nb_triangles) + print("Nb Segments:", nb_segments) + print("Nb Points:", nb_points) + + assert nb_triangles == 12 + assert nb_points == 8 + assert nb_segments == 12 + +if __name__ == "__main__": + if sys.platform == "win32": + print("Disabled on windows") + sys.exit(0) + test_netgen2d() + test_netgen2dMaxArea() + test_netgen2dLenghtFromEdge()