你已经派生过 gprMax
镜像自地址
https://gitee.com/sunhf/gprMax.git
已同步 2025-08-07 23:14:03 +08:00
Add geometry view reframe tests
这个提交包含在:
3
.gitattributes
vendored
3
.gitattributes
vendored
@@ -1 +1,4 @@
|
|||||||
tools/Jupyter_notebooks/* linguist-vendored
|
tools/Jupyter_notebooks/* linguist-vendored
|
||||||
|
reframe_tests/regression_checks/TestGeometryView_5176823e/partial_volume.vtkhdf filter=lfs diff=lfs merge=lfs -text
|
||||||
|
reframe_tests/regression_checks/TestGeometryView_5176823e/full_volume.vtkhdf filter=lfs diff=lfs merge=lfs -text
|
||||||
|
reframe_tests/regression_checks/TestGeometryView_77980202/full_volume.vtkhdf filter=lfs diff=lfs merge=lfs -text
|
||||||
|
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:4a8134fca3e6228211e4a4bc3e504e64f888c55f22e025b482ec501e0051d253
|
||||||
|
size 75740296
|
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:2ccd95ff4ef73c224c99a8c321ad6f8014c673a1b33bbb741bff415dfbffd0aa
|
||||||
|
size 4931176
|
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:82b8ac914a9fe20b49f2512215782f01305a2e3211aaac51913f88296a0e3ac5
|
||||||
|
size 4012444
|
二进制文件未显示。
@@ -182,7 +182,7 @@ class GprMaxBaseTest(RunOnlyRegressionTest):
|
|||||||
else:
|
else:
|
||||||
return self.getdep(variant)
|
return self.getdep(variant)
|
||||||
|
|
||||||
def build_reference_filepath(self, name: Union[str, os.PathLike]) -> Path:
|
def build_reference_filepath(self, name: Union[str, os.PathLike], suffix: str = ".h5") -> Path:
|
||||||
"""Build path to the specified reference file.
|
"""Build path to the specified reference file.
|
||||||
|
|
||||||
Reference files are saved in directories per test case. If this
|
Reference files are saved in directories per test case. If this
|
||||||
@@ -192,6 +192,7 @@ class GprMaxBaseTest(RunOnlyRegressionTest):
|
|||||||
|
|
||||||
Args:
|
Args:
|
||||||
name: Name of the file.
|
name: Name of the file.
|
||||||
|
suffix: File extension. Default ".h5".
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
filepath: Absolute path to the reference file.
|
filepath: Absolute path to the reference file.
|
||||||
@@ -202,7 +203,7 @@ class GprMaxBaseTest(RunOnlyRegressionTest):
|
|||||||
else:
|
else:
|
||||||
reference_dir = target.short_name
|
reference_dir = target.short_name
|
||||||
|
|
||||||
reference_file = Path("regression_checks", reference_dir, name).with_suffix(".h5")
|
reference_file = Path("regression_checks", reference_dir, name).with_suffix(suffix)
|
||||||
return reference_file.absolute()
|
return reference_file.absolute()
|
||||||
|
|
||||||
# TODO: Change CreatePyenvTest to a fixture instead of a test dependency
|
# TODO: Change CreatePyenvTest to a fixture instead of a test dependency
|
||||||
|
@@ -9,6 +9,7 @@ from typing_extensions import TYPE_CHECKING
|
|||||||
|
|
||||||
from reframe_tests.tests.base_tests import GprMaxBaseTest
|
from reframe_tests.tests.base_tests import GprMaxBaseTest
|
||||||
from reframe_tests.tests.regression_checks import (
|
from reframe_tests.tests.regression_checks import (
|
||||||
|
GeometryViewRegressionCheck,
|
||||||
ReceiverRegressionCheck,
|
ReceiverRegressionCheck,
|
||||||
RegressionCheck,
|
RegressionCheck,
|
||||||
SnapshotRegressionCheck,
|
SnapshotRegressionCheck,
|
||||||
@@ -77,6 +78,50 @@ class SnapshotMixin(GprMaxMixin):
|
|||||||
self.regression_checks.append(regression_check)
|
self.regression_checks.append(regression_check)
|
||||||
|
|
||||||
|
|
||||||
|
class GeometryOnlyMixin(GprMaxMixin):
|
||||||
|
"""Run test with geometry only flag"""
|
||||||
|
|
||||||
|
@run_after("setup")
|
||||||
|
def add_geometry_only_flag(self):
|
||||||
|
self.executable_opts += ["--geometry-only"]
|
||||||
|
|
||||||
|
|
||||||
|
class GeometryViewMixin(GprMaxMixin):
|
||||||
|
"""Add regression tests for geometry views.
|
||||||
|
|
||||||
|
Attributes:
|
||||||
|
geometry_views (list[str]): List of geometry views to run
|
||||||
|
regression checks on.
|
||||||
|
"""
|
||||||
|
|
||||||
|
geometry_views = variable(typ.List[str], value=[])
|
||||||
|
|
||||||
|
def build_geometry_view_filepath(self, geometry_view: str) -> Path:
|
||||||
|
"""Build filepath to the specified geometry view.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
geometry_view: Name of the geometry view.
|
||||||
|
"""
|
||||||
|
return Path(geometry_view).with_suffix(".vtkhdf")
|
||||||
|
|
||||||
|
@run_after("setup")
|
||||||
|
def add_geometry_view_regression_checks(self):
|
||||||
|
"""Add a regression check for each geometry view.
|
||||||
|
|
||||||
|
The test will be skipped if no geometry views have been specified.
|
||||||
|
"""
|
||||||
|
self.skip_if(
|
||||||
|
len(self.geometry_views) < 0,
|
||||||
|
f"Must provide a list of geometry views.",
|
||||||
|
)
|
||||||
|
|
||||||
|
for geometry_view in self.geometry_views:
|
||||||
|
geometry_view_file = self.build_geometry_view_filepath(geometry_view)
|
||||||
|
reference_file = self.build_reference_filepath(geometry_view, ".vtkhdf")
|
||||||
|
regression_check = GeometryViewRegressionCheck(geometry_view_file, reference_file)
|
||||||
|
self.regression_checks.append(regression_check)
|
||||||
|
|
||||||
|
|
||||||
class PythonApiMixin(GprMaxMixin):
|
class PythonApiMixin(GprMaxMixin):
|
||||||
"""Use the GprMax Python API rather than a standard input file."""
|
"""Use the GprMax Python API rather than a standard input file."""
|
||||||
|
|
||||||
|
@@ -74,7 +74,12 @@ class RegressionCheck:
|
|||||||
h5diff = "h5diff"
|
h5diff = "h5diff"
|
||||||
|
|
||||||
h5diff_output = osext.run_command(
|
h5diff_output = osext.run_command(
|
||||||
[h5diff, *self.h5diff_options, str(self.output_file), str(self.reference_file)]
|
[
|
||||||
|
h5diff,
|
||||||
|
*self.h5diff_options,
|
||||||
|
str(self.output_file.absolute()),
|
||||||
|
str(self.reference_file),
|
||||||
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
return sn.assert_true(
|
return sn.assert_true(
|
||||||
@@ -135,3 +140,11 @@ class SnapshotRegressionCheck(RegressionCheck):
|
|||||||
@property
|
@property
|
||||||
def error_msg(self) -> str:
|
def error_msg(self) -> str:
|
||||||
return f"Snapshot '{self.output_file.name}' failed regression check "
|
return f"Snapshot '{self.output_file.name}' failed regression check "
|
||||||
|
|
||||||
|
|
||||||
|
class GeometryViewRegressionCheck(RegressionCheck):
|
||||||
|
"""Run regression check on a GprMax GeometryView."""
|
||||||
|
|
||||||
|
@property
|
||||||
|
def error_msg(self) -> str:
|
||||||
|
return f"GeometryView '{self.output_file.name}' failed regression check "
|
||||||
|
@@ -0,0 +1,17 @@
|
|||||||
|
#title: Hertzian dipole in free-space
|
||||||
|
#domain: 0.100 0.100 0.100
|
||||||
|
#dx_dy_dz: 0.001 0.001 0.001
|
||||||
|
#time_window: 3e-9
|
||||||
|
|
||||||
|
#waveform: gaussiandot 1 1e9 myWave
|
||||||
|
#hertzian_dipole: z 0.050 0.050 0.050 myWave
|
||||||
|
|
||||||
|
#material: 4.9 0 1 0 myWater
|
||||||
|
#material: 2 0 1.4 0 unusedMaterial
|
||||||
|
#material: 3 0 2 0 boxMaterial
|
||||||
|
|
||||||
|
#sphere: 0.05 0.05 0.05 0.03 myWater y
|
||||||
|
#box: 0.01 0.01 0.01 0.09 0.025 0.025 boxMaterial y
|
||||||
|
|
||||||
|
#geometry_view: 0.02 0.02 0.02 0.06 0.06 0.06 0.001 0.001 0.001 partial_volume f
|
||||||
|
#geometry_view: 0 0 0 0.1 0.1 0.1 0.001 0.001 0.001 full_volume f
|
@@ -0,0 +1,17 @@
|
|||||||
|
#title: Hertzian dipole in free-space
|
||||||
|
#domain: 0.100 0.100 0.100
|
||||||
|
#dx_dy_dz: 0.001 0.001 0.001
|
||||||
|
#time_window: 3e-9
|
||||||
|
|
||||||
|
#waveform: gaussiandot 1 1e9 myWave
|
||||||
|
#hertzian_dipole: z 0.050 0.050 0.050 myWave
|
||||||
|
|
||||||
|
#material: 4.9 0 1 0 myWater
|
||||||
|
#material: 2 0 1.4 0 unusedMaterial
|
||||||
|
#material: 3 0 2 0 boxMaterial
|
||||||
|
|
||||||
|
#sphere: 0.05 0.05 0.05 0.03 myWater y
|
||||||
|
#box: 0.01 0.01 0.01 0.09 0.025 0.025 boxMaterial y
|
||||||
|
|
||||||
|
#geometry_view: 0.02 0.02 0.02 0.06 0.06 0.06 0.001 0.001 0.001 partial_volume n
|
||||||
|
#geometry_view: 0 0 0 0.1 0.1 0.1 0.001 0.001 0.001 full_volume n
|
@@ -1,5 +1,10 @@
|
|||||||
from reframe_tests.tests.base_tests import GprMaxBaseTest
|
from reframe_tests.tests.base_tests import GprMaxBaseTest
|
||||||
from reframe_tests.tests.mixins import ReceiverMixin, SnapshotMixin
|
from reframe_tests.tests.mixins import (
|
||||||
|
GeometryOnlyMixin,
|
||||||
|
GeometryViewMixin,
|
||||||
|
ReceiverMixin,
|
||||||
|
SnapshotMixin,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class GprMaxRegressionTest(ReceiverMixin, GprMaxBaseTest):
|
class GprMaxRegressionTest(ReceiverMixin, GprMaxBaseTest):
|
||||||
@@ -8,3 +13,7 @@ class GprMaxRegressionTest(ReceiverMixin, GprMaxBaseTest):
|
|||||||
|
|
||||||
class GprMaxSnapshotTest(SnapshotMixin, GprMaxBaseTest):
|
class GprMaxSnapshotTest(SnapshotMixin, GprMaxBaseTest):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class GprMaxGeometryViewTest(GeometryViewMixin, GeometryOnlyMixin, GprMaxBaseTest):
|
||||||
|
pass
|
||||||
|
@@ -0,0 +1,20 @@
|
|||||||
|
import reframe as rfm
|
||||||
|
from reframe.core.builtins import parameter
|
||||||
|
|
||||||
|
from reframe_tests.tests.mixins import MpiMixin
|
||||||
|
from reframe_tests.tests.standard_tests import GprMaxGeometryViewTest
|
||||||
|
|
||||||
|
|
||||||
|
@rfm.simple_test
|
||||||
|
class TestGeometryView(GprMaxGeometryViewTest):
|
||||||
|
tags = {"test", "serial", "geometry only", "geometry view"}
|
||||||
|
sourcesdir = "src/geometry_view_tests"
|
||||||
|
model = parameter(["geometry_view_voxel", "geometry_view_fine"])
|
||||||
|
geometry_views = ["partial_volume", "full_volume"]
|
||||||
|
|
||||||
|
|
||||||
|
@rfm.simple_test
|
||||||
|
class TestGeometryViewMPI(MpiMixin, TestGeometryView):
|
||||||
|
tags = {"test", "mpi", "geometry only", "geometry view"}
|
||||||
|
mpi_layout = parameter([[2, 2, 2], [4, 4, 1]])
|
||||||
|
test_dependency = TestGeometryView
|
在新工单中引用
屏蔽一个用户