X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=test%2Fnetgen_runner_1D2D3D.py;fp=test%2Fnetgen_runner_1D2D3D.py;h=4db491221a489248b51e7b16b37aa1029b1dc3fc;hp=0000000000000000000000000000000000000000;hb=a33b1ed60ee2ef17a8bb2bd0d58d1b7fffbbc8d5;hpb=d2955ae6fb075ec5a396154cdde519bbc9d94421 diff --git a/test/netgen_runner_1D2D3D.py b/test/netgen_runner_1D2D3D.py new file mode 100644 index 000000000..4db491221 --- /dev/null +++ b/test/netgen_runner_1D2D3D.py @@ -0,0 +1,187 @@ +#!/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_simple2d_param_file_1D(param_file,segments,segLenght,maxArea): + """ Create a parameter file for runner """ + param = """1 +{} +{} +{} +0""".format(segments,segLenght,maxArea) + with open(param_file, "w") as ffile: + ffile.write(param) + +def create_simple2d3d_param_file_1D(param_file,segments,segLenght,maxArea,maxVolume): + """ Create a parameter file for runner """ + param = """1 +{} +{} +{} +{} +0""".format(segments,segLenght,maxArea,maxVolume) + + with open(param_file, "w") as ffile: + ffile.write(param) + +def CommonFunction(netgen,case,segments,segLenght,maxArea,maxVolume): + # Building geometry + box = geompy.MakeBoxDXDYDZ(200, 200, 200) + + # Create 1D regular elements + mesh_1d = smesh.Mesh(box, 'Maillage_1') + mesh_1d.Segment().NumberOfSegments(1) + 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 ( case <= 2 ): + param_file = path.join(tmp_dir, "param_simple2D.txt") + else: + param_file = path.join(tmp_dir, "param_simple3D.txt") + + output_mesh = path.join(tmp_dir, "meshout.med") + + print("Running in folder: ", tmp_dir) + + if ( case <= 2 ): + create_simple2d_param_file_1D(param_file, segments, segLenght, maxArea ) + else: + create_simple2d3d_param_file_1D(param_file, segments, segLenght, maxArea, maxVolume ) + + mesh_1d.ExportMED(mesh_file, 0, 41, 1, mesh_1d, 1, [], '', -1, 1) + geompy.ExportBREP( box, 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 NONE {output_mesh}"\ + .format(runner=runner, + NETGEN=netgen, + mesh_file=mesh_file, + shape_file=shape_file, + param_file=param_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 == 1): + nb_segments = mesh_read.getNumberOfCellsWithType(mc.NORM_SEG2) + 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) + if (case == 3): + nb_tetras = mesh_read.getNumberOfCellsWithType(mc.NORM_TETRA4) + mesh_read = mc.ReadUMeshFromFile(output_mesh, "MESH", -1) + nb_triangles = mesh_read.getNumberOfCellsWithType(mc.NORM_TRI3) + mesh_read = mc.ReadUMeshFromFile(output_mesh, "MESH", -2) + nb_segments = mesh_read.getNumberOfCellsWithType(mc.NORM_SEG2) + + return [nb_points,nb_segments,nb_triangles,nb_tetras] + +def test_netgen1d(): + [nb_points,nb_segments,nb_triangles,nb_tetras] = CommonFunction( "NETGEN1D", 1, 1, 200, 0.0, 0.0 ) + + print("Nb Points:", nb_points) + print("Nb Segments:", nb_segments) + assert nb_points > 0 + assert nb_segments > 0 + + +def test_netgen1d2d(): + """ Test netgen1d2d mesher """ + [nb_points,nb_segments,nb_triangles,nb_tetras] = CommonFunction( "NETGEN1D2D", 2, 1, 200, 0.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 > 0 + assert nb_segments > 0 + +def test_netgen1d2dMaxArea(): + """ Test netgen1d2d mesher """ + [nb_points,nb_segments,nb_triangles, nb_tetras] = CommonFunction( "NETGEN1D2D", 2, 5, 200, 50.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 > 0 + assert nb_segments > 0 + + +def test_netgen1d2d3d(): + """ Test netgen1d2d mesher """ + [nb_points,nb_segments,nb_triangles,nb_tetras] = CommonFunction( "NETGEN1D2D3D", 3, 1, 200, 0.0, 0.0 ) + + print("Nb Tetras:", nb_tetras) + print("Nb Triangles:", nb_triangles) + print("Nb Segments:", nb_segments) + print("Nb Points:", nb_points) + + assert nb_triangles == 12 + assert nb_tetras == 5 + assert nb_points > 0 + assert nb_segments > 0 + +def test_netgen1d2dMaxVolume(): + """ Test netgen1d2d mesher """ + [nb_points,nb_segments,nb_triangles,nb_tetras] = CommonFunction( "NETGEN1D2D3D", 3, 1, 200, 500.0, 500.0 ) + + print("Nb Tetras:", nb_tetras) + print("Nb Triangles:", nb_triangles) + print("Nb Segments:", nb_segments) + print("Nb Points:", nb_points) + + assert nb_triangles > 12 + assert nb_tetras > 5 + assert nb_points > 0 + assert nb_segments > 0 + +if __name__ == "__main__": + if sys.platform == "win32": + print("Disabled on windows") + sys.exit(0) + test_netgen1d() + test_netgen1d2d() + test_netgen1d2d3d() + test_netgen1d2dMaxArea() + test_netgen1d2dMaxVolume()