你已经派生过 gprMax
镜像自地址
https://gitee.com/sunhf/gprMax.git
已同步 2025-08-04 11:36:52 +08:00
Add factory functions to grids for fractal surfaces
这个提交包含在:
@@ -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
|
||||
|
在新工单中引用
屏蔽一个用户