你已经派生过 gprMax
镜像自地址
https://gitee.com/sunhf/gprMax.git
已同步 2025-08-04 11:36:52 +08:00
Add factory functions to grids for fractal volumes
这个提交包含在:
@@ -21,7 +21,7 @@ import itertools
|
||||
import logging
|
||||
import sys
|
||||
from collections import OrderedDict
|
||||
from typing import Any, Iterable, List, Tuple, Union
|
||||
from typing import Any, Iterable, List, Optional, Tuple, Union
|
||||
|
||||
import numpy as np
|
||||
import numpy.typing as npt
|
||||
@@ -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_volume import FractalVolume
|
||||
from gprMax.materials import ListMaterial, Material, PeplinskiSoil, RangeMaterial, process_materials
|
||||
from gprMax.pml import CFS, PML, print_pml_info
|
||||
from gprMax.receivers import Rx
|
||||
@@ -110,7 +111,7 @@ class FDTDGrid:
|
||||
# Materials used by this grid
|
||||
self.materials: List[Material] = []
|
||||
self.mixingmodels: List[Union[PeplinskiSoil, RangeMaterial, ListMaterial]] = []
|
||||
self.fractalvolumes = [] # List[FractalVolume]
|
||||
self.fractalvolumes: List[FractalVolume] = []
|
||||
|
||||
# Sources and receivers contained inside this grid
|
||||
self.waveforms: List[Waveform] = []
|
||||
@@ -184,6 +185,21 @@ class FDTDGrid:
|
||||
self.pmls["thickness"]["ymax"] = int(thickness[4])
|
||||
self.pmls["thickness"]["zmax"] = int(thickness[5])
|
||||
|
||||
def add_fractal_volume(
|
||||
self,
|
||||
xs: int,
|
||||
xf: int,
|
||||
ys: int,
|
||||
yf: int,
|
||||
zs: int,
|
||||
zf: int,
|
||||
frac_dim: float,
|
||||
seed: Optional[int],
|
||||
) -> FractalVolume:
|
||||
volume = FractalVolume(xs, xf, ys, yf, zs, zf, frac_dim, seed)
|
||||
self.fractalvolumes.append(volume)
|
||||
return volume
|
||||
|
||||
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_volume import MPIFractalVolume
|
||||
from gprMax.grid.fdtd_grid import FDTDGrid
|
||||
from gprMax.pml import MPIPML, PML
|
||||
from gprMax.receivers import Rx
|
||||
@@ -128,6 +129,23 @@ class MPIGrid(FDTDGrid):
|
||||
if self.has_neighbour(Dim.Z, Dir.POS):
|
||||
self.pmls["thickness"]["zmax"] = 0
|
||||
|
||||
def add_fractal_volume(
|
||||
self,
|
||||
xs: int,
|
||||
xf: int,
|
||||
ys: int,
|
||||
yf: int,
|
||||
zs: int,
|
||||
zf: int,
|
||||
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
|
||||
)
|
||||
self.fractalvolumes.append(volume)
|
||||
return volume
|
||||
|
||||
def is_coordinator(self) -> bool:
|
||||
"""Test if the current rank is the coordinator.
|
||||
|
||||
|
@@ -22,9 +22,8 @@ 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 FractalVolume, MPIFractalVolume
|
||||
from gprMax.fractals.fractal_volume import MPIFractalVolume
|
||||
from gprMax.grid.fdtd_grid import FDTDGrid
|
||||
from gprMax.grid.mpi_grid import MPIGrid
|
||||
from gprMax.materials import ListMaterial
|
||||
from gprMax.user_objects.cmds_geometry.cmds_geometry import check_averaging, rotate_2point_object
|
||||
from gprMax.user_objects.rotatable import RotatableMixin
|
||||
@@ -168,23 +167,7 @@ class FractalBox(RotatableMixin, GeometryUserObject):
|
||||
)
|
||||
raise ValueError
|
||||
|
||||
if isinstance(grid, MPIGrid):
|
||||
self.volume = MPIFractalVolume(
|
||||
xs,
|
||||
xf,
|
||||
ys,
|
||||
yf,
|
||||
zs,
|
||||
zf,
|
||||
frac_dim,
|
||||
seed,
|
||||
grid.comm,
|
||||
grid.nx,
|
||||
grid.ny,
|
||||
grid.nz,
|
||||
)
|
||||
else:
|
||||
self.volume = FractalVolume(xs, xf, ys, yf, zs, zf, frac_dim, seed)
|
||||
self.volume = grid.add_fractal_volume(xs, xf, ys, yf, zs, zf, frac_dim, seed)
|
||||
self.volume.ID = ID
|
||||
self.volume.operatingonID = mixing_model_id
|
||||
self.volume.nbins = nbins
|
||||
|
在新工单中引用
屏蔽一个用户