Add factory functions to grids for fractal surfaces

这个提交包含在:
Nathan Mannall
2025-05-22 15:55:31 +01:00
父节点 742678b705
当前提交 0d0615c164
共有 7 个文件被更改,包括 34 次插入22 次删除

查看文件

@@ -193,13 +193,11 @@ class MPIFractalSurface(FractalSurface):
dimension: float,
seed: Optional[int],
comm: MPI.Cartcomm,
ux: int,
uy: int,
uz: int,
upper_bound: npt.NDArray[np.int32],
):
super().__init__(xs, xf, ys, yf, zs, zf, dimension, seed)
self.comm = comm
self.upper_bound = np.array([ux, uy, uz])
self.upper_bound = upper_bound
def generate_fractal_surface(self):
"""Generate a 2D array with a fractal distribution."""

查看文件

@@ -294,13 +294,11 @@ class MPIFractalVolume(FractalVolume):
dimension: float,
seed: Optional[int],
comm: MPI.Cartcomm,
ux: int,
uy: int,
uz: int,
upper_bound: npt.NDArray[np.int32],
):
super().__init__(xs, xf, ys, yf, zs, zf, dimension, seed)
self.comm = comm
self.upper_bound = np.array([ux, uy, uz])
self.upper_bound = upper_bound
# Limit the original start and stop to within the local bounds
self.original_start = np.maximum(self.original_start, 0)

查看文件

@@ -32,6 +32,7 @@ from typing_extensions import TypeVar
from gprMax import config
from gprMax.cython.pml_build import pml_average_er_mr
from gprMax.cython.yee_cell_build import build_electric_components, build_magnetic_components
from gprMax.fractals.fractal_surface import FractalSurface
from gprMax.fractals.fractal_volume import FractalVolume
from gprMax.materials import ListMaterial, Material, PeplinskiSoil, RangeMaterial, process_materials
from gprMax.pml import CFS, PML, print_pml_info
@@ -200,6 +201,19 @@ class FDTDGrid:
self.fractalvolumes.append(volume)
return volume
def create_fractal_surface(
self,
xs: int,
xf: int,
ys: int,
yf: int,
zs: int,
zf: int,
frac_dim: float,
seed: Optional[int],
) -> FractalSurface:
return FractalSurface(xs, xf, ys, yf, zs, zf, frac_dim, seed)
def add_source(self, source: Source):
if isinstance(source, VoltageSource):
self.voltagesources.append(source)

查看文件

@@ -28,6 +28,7 @@ from numpy import ndarray
from gprMax import config
from gprMax.cython.pml_build import pml_sum_er_mr
from gprMax.fractals.fractal_surface import MPIFractalSurface
from gprMax.fractals.fractal_volume import MPIFractalVolume
from gprMax.grid.fdtd_grid import FDTDGrid
from gprMax.pml import MPIPML, PML
@@ -140,12 +141,23 @@ class MPIGrid(FDTDGrid):
frac_dim: float,
seed: Optional[int],
) -> MPIFractalVolume:
volume = MPIFractalVolume(
xs, xf, ys, yf, zs, zf, frac_dim, seed, self.comm, self.nx, self.ny, self.nz
)
volume = MPIFractalVolume(xs, xf, ys, yf, zs, zf, frac_dim, seed, self.comm, self.size)
self.fractalvolumes.append(volume)
return volume
def create_fractal_surface(
self,
xs: int,
xf: int,
ys: int,
yf: int,
zs: int,
zf: int,
frac_dim: float,
seed: Optional[int],
) -> MPIFractalSurface:
return MPIFractalSurface(xs, xf, ys, yf, zs, zf, frac_dim, seed, self.comm, self.size)
def is_coordinator(self) -> bool:
"""Test if the current rank is the coordinator.

查看文件

@@ -20,12 +20,9 @@ import logging
import numpy as np
from gprMax.fractals.fractal_surface import FractalSurface, MPIFractalSurface
from gprMax.grid.fdtd_grid import FDTDGrid
from gprMax.grid.mpi_grid import MPIGrid
from gprMax.user_objects.rotatable import RotatableMixin
from gprMax.user_objects.user_objects import GeometryUserObject
from gprMax.utilities.utilities import round_value
from .cmds_geometry import rotate_2point_object
@@ -201,12 +198,7 @@ class AddSurfaceRoughness(RotatableMixin, GeometryUserObject):
# direction).
uip.point_within_bounds(grid_bound, f"{self.__str__()}")
if isinstance(grid, MPIGrid):
surface = MPIFractalSurface(
xs, xf, ys, yf, zs, zf, frac_dim, seed, grid.comm, grid.nx, grid.ny, grid.nz
)
else:
surface = FractalSurface(xs, xf, ys, yf, zs, zf, frac_dim, seed)
surface = grid.create_fractal_surface(xs, xf, ys, yf, zs, zf, frac_dim, seed)
surface.surfaceID = requestedsurface
surface.fractalrange = fractalrange
surface.operatingonID = volume.ID

查看文件

@@ -24,7 +24,6 @@ from gprMax.grid.fdtd_grid import FDTDGrid
from gprMax.materials import create_water
from gprMax.user_objects.rotatable import RotatableMixin
from gprMax.user_objects.user_objects import GeometryUserObject
from gprMax.utilities.utilities import round_value
from .cmds_geometry import rotate_2point_object

查看文件

@@ -22,7 +22,6 @@ import numpy as np
import gprMax.config as config
from gprMax.cython.geometry_primitives import build_voxels_from_array, build_voxels_from_array_mask
from gprMax.fractals.fractal_volume import MPIFractalVolume
from gprMax.grid.fdtd_grid import FDTDGrid
from gprMax.materials import ListMaterial
from gprMax.user_objects.cmds_geometry.cmds_geometry import check_averaging, rotate_2point_object