From d8066aae19cae4f41fe04b0603c86d09fd2394ca Mon Sep 17 00:00:00 2001
From: Lars Bilke <lars.bilke@ufz.de>
Date: Thu, 25 Jul 2024 10:06:14 +0200
Subject: [PATCH] [T] Rewritten GMSH2OGS_Extractoundary snakemake test to
 pytest.

---
 .../Utils/GMSH2OGS_ExtractBoundary.smk        | 86 -------------------
 .../GMSH2OGS_ExtractBoundary_MeshByGmsh4.smk  | 85 ------------------
 Applications/Utils/Tests.cmake                | 21 -----
 .../{MeshLib => Utils/GMSH2OGS}/A2-gmsh.msh   |  0
 .../{MeshLib => Utils/GMSH2OGS}/A2-gmsh4.msh  |  0
 Tests/Data/{MeshLib => Utils/GMSH2OGS}/A2.vtu |  0
 .../Data/{MeshLib => Utils/GMSH2OGS}/A2_0.vtu |  0
 .../Data/{MeshLib => Utils/GMSH2OGS}/A2_1.vtu |  0
 .../Data/{MeshLib => Utils/GMSH2OGS}/A2_2.vtu |  0
 .../Data/{MeshLib => Utils/GMSH2OGS}/A2_3.vtu |  0
 .../Data/{MeshLib => Utils/GMSH2OGS}/A2_4.vtu |  0
 .../Data/{MeshLib => Utils/GMSH2OGS}/A2_5.vtu |  0
 .../Data/{MeshLib => Utils/GMSH2OGS}/A2_6.vtu |  0
 .../Data/{MeshLib => Utils/GMSH2OGS}/A2_7.vtu |  0
 .../test_gmsh2ogs_extract_boundary.py         | 79 +++++++++++++++++
 15 files changed, 79 insertions(+), 192 deletions(-)
 delete mode 100644 Applications/Utils/GMSH2OGS_ExtractBoundary.smk
 delete mode 100644 Applications/Utils/GMSH2OGS_ExtractBoundary_MeshByGmsh4.smk
 rename Tests/Data/{MeshLib => Utils/GMSH2OGS}/A2-gmsh.msh (100%)
 rename Tests/Data/{MeshLib => Utils/GMSH2OGS}/A2-gmsh4.msh (100%)
 rename Tests/Data/{MeshLib => Utils/GMSH2OGS}/A2.vtu (100%)
 rename Tests/Data/{MeshLib => Utils/GMSH2OGS}/A2_0.vtu (100%)
 rename Tests/Data/{MeshLib => Utils/GMSH2OGS}/A2_1.vtu (100%)
 rename Tests/Data/{MeshLib => Utils/GMSH2OGS}/A2_2.vtu (100%)
 rename Tests/Data/{MeshLib => Utils/GMSH2OGS}/A2_3.vtu (100%)
 rename Tests/Data/{MeshLib => Utils/GMSH2OGS}/A2_4.vtu (100%)
 rename Tests/Data/{MeshLib => Utils/GMSH2OGS}/A2_5.vtu (100%)
 rename Tests/Data/{MeshLib => Utils/GMSH2OGS}/A2_6.vtu (100%)
 rename Tests/Data/{MeshLib => Utils/GMSH2OGS}/A2_7.vtu (100%)
 create mode 100644 Tests/Data/Utils/GMSH2OGS/test_gmsh2ogs_extract_boundary.py

diff --git a/Applications/Utils/GMSH2OGS_ExtractBoundary.smk b/Applications/Utils/GMSH2OGS_ExtractBoundary.smk
deleted file mode 100644
index fec4376e1c4..00000000000
--- a/Applications/Utils/GMSH2OGS_ExtractBoundary.smk
+++ /dev/null
@@ -1,86 +0,0 @@
-# Usage, e.g.:
-#   snakemake -s GMSH2OGS_ExtractBoundary.smk -j 1 --configfile $HOME/code/ogs6/build/buildinfo.yaml
-#
-# buildinfo.yaml contains variables such as Data_BINARY_DIR
-
-import os
-os.environ["PATH"] += os.pathsep + os.pathsep.join([config['BIN_DIR']])
-workdir: f"{config['Data_BINARY_DIR']}/MeshLib"
-
-#import ipdb
-#ipdb.set_trace()
-
-VTKDIFF = f"file://{config['SOURCE_DIR']}/scripts/snakemake/vtkdiff"
-SOURCE_DIR = f"{config['Data_SOURCE_DIR']}/MeshLib"
-
-MESH_NAME = "A2"
-BULK_MESH = f"{MESH_NAME}.vtu"
-GMSH_MESH = f"{MESH_NAME}-gmsh.msh"
-GMSH2OGS = f"{config['BIN_DIR']}/GMSH2OGS --gmsh2_physical_id"
-
-INNER_BOUNDARIES = "[12]"
-OUTER_BOUNDARIES = "[034567]"
-
-ALL_REFERENCE_FILES = glob_wildcards(f"{SOURCE_DIR}/{{file, {MESH_NAME}.*}}.vtu").file
-
-rule all:
-    input:
-        expand("{file}.vtkdiff.out", file=ALL_REFERENCE_FILES)
-
-rule gmsh2ogs:
-    input:
-        f"{SOURCE_DIR}/{GMSH_MESH}"
-    output:
-        expand("{file}.vtu", file=ALL_REFERENCE_FILES)
-    shell:
-        "{GMSH2OGS} -i {input} -o {BULK_MESH} -e -b -v"
-
-rule vtkdiff_geometry_bulk:
-    input:
-        a = f"{SOURCE_DIR}/{BULK_MESH}",
-        b = BULK_MESH
-    output:
-        f"{MESH_NAME}.vtkdiff.out"
-    params:
-        check_mesh = True,
-        fields = [["MaterialIDs", 0, 0]]
-    wrapper:
-        VTKDIFF
-
-rule vtkdiff_geometry_boundary:
-    input:
-        a = f"{SOURCE_DIR}/{MESH_NAME}_{{x}}.vtu",
-        b = f"{MESH_NAME}_{{x}}.vtu"
-    output:
-        f"{MESH_NAME}_{{x}}.vtkdiff.out-bulk_node_ids"
-    params:
-        check_mesh = True,
-        fields = [["bulk_node_ids", 0, 0]]
-    wrapper:
-        VTKDIFF
-
-rule vtkdiff_geometry_inner:
-    input:
-        f"{MESH_NAME}_{{x}}.vtkdiff.out-bulk_node_ids",
-        a = f"{SOURCE_DIR}/{MESH_NAME}_{{x}}.vtu",
-        b = f"{MESH_NAME}_{{x}}.vtu"
-    output:
-        f"{MESH_NAME}_{{x, {INNER_BOUNDARIES}}}.vtkdiff.out"
-    params:
-        check_mesh = True,
-        fields = [["number_bulk_elements", 0, 0]]
-    wrapper:
-        VTKDIFF
-
-rule vtkdiff_geometry_outer:
-    input:
-        f"{MESH_NAME}_{{x}}.vtkdiff.out-bulk_node_ids",
-        a = f"{SOURCE_DIR}/{MESH_NAME}_{{x}}.vtu",
-        b = f"{MESH_NAME}_{{x}}.vtu"
-    output:
-        f"{MESH_NAME}_{{x, {OUTER_BOUNDARIES}}}.vtkdiff.out"
-    params:
-        check_mesh = True,
-        fields = [["bulk_element_ids", 0, 0]]
-    wrapper:
-        VTKDIFF
diff --git a/Applications/Utils/GMSH2OGS_ExtractBoundary_MeshByGmsh4.smk b/Applications/Utils/GMSH2OGS_ExtractBoundary_MeshByGmsh4.smk
deleted file mode 100644
index 73d35e5b580..00000000000
--- a/Applications/Utils/GMSH2OGS_ExtractBoundary_MeshByGmsh4.smk
+++ /dev/null
@@ -1,85 +0,0 @@
-# Usage, e.g.:
-#   snakemake -s GMSH2OGS_ExtractBoundary.smk -j 1 --configfile $HOME/code/ogs6/build/buildinfo.yaml
-#
-# buildinfo.yaml contains variables such as Data_BINARY_DIR
-
-import os
-os.environ["PATH"] += os.pathsep + os.pathsep.join([config['BIN_DIR']])
-workdir: f"{config['Data_BINARY_DIR']}/MeshLib"
-
-#import ipdb
-#ipdb.set_trace()
-
-VTKDIFF = f"file://{config['SOURCE_DIR']}/scripts/snakemake/vtkdiff"
-SOURCE_DIR = f"{config['Data_SOURCE_DIR']}/MeshLib"
-GMSH2OGS = f"{config['BIN_DIR']}/GMSH2OGS"
-
-MESH_NAME = "A2"
-BULK_MESH = f"{MESH_NAME}.vtu"
-GMSH_MESH = f"{MESH_NAME}-gmsh4.msh"
-INNER_BOUNDARIES = "[12]"
-OUTER_BOUNDARIES = "[034567]"
-
-ALL_REFERENCE_FILES = glob_wildcards(f"{SOURCE_DIR}/{{file, {MESH_NAME}.*}}.vtu").file
-
-rule all:
-    input:
-        expand("{file}.vtkdiff.out", file=ALL_REFERENCE_FILES)
-
-rule gmsh2ogs:
-    input:
-        f"{SOURCE_DIR}/{GMSH_MESH}"
-    output:
-        expand("{file}.vtu", file=ALL_REFERENCE_FILES)
-    shell:
-        "{GMSH2OGS} -i {input} -o {BULK_MESH} -e -b -v"
-
-rule vtkdiff_geometry_bulk:
-    input:
-        a = f"{SOURCE_DIR}/{BULK_MESH}",
-        b = BULK_MESH
-    output:
-        f"{MESH_NAME}.vtkdiff.out"
-    params:
-        check_mesh = True,
-        fields = [["MaterialIDs", 0, 0]]
-    wrapper:
-        VTKDIFF
-
-rule vtkdiff_geometry_boundary:
-    input:
-        a = f"{SOURCE_DIR}/{MESH_NAME}_{{x}}.vtu",
-        b = f"{MESH_NAME}_{{x}}.vtu"
-    output:
-        f"{MESH_NAME}_{{x}}.vtkdiff.out-bulk_node_ids"
-    params:
-        check_mesh = True,
-        fields = [["bulk_node_ids", 0, 0]]
-    wrapper:
-        VTKDIFF
-
-rule vtkdiff_geometry_inner:
-    input:
-        f"{MESH_NAME}_{{x}}.vtkdiff.out-bulk_node_ids",
-        a = f"{SOURCE_DIR}/{MESH_NAME}_{{x}}.vtu",
-        b = f"{MESH_NAME}_{{x}}.vtu"
-    output:
-        f"{MESH_NAME}_{{x, {INNER_BOUNDARIES}}}.vtkdiff.out"
-    params:
-        check_mesh = True,
-        fields = [["number_bulk_elements", 0, 0]]
-    wrapper:
-        VTKDIFF
-
-rule vtkdiff_geometry_outer:
-    input:
-        f"{MESH_NAME}_{{x}}.vtkdiff.out-bulk_node_ids",
-        a = f"{SOURCE_DIR}/{MESH_NAME}_{{x}}.vtu",
-        b = f"{MESH_NAME}_{{x}}.vtu"
-    output:
-        f"{MESH_NAME}_{{x, {OUTER_BOUNDARIES}}}.vtkdiff.out"
-    params:
-        check_mesh = True,
-        fields = [["bulk_element_ids", 0, 0]]
-    wrapper:
-        VTKDIFF
diff --git a/Applications/Utils/Tests.cmake b/Applications/Utils/Tests.cmake
index 5a109f848d6..a76ac034d43 100644
--- a/Applications/Utils/Tests.cmake
+++ b/Applications/Utils/Tests.cmake
@@ -839,27 +839,6 @@ if(TARGET VerticalSliceFromLayers AND GMSH)
 
 endif()
 
-if(TARGET GMSH2OGS AND SNAKEMAKE AND TEE_TOOL_PATH)
-    add_test(NAME snakemake_GMSH2OGS_ExtractBoundary
-        COMMAND ${SNAKEMAKE} --cores all
-        --configfile ${PROJECT_BINARY_DIR}/buildinfo.yaml
-        -s ${CMAKE_CURRENT_SOURCE_DIR}/GMSH2OGS_ExtractBoundary.smk
-    )
-
-    add_test(NAME snakemake_GMSH2OGS_Gmsh4_ExtractBoundary
-        COMMAND ${SNAKEMAKE} --cores all
-        --configfile ${PROJECT_BINARY_DIR}/buildinfo.yaml
-        -s ${CMAKE_CURRENT_SOURCE_DIR}/GMSH2OGS_ExtractBoundary_MeshByGmsh4.smk
-    )
-    set_tests_properties(
-        snakemake_GMSH2OGS_ExtractBoundary
-        snakemake_GMSH2OGS_Gmsh4_ExtractBoundary
-        PROPERTIES LABELS "default" RUN_SERIAL TRUE
-    )
-
-    add_dependencies(ctest GMSH2OGS)
-endif()
-
 foreach(criterion ElementSize EdgeRatio EquiAngleSkew RadiusEdgeRatio SizeDifference)
     AddTest(
         NAME TrianglesGoodElementQuality_${criterion}_Test
diff --git a/Tests/Data/MeshLib/A2-gmsh.msh b/Tests/Data/Utils/GMSH2OGS/A2-gmsh.msh
similarity index 100%
rename from Tests/Data/MeshLib/A2-gmsh.msh
rename to Tests/Data/Utils/GMSH2OGS/A2-gmsh.msh
diff --git a/Tests/Data/MeshLib/A2-gmsh4.msh b/Tests/Data/Utils/GMSH2OGS/A2-gmsh4.msh
similarity index 100%
rename from Tests/Data/MeshLib/A2-gmsh4.msh
rename to Tests/Data/Utils/GMSH2OGS/A2-gmsh4.msh
diff --git a/Tests/Data/MeshLib/A2.vtu b/Tests/Data/Utils/GMSH2OGS/A2.vtu
similarity index 100%
rename from Tests/Data/MeshLib/A2.vtu
rename to Tests/Data/Utils/GMSH2OGS/A2.vtu
diff --git a/Tests/Data/MeshLib/A2_0.vtu b/Tests/Data/Utils/GMSH2OGS/A2_0.vtu
similarity index 100%
rename from Tests/Data/MeshLib/A2_0.vtu
rename to Tests/Data/Utils/GMSH2OGS/A2_0.vtu
diff --git a/Tests/Data/MeshLib/A2_1.vtu b/Tests/Data/Utils/GMSH2OGS/A2_1.vtu
similarity index 100%
rename from Tests/Data/MeshLib/A2_1.vtu
rename to Tests/Data/Utils/GMSH2OGS/A2_1.vtu
diff --git a/Tests/Data/MeshLib/A2_2.vtu b/Tests/Data/Utils/GMSH2OGS/A2_2.vtu
similarity index 100%
rename from Tests/Data/MeshLib/A2_2.vtu
rename to Tests/Data/Utils/GMSH2OGS/A2_2.vtu
diff --git a/Tests/Data/MeshLib/A2_3.vtu b/Tests/Data/Utils/GMSH2OGS/A2_3.vtu
similarity index 100%
rename from Tests/Data/MeshLib/A2_3.vtu
rename to Tests/Data/Utils/GMSH2OGS/A2_3.vtu
diff --git a/Tests/Data/MeshLib/A2_4.vtu b/Tests/Data/Utils/GMSH2OGS/A2_4.vtu
similarity index 100%
rename from Tests/Data/MeshLib/A2_4.vtu
rename to Tests/Data/Utils/GMSH2OGS/A2_4.vtu
diff --git a/Tests/Data/MeshLib/A2_5.vtu b/Tests/Data/Utils/GMSH2OGS/A2_5.vtu
similarity index 100%
rename from Tests/Data/MeshLib/A2_5.vtu
rename to Tests/Data/Utils/GMSH2OGS/A2_5.vtu
diff --git a/Tests/Data/MeshLib/A2_6.vtu b/Tests/Data/Utils/GMSH2OGS/A2_6.vtu
similarity index 100%
rename from Tests/Data/MeshLib/A2_6.vtu
rename to Tests/Data/Utils/GMSH2OGS/A2_6.vtu
diff --git a/Tests/Data/MeshLib/A2_7.vtu b/Tests/Data/Utils/GMSH2OGS/A2_7.vtu
similarity index 100%
rename from Tests/Data/MeshLib/A2_7.vtu
rename to Tests/Data/Utils/GMSH2OGS/A2_7.vtu
diff --git a/Tests/Data/Utils/GMSH2OGS/test_gmsh2ogs_extract_boundary.py b/Tests/Data/Utils/GMSH2OGS/test_gmsh2ogs_extract_boundary.py
new file mode 100644
index 00000000000..a3dea98cc2d
--- /dev/null
+++ b/Tests/Data/Utils/GMSH2OGS/test_gmsh2ogs_extract_boundary.py
@@ -0,0 +1,79 @@
+import os
+from pathlib import Path
+
+import pytest
+from ogs import cli
+
+
+@pytest.mark.parametrize(
+    ("mesh", "gmsh2_physical_id"), [("A2-gmsh.msh", True), ("A2-gmsh4.msh", False)]
+)
+def test_gmsh2ogs_extract_boundary(tmp_path, mesh, gmsh2_physical_id):
+    os.chdir(Path(__file__).resolve().parent)
+    mesh_file = Path(f"{tmp_path}/A2.vtu")
+
+    cli.GMSH2OGS(
+        gmsh2_physical_id=gmsh2_physical_id,
+        i=mesh,
+        o=mesh_file,
+        e=True,
+        boundaries=True,
+        validation=True,
+    )
+    assert mesh_file.exists()
+
+    # geometry bulk
+    assert cli.vtkdiff(mesh_file, "A2.vtu", mesh_check=None) == 0
+    assert (
+        cli.vtkdiff(
+            mesh_file,
+            "A2.vtu",
+            a="MaterialIDs",
+            b="MaterialIDs",
+            abs=0,
+            rel=0,
+        )
+        == 0
+    )
+
+    for x in range(8):
+        # geometry boundary
+        assert (
+            cli.vtkdiff(f"{tmp_path}/A2_{x}.vtu", f"A2_{x}.vtu", mesh_check=None) == 0
+        )
+        assert (
+            cli.vtkdiff(
+                f"{tmp_path}/A2_{x}.vtu",
+                f"A2_{x}.vtu",
+                a="bulk_node_ids",
+                b="bulk_node_ids",
+                abs=0,
+                rel=0,
+            )
+            == 0
+        )
+        if x in [1, 2]:  # inner boundarie
+            assert (
+                cli.vtkdiff(
+                    f"{tmp_path}/A2_{x}.vtu",
+                    f"A2_{x}.vtu",
+                    a="number_bulk_elements",
+                    b="number_bulk_elements",
+                    abs=0,
+                    rel=0,
+                )
+                == 0
+            )
+
+        if x in [0, 3, 4, 5, 6, 7]:  # outer boundarie
+            assert (
+                cli.vtkdiff(
+                    f"{tmp_path}/A2_{x}.vtu",
+                    f"A2_{x}.vtu",
+                    a="bulk_element_ids",
+                    b="bulk_element_ids",
+                    abs=0,
+                    rel=0,
+                )
+                == 0
+            )
-- 
GitLab