Salome HOME
[bos #38045][bos #38046] New SA versions of NETGEN and GMSH.
[modules/smesh.git] / test / netgen_runner_1D2D3D.py
diff --git a/test/netgen_runner_1D2D3D.py b/test/netgen_runner_1D2D3D.py
new file mode 100644 (file)
index 0000000..4db4912
--- /dev/null
@@ -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()