diff --git a/Tests/Python/test_ogs_asm_threads.py b/Tests/Python/test_ogs_asm_threads.py new file mode 100644 index 0000000000000000000000000000000000000000..253902d6aca2494332e7afd6ac0229feb144a5fb --- /dev/null +++ b/Tests/Python/test_ogs_asm_threads.py @@ -0,0 +1,88 @@ +import tempfile +import os +import platform + +import pytest +import ogs.simulator as sim + + +def run(prjpath, outdir, expect_successful): + arguments = ["ogs", prjpath, "-o", outdir] + + try: + while True: + print("Python OpenGeoSys.init ...") + status = sim.initialize(arguments) + + if status != 0: + break + + print("Python OpenGeoSys.executeSimulation ...") + status = sim.executeSimulation() + + break + finally: + print("Python OpenGeoSys.finalize() ...") + sim.finalize() + + status_expected = 0 if expect_successful else 1 + assert status == status_expected + + +def check_simulation_results_exist(outdir): + assert os.path.exists( + os.path.join(outdir, "anisotropic_thermal_expansion_ts_1_t_1000000.000000.vtu") + ) + + +@pytest.mark.parametrize( + "asm_threads_parameter", + [ + # first entry: how to set OGS_ASM_THREADS + # second entry: should OGS run successfully? + (False, True), # do not set env var + ("1", True), # positive integer + ("1 ", True), # positive integer with trailing spaces + (" 1", True), # positive integer with leading spaces + (" 1 ", True), # positive integer surrounded by spaces + # + ("", False), # set but empty + (" ", False), # blank string + ("1.1", False), # floating point number + ("0", False), # zero + ("-1", False), # minus one (has a special meaning sometimes) + ("-13", False), # another negative number + ("4 5", False), # list of integers + ("4x", False), # integer and garbage + ("zxyf", False), # garbage + ("!23", False), # garbage and integer + ], +) +def test_ogs_asm_threads_env_var(monkeypatch, asm_threads_parameter): + srcdir = os.path.join(os.path.dirname(__file__), "..", "..") + prjpath = os.path.join( + srcdir, + # fast running model with TRM process (OpenMP parallelized) + "Tests/Data/ThermoRichardsMechanics/anisotropic_thermal_expansion/aniso_expansion.prj", + ) + + asm_threads_setting, expect_ogs_success = asm_threads_parameter + + if platform.system() == "Windows" and asm_threads_setting == "": + # Empty env var not supported on Windows! + return + + with tempfile.TemporaryDirectory() as tmpdirname: + # https://docs.pytest.org/en/6.2.x/reference.html#pytest.MonkeyPatch + with monkeypatch.context() as ctx: + # prepare environment + if asm_threads_setting != False: + ctx.setenv("OGS_ASM_THREADS", asm_threads_setting) + + ctx.chdir(tmpdirname) + + # run and test + run(prjpath, tmpdirname, expect_ogs_success) + + if expect_ogs_success: + check_simulation_results_exist(tmpdirname)