From 332a1204b6ab48c1e1515b160957635369cc1a4d Mon Sep 17 00:00:00 2001 From: nmannall Date: Wed, 15 May 2024 15:21:31 +0100 Subject: [PATCH] Rename extents to distiguish between global and local Add properties to the Model class to access nx, ny, and nz from the grid. Rename the extents in the model to reflect the fact they are global --- gprMax/cmds_singleuse.py | 14 +++++++------- gprMax/model.py | 38 +++++++++++++++++++++++++++++++------- 2 files changed, 38 insertions(+), 14 deletions(-) diff --git a/gprMax/cmds_singleuse.py b/gprMax/cmds_singleuse.py index 5aeb888e..e41caa26 100644 --- a/gprMax/cmds_singleuse.py +++ b/gprMax/cmds_singleuse.py @@ -133,32 +133,32 @@ class Domain(UserObjectSingle): def build(self, model, uip): try: - model.nx, model.ny, model.nz = uip.discretise_point(self.kwargs["p1"]) + model.gnx, model.gny, model.gnz = uip.discretise_point(self.kwargs["p1"]) except KeyError: logger.exception(f"{self.__str__()} please specify a point") raise - if model.nx == 0 or model.ny == 0 or model.nz == 0: + if model.gnx == 0 or model.gny == 0 or model.gnz == 0: logger.exception(f"{self.__str__()} requires at least one cell in every dimension") raise ValueError logger.info( f"Domain size: {self.kwargs['p1'][0]:g} x {self.kwargs['p1'][1]:g} x " - + f"{self.kwargs['p1'][2]:g}m ({model.nx:d} x {model.ny:d} x {model.nz:d} = " - + f"{(model.nx * model.ny * model.nz):g} cells)" + + f"{self.kwargs['p1'][2]:g}m ({model.gnx:d} x {model.gny:d} x {model.gnz:d} = " + + f"{(model.gnx * model.gny * model.gnz):g} cells)" ) # Calculate time step at CFL limit; switch off appropriate PMLs for 2D G = model.G - if model.nx == 1: + if model.gnx == 1: config.get_model_config().mode = "2D TMx" G.pmls["thickness"]["x0"] = 0 G.pmls["thickness"]["xmax"] = 0 - elif model.ny == 1: + elif model.gny == 1: config.get_model_config().mode = "2D TMy" G.pmls["thickness"]["y0"] = 0 G.pmls["thickness"]["ymax"] = 0 - elif model.nz == 1: + elif model.gnz == 1: config.get_model_config().mode = "2D TMz" G.pmls["thickness"]["z0"] = 0 G.pmls["thickness"]["zmax"] = 0 diff --git a/gprMax/model.py b/gprMax/model.py index dc61dd34..f7ef08c1 100644 --- a/gprMax/model.py +++ b/gprMax/model.py @@ -56,9 +56,9 @@ class Model: def __init__(self): self.title = "" - self.nx = 0 - self.ny = 0 - self.nz = 0 + self.gnx = 0 + self.gny = 0 + self.gnz = 0 self.G = self._create_grid() # Monitor memory usage @@ -70,6 +70,30 @@ class Model: # later for use with CPU solver. config.get_model_config().ompthreads = set_omp_threads(config.get_model_config().ompthreads) + @property + def nx(self) -> int: + return self.G.nx + + @nx.setter + def nx(self, value: int): + self.G.nx = value + + @property + def ny(self) -> int: + return self.G.ny + + @ny.setter + def ny(self, value: int): + self.G.ny = value + + @property + def nz(self) -> int: + return self.G.nz + + @nz.setter + def nz(self, value: int): + self.G.nz = value + @property def dx(self) -> float: return self.G.dl[0] @@ -163,10 +187,10 @@ class Model: def build_geometry(self): logger.info(config.get_model_config().inputfilestr) - # TODO: Make this correctly set local nx, ny and nz when using MPI - self.G.nx = self.nx - self.G.ny = self.ny - self.G.nz = self.nz + # TODO: Make this correctly sets local nx, ny and nz when using MPI (likely use a function inside FDTDGrid/MPIGrid) + self.G.nx = self.gnx + self.G.ny = self.gny + self.G.nz = self.gnz self.G.build() def reuse_geometry(self):