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