Move srcsteps and rxsteps into Model class

这个提交包含在:
nmannall
2024-05-21 10:25:56 +01:00
父节点 d25ceb281d
当前提交 06c8908c2c
共有 4 个文件被更改,包括 22 次插入18 次删除

查看文件

@@ -378,16 +378,16 @@ class RxSteps(UserObjectSingle):
super().__init__(**kwargs)
self.order = 9
def build(self, G, uip):
def build(self, model, uip):
try:
G.rxsteps = uip.discretise_point(self.kwargs["p1"])
model.rxsteps = uip.discretise_point(self.kwargs["p1"])
except KeyError:
logger.exception(f"{self.__str__()} requires exactly three parameters")
raise
logger.info(
f"All receivers will step {G.rxsteps[0] * G.dx:g}m, "
f"{G.rxsteps[1] * G.dy:g}m, {G.rxsteps[2] * G.dz:g}m "
f"All receivers will step {model.rxsteps[0] * model.dx:g}m, "
f"{model.rxsteps[1] * model.dy:g}m, {model.rxsteps[2] * model.dz:g}m "
"for each model run."
)

查看文件

@@ -68,7 +68,10 @@ def write_hdf5_outputfile(outputfile: Path, title: str, model):
f = h5py.File(outputfile, "w")
f.attrs["gprMax"] = __version__
f.attrs["Title"] = title
write_hd5_data(f, model.G, model.iterations)
f.attrs["Iterations"] = model.iterations
f.attrs["srcsteps"] = model.srcsteps
f.attrs["rxsteps"] = model.rxsteps
write_hd5_data(f, model.G)
# Write meta data and data for any subgrids
sg_rxs = [True for sg in model.subgrids if sg.rxs]
@@ -76,12 +79,12 @@ def write_hdf5_outputfile(outputfile: Path, title: str, model):
if sg_rxs or sg_tls:
for sg in model.subgrids:
grp = f.create_group(f"/subgrids/{sg.name}")
write_hd5_data(grp, sg, sg.iterations, is_subgrid=True)
write_hd5_data(grp, sg, is_subgrid=True)
logger.basic(f"Written output file: {outputfile.name}")
def write_hd5_data(basegrp, grid, iterations, is_subgrid=False):
def write_hd5_data(basegrp, grid, is_subgrid=False):
"""Writes grid meta data and data to HDF5 group.
Args:
@@ -91,7 +94,6 @@ def write_hd5_data(basegrp, grid, iterations, is_subgrid=False):
"""
# Write meta data for grid
basegrp.attrs["Iterations"] = iterations
basegrp.attrs["nx_ny_nz"] = (grid.nx, grid.ny, grid.nz)
basegrp.attrs["dx_dy_dz"] = (grid.dx, grid.dy, grid.dz)
basegrp.attrs["dt"] = grid.dt
@@ -100,11 +102,12 @@ def write_hd5_data(basegrp, grid, iterations, is_subgrid=False):
)
basegrp.attrs["nsrc"] = nsrc
basegrp.attrs["nrx"] = len(grid.rxs)
basegrp.attrs["srcsteps"] = grid.srcsteps
basegrp.attrs["rxsteps"] = grid.rxsteps
if is_subgrid:
# Write additional meta data about subgrid
basegrp.attrs["Iterations"] = grid.iterations
basegrp.attrs["srcsteps"] = grid.srcsteps
basegrp.attrs["rxsteps"] = grid.rxsteps
basegrp.attrs["is_os_sep"] = grid.is_os_sep
basegrp.attrs["pml_separation"] = grid.pml_separation
basegrp.attrs["subgrid_pml_thickness"] = grid.pmls["thickness"]["x0"]

查看文件

@@ -110,8 +110,6 @@ class FDTDGrid:
self.magneticdipoles: List[MagneticDipole] = []
self.transmissionlines: List[TransmissionLine] = []
self.rxs: List[Rx] = []
self.srcsteps: List[int] = [0, 0, 0]
self.rxsteps: List[int] = [0, 0, 0]
self.snapshots: List[Snapshot] = []
self.averagevolumeobjects = True
@@ -233,18 +231,18 @@ class FDTDGrid:
item.ycoord = item.ycoordorigin + step_number * step_size[1]
item.zcoord = item.zcoordorigin + step_number * step_size[2]
def update_simple_source_positions(self, step: int = 0) -> None:
def update_simple_source_positions(self, step_size: List[int], step: int = 0) -> None:
try:
self._update_positions(
itertools.chain(self.hertziandipoles, self.magneticdipoles), self.srcsteps, step
itertools.chain(self.hertziandipoles, self.magneticdipoles), step_size, step
)
except ValueError as e:
logger.exception("Source(s) will be stepped to a position outside the domain.")
raise ValueError from e
def update_receiver_positions(self, step: int = 0) -> None:
def update_receiver_positions(self, step_size: List[int], step: int = 0) -> None:
try:
self._update_positions(self.rxs, self.rxsteps, step)
self._update_positions(self.rxs, step_size, step)
except ValueError as e:
logger.exception("Receiver(s) will be stepped to a position outside the domain.")
raise ValueError from e

查看文件

@@ -62,6 +62,9 @@ class Model:
self.iterations = 0 # Total number of iterations
self.timewindow = 0.0
self.srcsteps: List[int] = [0, 0, 0]
self.rxsteps: List[int] = [0, 0, 0]
self.G = self._create_grid()
self.subgrids: List[SubGridBaseGrid] = []
@@ -173,8 +176,8 @@ class Model:
# Adjust position of simple sources and receivers if required
model_num = config.sim_config.current_model
G.update_simple_source_positions(step=model_num)
G.update_receiver_positions(step=model_num)
G.update_simple_source_positions(self.srcsteps, step=model_num)
G.update_receiver_positions(self.rxsteps, step=model_num)
# Write files for any geometry views and geometry object outputs
if (