diff --git a/gprMax/cmds_multiuse.py b/gprMax/cmds_multiuse.py index 1aca50f8..bf3b3c38 100644 --- a/gprMax/cmds_multiuse.py +++ b/gprMax/cmds_multiuse.py @@ -1896,7 +1896,11 @@ class GeometryObjectsWrite(UserObjectMulti): self.order = 18 self.hash = "#geometry_objects_write" - def build(self, grid, uip): + def build(self, model, uip): + grid = uip.grid + if isinstance(grid, SubGridBaseGrid): + logger.exception(f"{self.params_str()} do not add geometry objects to subgrids.") + raise ValueError try: p1 = self.kwargs["p1"] p2 = self.kwargs["p2"] @@ -1920,7 +1924,7 @@ class GeometryObjectsWrite(UserObjectMulti): f"{g.filename_materials}" ) - grid.geometryobjectswrite.append(g) + model.geometryobjects.append(g) class PMLCFS(UserObjectMulti): diff --git a/gprMax/grid/fdtd_grid.py b/gprMax/grid/fdtd_grid.py index 98fa9739..a1ce5368 100644 --- a/gprMax/grid/fdtd_grid.py +++ b/gprMax/grid/fdtd_grid.py @@ -74,11 +74,8 @@ class FDTDGrid: self.pmls["thickness"] = OrderedDict((key, 10) for key in PML.boundaryIDs) # TODO: Add type information. - # Currently importing GeometryObjects, GeometryView, and - # SubGridBaseGrid cause cyclic dependencies self.averagevolumeobjects = True self.fractalvolumes = [] - self.geometryobjectswrite = [] self.waveforms: List[Waveform] = [] self.voltagesources: List[VoltageSource] = [] self.hertziandipoles: List[HertzianDipole] = [] diff --git a/gprMax/model.py b/gprMax/model.py index 8e537a7b..d4f1ad5b 100644 --- a/gprMax/model.py +++ b/gprMax/model.py @@ -38,7 +38,7 @@ from tqdm import tqdm import gprMax.config as config from .fields_outputs import write_hdf5_outputfile -from .geometry_outputs import GeometryView, save_geometry_views +from .geometry_outputs import GeometryObjects, GeometryView, save_geometry_views from .grid.fdtd_grid import FDTDGrid from .snapshots import save_snapshots from .utilities.host_info import set_omp_threads @@ -69,6 +69,7 @@ class Model: self.mixingmodels: List[Union[PeplinskiSoil, RangeMaterial, ListMaterial]] = [] self.geometryviews: List[GeometryView] = [] + self.geometryobjects: List[GeometryObjects] = [] # Monitor memory usage self.p = None @@ -181,21 +182,21 @@ class Model: # Write files for any geometry views and geometry object outputs if ( not self.geometryviews - and not G.geometryobjectswrite + and not self.geometryobjects and config.sim_config.args.geometry_only ): logger.exception("\nNo geometry views or geometry objects found.") raise ValueError save_geometry_views(self.geometryviews) - if G.geometryobjectswrite: + if self.geometryobjects: logger.info("") - for i, go in enumerate(G.geometryobjectswrite): + for i, go in enumerate(self.geometryobjects): pbar = tqdm( total=go.datawritesize, unit="byte", unit_scale=True, - desc=f"Writing geometry object file {i + 1}/{len(G.geometryobjectswrite)}, " + desc=f"Writing geometry object file {i + 1}/{len(self.geometryobjects)}, " + f"{go.filename_hdf5.name}", ncols=get_terminal_width() - 1, file=sys.stdout,