Fix bug when fractal surfaces at an MPI boundary

- Add a new test that better tests this scenario
这个提交包含在:
Nathan Mannall
2025-05-07 17:12:07 +01:00
父节点 b73cd93d75
当前提交 17c05f5286
共有 5 个文件被更改,包括 170 次插入8 次删除

查看文件

@@ -0,0 +1,19 @@
#title: Heterogeneous soil using a stochastic distribution of dielectric properties given by a mixing model from Peplinski
#domain: 0.100 0.100 0.100
#dx_dy_dz: 0.001 0.001 0.001
#time_window: 3e-9
#waveform: ricker 1 1.5e9 my_ricker
#hertzian_dipole: y 0.02 0.02 0.02 my_ricker
#rx: 0.080 0.080 0.080
#soil_peplinski: 0.5 0.5 2.0 2.66 0.001 0.25 my_soil
#fractal_box: 0 0 0 0.049 0.05 0.051 1.5 1 1 1 50 my_soil box_1 42
#fractal_box: 0.049 0.05 0.051 0.1 0.1 0.1 1.5 1 1 1 50 my_soil box_2 22
#add_surface_roughness: 0.049 0 0 0.049 0.05 0.05 1 1 1 0.025 0.05 box_1 43
#add_surface_roughness: 0.049 0.05 0.051 0.049 0.1 0.1 1 1 1 0.049 0.074 box_2 23
#geometry_objects_write: 0 0 0 0.1 0.1 0.1 full_volume

查看文件

@@ -25,6 +25,7 @@ class TestAddSurfaceRoughness(GprMaxGeometryTest):
"add_surface_roughness_half",
"add_surface_roughness_small",
"add_surface_roughness_weighted",
"add_surface_roughness_boundaries",
]
)
@@ -166,17 +167,60 @@ class TestTriangleGeometry(GprMaxRegressionTest):
@rfm.simple_test
class TestAddGrassMpi(TestAddGrass):
class TestAddGrassMpi(MpiMixin, TestAddGrass):
tags = {"test", "mpi", "geometery", "fractal", "surface", "grass"}
mpi_layout = parameter([[1, 2, 2], [3, 1, 3], [4, 1, 4]])
test_dependency = TestAddGrass
# Depending on the orientation/alignment of the fractal surface, not all
# MPI decompositions are valid. Therefore create tests that divide the
# domain in each pair of dimensions.
# NB: The 'add_surface_roughness_half' test currently fails due to the
# floating point precision of the fractal surface. Caused by the:
# if (k < surface.fractalsurface[i - surface.xs, j - surface.ys]):
# checks in gprMax/user_objects/cmds_geometry/fractal_box.py
@rfm.simple_test
class TestAddSurfaceRoughnessMpi(MpiMixin, TestAddSurfaceRoughness):
class TestAddSurfaceRoughnessMpiYZ(MpiMixin, TestAddSurfaceRoughness):
tags = {"test", "mpi", "geometery", "fractal", "surface", "roughness"}
mpi_layout = parameter([[2, 1, 2], [3, 3, 1], [1, 4, 4]])
mpi_layout = parameter([[1, 2, 2], [1, 3, 3], [1, 4, 4]])
test_dependency = TestAddSurfaceRoughness
model = parameter(
[
"add_surface_roughness_full",
# "add_surface_roughness_half",
"add_surface_roughness_small",
"add_surface_roughness_weighted",
]
)
@rfm.simple_test
class TestAddSurfaceRoughnessMpiXZ(MpiMixin, TestAddSurfaceRoughness):
tags = {"test", "mpi", "geometery", "fractal", "surface", "roughness"}
mpi_layout = parameter([[2, 1, 2], [3, 1, 3], [4, 1, 4]])
test_dependency = TestAddSurfaceRoughness
model = parameter(
[
"add_surface_roughness_full",
# "add_surface_roughness_half",
"add_surface_roughness_weighted",
"add_surface_roughness_boundaries",
]
)
@rfm.simple_test
class TestAddSurfaceRoughnessMpiXY(MpiMixin, TestAddSurfaceRoughness):
tags = {"test", "mpi", "geometery", "fractal", "surface", "roughness"}
mpi_layout = parameter([[2, 2, 1], [3, 3, 1], [4, 4, 1]])
test_dependency = TestAddSurfaceRoughness
model = parameter(
[
"add_surface_roughness_small",
"add_surface_roughness_boundaries",
]
)
@rfm.simple_test