diff --git a/gprMax/cmds_geometry/add_grass.py b/gprMax/cmds_geometry/add_grass.py index 551d4063..9ad23844 100644 --- a/gprMax/cmds_geometry/add_grass.py +++ b/gprMax/cmds_geometry/add_grass.py @@ -64,7 +64,7 @@ class AddGrass(UserObjectGeometry): self.kwargs["p1"] = tuple(rot_pts[0, :]) self.kwargs["p2"] = tuple(rot_pts[1, :]) - def create(self, grid, uip): + def build(self, grid, uip): """Add Grass to fractal box.""" try: p1 = self.kwargs["p1"] diff --git a/gprMax/cmds_geometry/add_surface_roughness.py b/gprMax/cmds_geometry/add_surface_roughness.py index 77e29ddf..ea1cb7f4 100644 --- a/gprMax/cmds_geometry/add_surface_roughness.py +++ b/gprMax/cmds_geometry/add_surface_roughness.py @@ -65,7 +65,7 @@ class AddSurfaceRoughness(UserObjectGeometry): self.kwargs["p1"] = tuple(rot_pts[0, :]) self.kwargs["p2"] = tuple(rot_pts[1, :]) - def create(self, grid, uip): + def build(self, grid, uip): try: p1 = self.kwargs["p1"] p2 = self.kwargs["p2"] diff --git a/gprMax/cmds_geometry/add_surface_water.py b/gprMax/cmds_geometry/add_surface_water.py index be271d9b..af3d8eab 100644 --- a/gprMax/cmds_geometry/add_surface_water.py +++ b/gprMax/cmds_geometry/add_surface_water.py @@ -60,7 +60,7 @@ class AddSurfaceWater(UserObjectGeometry): self.kwargs["p1"] = tuple(rot_pts[0, :]) self.kwargs["p2"] = tuple(rot_pts[1, :]) - def create(self, grid, uip): + def build(self, grid, uip): """ "Create surface water on fractal box.""" try: p1 = self.kwargs["p1"] diff --git a/gprMax/cmds_geometry/box.py b/gprMax/cmds_geometry/box.py index 161b9b3c..9ca1b0ba 100644 --- a/gprMax/cmds_geometry/box.py +++ b/gprMax/cmds_geometry/box.py @@ -60,7 +60,7 @@ class Box(UserObjectGeometry): self.kwargs["p1"] = tuple(rot_pts[0, :]) self.kwargs["p2"] = tuple(rot_pts[1, :]) - def create(self, grid, uip): + def build(self, grid, uip): try: p1 = self.kwargs["p1"] p2 = self.kwargs["p2"] diff --git a/gprMax/cmds_geometry/cmds_geometry.py b/gprMax/cmds_geometry/cmds_geometry.py index 46d248cb..0e4f28c3 100644 --- a/gprMax/cmds_geometry/cmds_geometry.py +++ b/gprMax/cmds_geometry/cmds_geometry.py @@ -45,7 +45,7 @@ class UserObjectGeometry: return f"{self.hash}: {s[:-1]}" - def create(self, grid, uip): + def build(self, grid, uip): """Creates object and adds it to the grid.""" pass diff --git a/gprMax/cmds_geometry/cone.py b/gprMax/cmds_geometry/cone.py index aa1926c0..18c745bd 100644 --- a/gprMax/cmds_geometry/cone.py +++ b/gprMax/cmds_geometry/cone.py @@ -48,7 +48,7 @@ class Cone(UserObjectGeometry): super().__init__(**kwargs) self.hash = "#cone" - def create(self, grid, uip): + def build(self, grid, uip): try: p1 = self.kwargs["p1"] p2 = self.kwargs["p2"] diff --git a/gprMax/cmds_geometry/cylinder.py b/gprMax/cmds_geometry/cylinder.py index 0fa75233..0e85fd2a 100644 --- a/gprMax/cmds_geometry/cylinder.py +++ b/gprMax/cmds_geometry/cylinder.py @@ -46,7 +46,7 @@ class Cylinder(UserObjectGeometry): super().__init__(**kwargs) self.hash = "#cylinder" - def create(self, grid, uip): + def build(self, grid, uip): try: p1 = self.kwargs["p1"] p2 = self.kwargs["p2"] diff --git a/gprMax/cmds_geometry/cylindrical_sector.py b/gprMax/cmds_geometry/cylindrical_sector.py index 6308fb1d..e30b4c28 100644 --- a/gprMax/cmds_geometry/cylindrical_sector.py +++ b/gprMax/cmds_geometry/cylindrical_sector.py @@ -55,7 +55,7 @@ class CylindricalSector(UserObjectGeometry): super().__init__(**kwargs) self.hash = "#cylindrical_sector" - def create(self, grid, uip): + def build(self, grid, uip): try: normal = self.kwargs["normal"].lower() ctr1 = self.kwargs["ctr1"] diff --git a/gprMax/cmds_geometry/edge.py b/gprMax/cmds_geometry/edge.py index 27d2c525..5ee68d29 100644 --- a/gprMax/cmds_geometry/edge.py +++ b/gprMax/cmds_geometry/edge.py @@ -54,7 +54,7 @@ class Edge(UserObjectGeometry): self.kwargs["p1"] = tuple(rot_pts[0, :]) self.kwargs["p2"] = tuple(rot_pts[1, :]) - def create(self, grid, uip): + def build(self, grid, uip): """Creates edge and adds it to the grid.""" try: p1 = self.kwargs["p1"] diff --git a/gprMax/cmds_geometry/ellipsoid.py b/gprMax/cmds_geometry/ellipsoid.py index ebd12ce9..08ade3cb 100644 --- a/gprMax/cmds_geometry/ellipsoid.py +++ b/gprMax/cmds_geometry/ellipsoid.py @@ -45,7 +45,7 @@ class Ellipsoid(UserObjectGeometry): super().__init__(**kwargs) self.hash = "#ellipsoid" - def create(self, grid, uip): + def build(self, grid, uip): try: p1 = self.kwargs["p1"] xr = self.kwargs["xr"] diff --git a/gprMax/cmds_geometry/geometry_objects_read.py b/gprMax/cmds_geometry/geometry_objects_read.py index 5697df94..230f97ab 100644 --- a/gprMax/cmds_geometry/geometry_objects_read.py +++ b/gprMax/cmds_geometry/geometry_objects_read.py @@ -39,7 +39,7 @@ class GeometryObjectsRead(UserObjectGeometry): def rotate(self, axis, angle, origin=None): pass - def create(self, grid, uip): + def build(self, grid, uip): """Creates the object and adds it to the grid.""" try: p1 = self.kwargs["p1"] diff --git a/gprMax/cmds_geometry/plate.py b/gprMax/cmds_geometry/plate.py index 9246107e..79811cca 100644 --- a/gprMax/cmds_geometry/plate.py +++ b/gprMax/cmds_geometry/plate.py @@ -55,7 +55,7 @@ class Plate(UserObjectGeometry): self.kwargs["p1"] = tuple(rot_pts[0, :]) self.kwargs["p2"] = tuple(rot_pts[1, :]) - def create(self, grid, uip): + def build(self, grid, uip): try: p1 = self.kwargs["p1"] p2 = self.kwargs["p2"] diff --git a/gprMax/cmds_geometry/sphere.py b/gprMax/cmds_geometry/sphere.py index 27211b19..44ffa9ed 100644 --- a/gprMax/cmds_geometry/sphere.py +++ b/gprMax/cmds_geometry/sphere.py @@ -43,7 +43,7 @@ class Sphere(UserObjectGeometry): super().__init__(**kwargs) self.hash = "#sphere" - def create(self, grid, uip): + def build(self, grid, uip): try: p1 = self.kwargs["p1"] r = self.kwargs["r"] diff --git a/gprMax/cmds_geometry/triangle.py b/gprMax/cmds_geometry/triangle.py index a0aed311..56823e3b 100644 --- a/gprMax/cmds_geometry/triangle.py +++ b/gprMax/cmds_geometry/triangle.py @@ -63,7 +63,7 @@ class Triangle(UserObjectGeometry): self.kwargs["p2"] = tuple(p2) self.kwargs["p3"] = tuple(p3) - def create(self, grid, uip): + def build(self, grid, uip): try: up1 = self.kwargs["p1"] up2 = self.kwargs["p2"] diff --git a/gprMax/cmds_multiuse.py b/gprMax/cmds_multiuse.py index 20cebdc1..ed015864 100644 --- a/gprMax/cmds_multiuse.py +++ b/gprMax/cmds_multiuse.py @@ -66,7 +66,7 @@ class UserObjectMulti: return f"{self.hash}: {s[:-1]}" - def create(self, grid, uip): + def build(self, grid, uip): """Creates object and adds it to grid.""" pass @@ -105,7 +105,7 @@ class ExcitationFile(UserObjectMulti): self.order = 1 self.hash = "#excitation_file" - def create(self, grid, uip): + def build(self, grid, uip): try: kwargs = {} excitationfile = self.kwargs["filepath"] @@ -200,7 +200,7 @@ class Waveform(UserObjectMulti): self.order = 2 self.hash = "#waveform" - def create(self, grid, uip): + def build(self, grid, uip): try: wavetype = self.kwargs["wave_type"].lower() except KeyError: @@ -314,7 +314,7 @@ class VoltageSource(UserObjectMulti): rot_pts = rotate_2point_object(rot_pol_pts, self.axis, self.angle, self.origin) self.kwargs["p1"] = tuple(rot_pts[0, :]) - def create(self, grid, uip): + def build(self, grid, uip): try: p1 = self.kwargs["p1"] polarisation = self.kwargs["polarisation"].lower() @@ -438,7 +438,7 @@ class HertzianDipole(UserObjectMulti): rot_pts = rotate_2point_object(rot_pol_pts, self.axis, self.angle, self.origin) self.kwargs["p1"] = tuple(rot_pts[0, :]) - def create(self, grid, uip): + def build(self, grid, uip): try: polarisation = self.kwargs["polarisation"].lower() p1 = self.kwargs["p1"] @@ -579,7 +579,7 @@ class MagneticDipole(UserObjectMulti): rot_pts = rotate_2point_object(rot_pol_pts, self.axis, self.angle, self.origin) self.kwargs["p1"] = tuple(rot_pts[0, :]) - def create(self, grid, uip): + def build(self, grid, uip): try: polarisation = self.kwargs["polarisation"].lower() p1 = self.kwargs["p1"] @@ -702,7 +702,7 @@ class TransmissionLine(UserObjectMulti): rot_pts = rotate_2point_object(rot_pol_pts, self.axis, self.angle, self.origin) self.kwargs["p1"] = tuple(rot_pts[0, :]) - def create(self, grid, uip): + def build(self, grid, uip): try: polarisation = self.kwargs["polarisation"].lower() p1 = self.kwargs["p1"] @@ -852,7 +852,7 @@ class Rx(UserObjectMulti): except KeyError: pass - def create(self, grid, uip): + def build(self, grid, uip): try: p1 = self.kwargs["p1"] except KeyError: @@ -922,7 +922,7 @@ class RxArray(UserObjectMulti): self.order = 8 self.hash = "#rx_array" - def create(self, grid, uip): + def build(self, grid, uip): try: p1 = self.kwargs["p1"] p2 = self.kwargs["p2"] @@ -1026,7 +1026,7 @@ class Snapshot(UserObjectMulti): self.order = 9 self.hash = "#snapshot" - def create(self, grid, uip): + def build(self, grid, uip): if isinstance(grid, SubGridBaseGrid): logger.exception(f"{self.params_str()} do not add snapshots to subgrids.") raise ValueError @@ -1139,7 +1139,7 @@ class Material(UserObjectMulti): self.order = 10 self.hash = "#material" - def create(self, grid, uip): + def build(self, grid, uip): try: er = self.kwargs["er"] se = self.kwargs["se"] @@ -1214,7 +1214,7 @@ class AddDebyeDispersion(UserObjectMulti): self.order = 11 self.hash = "#add_dispersion_debye" - def create(self, grid, uip): + def build(self, grid, uip): try: poles = self.kwargs["poles"] er_delta = self.kwargs["er_delta"] @@ -1286,7 +1286,7 @@ class AddLorentzDispersion(UserObjectMulti): self.order = 12 self.hash = "#add_dispersion_lorentz" - def create(self, grid, uip): + def build(self, grid, uip): try: poles = self.kwargs["poles"] er_delta = self.kwargs["er_delta"] @@ -1363,7 +1363,7 @@ class AddDrudeDispersion(UserObjectMulti): self.order = 13 self.hash = "#add_dispersion_drude" - def create(self, grid, uip): + def build(self, grid, uip): try: poles = self.kwargs["poles"] omega = self.kwargs["omega"] @@ -1440,7 +1440,7 @@ class SoilPeplinski(UserObjectMulti): self.order = 14 self.hash = "#soil_peplinski" - def create(self, grid, uip): + def build(self, grid, uip): try: sand_fraction = self.kwargs["sand_fraction"] clay_fraction = self.kwargs["clay_fraction"] @@ -1518,7 +1518,7 @@ class MaterialRange(UserObjectMulti): self.order = 15 self.hash = "#material_range" - def create(self, grid, uip): + def build(self, grid, uip): try: er_lower = self.kwargs["er_lower"] er_upper = self.kwargs["er_upper"] @@ -1600,7 +1600,7 @@ class MaterialList(UserObjectMulti): self.order = 16 self.hash = "#material_list" - def create(self, grid, uip): + def build(self, grid, uip): try: list_of_materials = self.kwargs["list_of_materials"] ID = self.kwargs["id"] @@ -1641,7 +1641,7 @@ class GeometryView(UserObjectMulti): self.order = 17 self.hash = "#geometry_view" - def geometry_view_constructor(self, grid, output_type): + def geometry_view_constructor(self, output_type): """Selects appropriate class for geometry view dependent on geometry view type, i.e. normal or fine. """ @@ -1653,7 +1653,7 @@ class GeometryView(UserObjectMulti): return GeometryViewUser - def create(self, grid, uip): + def build(self, grid, uip): try: p1 = self.kwargs["p1"] p2 = self.kwargs["p2"] @@ -1664,7 +1664,7 @@ class GeometryView(UserObjectMulti): logger.exception(f"{self.params_str()} requires exactly eleven parameters.") raise - GeometryViewUser = self.geometry_view_constructor(grid, output_type) + GeometryViewUser = self.geometry_view_constructor(output_type) try: p3 = uip.round_to_grid_static_point(p1) @@ -1730,7 +1730,7 @@ class GeometryObjectsWrite(UserObjectMulti): self.order = 18 self.hash = "#geometry_objects_write" - def create(self, grid, uip): + def build(self, grid, uip): try: p1 = self.kwargs["p1"] p2 = self.kwargs["p2"] @@ -1786,7 +1786,7 @@ class PMLCFS(UserObjectMulti): super().__init__(**kwargs) self.order = 19 - def create(self, grid, uip): + def build(self, grid, uip): try: alphascalingprofile = self.kwargs["alphascalingprofile"] alphascalingdirection = self.kwargs["alphascalingdirection"] diff --git a/gprMax/cmds_singleuse.py b/gprMax/cmds_singleuse.py index b0c93881..263060db 100644 --- a/gprMax/cmds_singleuse.py +++ b/gprMax/cmds_singleuse.py @@ -47,7 +47,7 @@ class UserObjectSingle: for k, v in kwargs.items(): setattr(self.props, k, v) - def create(self, grid, uip): + def build(self, grid, uip): pass def rotate(self, axis, angle, origin=None): @@ -65,7 +65,7 @@ class Title(UserObjectSingle): super().__init__(**kwargs) self.order = 1 - def create(self, G, uip): + def build(self, G, uip): try: title = self.kwargs["name"] G.title = title @@ -85,7 +85,7 @@ class Discretisation(UserObjectSingle): super().__init__(**kwargs) self.order = 2 - def create(self, G, uip): + def build(self, G, uip): try: G.dl = np.array(self.kwargs["p1"]) G.dx, G.dy, G.dz = self.kwargs["p1"] @@ -123,7 +123,7 @@ class Domain(UserObjectSingle): super().__init__(**kwargs) self.order = 3 - def create(self, G, uip): + def build(self, G, uip): try: G.nx, G.ny, G.nz = uip.discretise_point(self.kwargs["p1"]) except KeyError: @@ -179,7 +179,7 @@ class TimeStepStabilityFactor(UserObjectSingle): super().__init__(**kwargs) self.order = 4 - def create(self, G, uip): + def build(self, G, uip): try: f = self.kwargs["f"] except KeyError: @@ -210,7 +210,7 @@ class TimeWindow(UserObjectSingle): super().__init__(**kwargs) self.order = 5 - def create(self, G, uip): + def build(self, G, uip): # If number of iterations given # The +/- 1 used in calculating the number of iterations is to account for # the fact that the solver (iterations) loop runs from 0 to < G.iterations @@ -251,7 +251,7 @@ class OMPThreads(UserObjectSingle): super().__init__(**kwargs) self.order = 6 - def create(self, G, uip): + def build(self, G, uip): try: n = self.kwargs["n"] except KeyError: @@ -285,7 +285,7 @@ class PMLProps(UserObjectSingle): super().__init__(**kwargs) self.order = 7 - def create(self, G, uip): + def build(self, G, uip): try: G.pmls["formulation"] = self.kwargs["formulation"] if G.pmls["formulation"] not in PML.formulations: @@ -335,7 +335,7 @@ class SrcSteps(UserObjectSingle): super().__init__(**kwargs) self.order = 8 - def create(self, G, uip): + def build(self, G, uip): try: G.srcsteps = uip.discretise_point(self.kwargs["p1"]) except KeyError: @@ -360,7 +360,7 @@ class RxSteps(UserObjectSingle): super().__init__(**kwargs) self.order = 9 - def create(self, G, uip): + def build(self, G, uip): try: G.rxsteps = uip.discretise_point(self.kwargs["p1"]) except KeyError: @@ -385,5 +385,5 @@ class OutputDir(UserObjectSingle): super().__init__(**kwargs) self.order = 10 - def create(self, grid, uip): + def build(self, grid, uip): config.get_model_config().set_output_file_path(self.kwargs["dir"]) diff --git a/gprMax/geometry_outputs.py b/gprMax/geometry_outputs.py index 5af12603..755a5478 100644 --- a/gprMax/geometry_outputs.py +++ b/gprMax/geometry_outputs.py @@ -89,13 +89,16 @@ class GeometryView: self.dy = dy self.dz = dz self.filename = filename + self.filenamebase = filename self.grid = grid self.nbytes = None def set_filename(self): """Constructs filename from user-supplied name and model run number.""" parts = config.get_model_config().output_file_path.parts - self.filename = Path(*parts[:-1], self.filename + config.get_model_config().appendmodelnumber) + self.filename = Path(*parts[:-1], + self.filenamebase + + config.get_model_config().appendmodelnumber) class GeometryViewLines(GeometryView): @@ -324,10 +327,10 @@ class Comments: return sc def dx_dy_dz_comment(self): - return numeric_list_to_float_list([self.grid.dx, self.grid.dy, self.grid.dz]) + return list(map(float, [self.grid.dx, self.grid.dy, self.grid.dz])) def nx_ny_nz_comment(self): - return numeric_list_to_int_list([self.grid.nx, self.grid.ny, self.grid.nz]) + return list(map(int, [self.grid.nx, self.grid.ny, self.grid.nz])) def materials_comment(self): if not self.averaged_materials: diff --git a/gprMax/subgrids/user_objects.py b/gprMax/subgrids/user_objects.py index 00a77fc9..82bf646f 100644 --- a/gprMax/subgrids/user_objects.py +++ b/gprMax/subgrids/user_objects.py @@ -121,7 +121,7 @@ class SubGridBase(UserObjectMulti): sg.timewindow = grid.timewindow - # Copy a subgrid reference to self so that children.create(grid, uip) + # Copy a subgrid reference to self so that children.build(grid, uip) # can access the correct grid. self.subgrid = sg @@ -192,7 +192,7 @@ class SubGridHSG(SubGridBase): self.order = 18 self.hash = "#subgrid_hsg" - def create(self, grid, uip): + def build(self, grid, uip): sg = SubGridHSGUser(**self.kwargs) self.setup(sg, grid, uip) return sg