diff --git a/gprMax/cmds_geometry/box.py b/gprMax/cmds_geometry/box.py index c1cbd5e9..7b4fa5ae 100644 --- a/gprMax/cmds_geometry/box.py +++ b/gprMax/cmds_geometry/box.py @@ -84,7 +84,12 @@ class Box(UserObjectGeometry): raise # Check averaging - averagebox = self.check_averaging(grid) + try: + # Try user-specified averaging + averagebox = self.kwargs['averaging'] + except KeyError: + # Otherwise go with the grid default + averagebox = grid.averagevolumeobjects p3, p4 = uip.check_box_points(p1, p2, self.__str__()) # find nearest point on grid without translation diff --git a/gprMax/cmds_geometry/cmds_geometry.py b/gprMax/cmds_geometry/cmds_geometry.py index 212b7890..71725e8f 100644 --- a/gprMax/cmds_geometry/cmds_geometry.py +++ b/gprMax/cmds_geometry/cmds_geometry.py @@ -62,34 +62,6 @@ class UserObjectGeometry: else: return '' - def check_averaging(self, grid): - """Check material averaging value. - - Args: - grid (class): Grid class instance - holds essential parameters - describing the model. - - Returns: - averaging (bool): geometry object material averaging - """ - - try: - # Try user-specified averaging - averaging = self.kwargs['averaging'].lower() - if averaging == 'y': - averaging = True - elif averaging == 'n': - averaging = False - else: - logger.exception(self.__str__() + f' requires averaging to be either y or n') - - except KeyError: - # Otherwise go with the grid default - averaging = grid.averagevolumeobjects - - return averaging - - def rotate_point(p, axis, angle, origin=(0, 0, 0)): """Rotate a point. diff --git a/gprMax/cmds_geometry/cylinder.py b/gprMax/cmds_geometry/cylinder.py index 3b2587dc..2349ad11 100644 --- a/gprMax/cmds_geometry/cylinder.py +++ b/gprMax/cmds_geometry/cylinder.py @@ -58,7 +58,12 @@ class Cylinder(UserObjectGeometry): raise # Check averaging - averagecylinder = self.check_averaging(grid) + try: + # Try user-specified averaging + averagecylinder = self.kwargs['averaging'] + except KeyError: + # Otherwise go with the grid default + averagecylinder = grid.averagevolumeobjects # check materials have been specified # isotropic case diff --git a/gprMax/cmds_geometry/cylindrical_sector.py b/gprMax/cmds_geometry/cylindrical_sector.py index 47d0e05e..4cdc3274 100644 --- a/gprMax/cmds_geometry/cylindrical_sector.py +++ b/gprMax/cmds_geometry/cylindrical_sector.py @@ -75,7 +75,12 @@ class CylindricalSector(UserObjectGeometry): raise # Check averaging - averagecylindricalsector = self.check_averaging(grid) + try: + # Try user-specified averaging + averagecylindricalsector = self.kwargs['averaging'] + except KeyError: + # Otherwise go with the grid default + averagecylindricalsector = grid.averagevolumeobjects # check materials have been specified # isotropic case diff --git a/gprMax/cmds_geometry/sphere.py b/gprMax/cmds_geometry/sphere.py index 8b98ffee..feedb603 100644 --- a/gprMax/cmds_geometry/sphere.py +++ b/gprMax/cmds_geometry/sphere.py @@ -55,7 +55,12 @@ class Sphere(UserObjectGeometry): raise # Check averaging - averagesphere = self.check_averaging(grid) + try: + # Try user-specified averaging + averagesphere = self.kwargs['averaging'] + except KeyError: + # Otherwise go with the grid default + averagesphere = grid.averagevolumeobjects # check materials have been specified # isotropic case diff --git a/gprMax/cmds_geometry/triangle.py b/gprMax/cmds_geometry/triangle.py index e865ee2e..067480d1 100644 --- a/gprMax/cmds_geometry/triangle.py +++ b/gprMax/cmds_geometry/triangle.py @@ -80,7 +80,12 @@ class Triangle(UserObjectGeometry): self.__dorotate() # Check averaging - averagetriangularprism = self.check_averaging(grid) + try: + # Try user-specified averaging + averagetriangularprism = self.kwargs['averaging'] + except KeyError: + # Otherwise go with the grid default + averagetriangularprism = grid.averagevolumeobjects # check materials have been specified # isotropic case diff --git a/gprMax/hash_cmds_geometry.py b/gprMax/hash_cmds_geometry.py index c7f70a20..6b98614e 100644 --- a/gprMax/hash_cmds_geometry.py +++ b/gprMax/hash_cmds_geometry.py @@ -35,6 +35,27 @@ from .utilities.utilities import round_value logger = logging.getLogger(__name__) +def check_averaging(averaging): + """Check and set material averaging value. + + Args: + averaging (string): Input value from hash command - should be 'y' + or 'n' + + Returns: + averaging (bool): geometry object material averaging + """ + + if averaging == 'y': + averaging = True + elif averaging == 'n': + averaging = False + else: + logger.exception(self.__str__() + f' requires averaging to be either y or n') + + return averaging + + def process_geometrycmds(geometry): """ This function checks the validity of command parameters, creates instances @@ -115,7 +136,8 @@ def process_geometrycmds(geometry): # Isotropic case with user specified averaging elif len(tmp) == 13: - triangle = Triangle(p1=p1, p2=p2, p3=p3, thickness=thickness, material_id=tmp[11], averaging=tmp[12].lower()) + averaging = check_averaging(tmp[12].lower()) + triangle = Triangle(p1=p1, p2=p2, p3=p3, thickness=thickness, material_id=tmp[11], averaging=averaging) # Uniaxial anisotropic case elif len(tmp) == 14: @@ -141,7 +163,8 @@ def process_geometrycmds(geometry): # Isotropic case with user specified averaging elif len(tmp) == 9: - box = Box(p1=p1, p2=p2, material_id=tmp[7], averaging=tmp[8]) + averaging = check_averaging(tmp[8].lower()) + box = Box(p1=p1, p2=p2, material_id=tmp[7], averaging=averaging) # Uniaxial anisotropic case elif len(tmp) == 10: @@ -168,7 +191,8 @@ def process_geometrycmds(geometry): # Isotropic case with user specified averaging elif len(tmp) == 10: - cylinder = Cylinder(p1=p1, p2=p2, r=r, material_id=tmp[8], averaging=tmp[9]) + averaging = check_averaging(tmp[9].lower()) + cylinder = Cylinder(p1=p1, p2=p2, r=r, material_id=tmp[8], averaging=averaging) # Uniaxial anisotropic case elif len(tmp) == 11: @@ -201,8 +225,9 @@ def process_geometrycmds(geometry): # Isotropic case with user specified averaging elif len(tmp) == 11: + averaging = check_averaging(tmp[10].lower()) cylindrical_sector = CylindricalSector(normal=normal, ctr1=ctr1, ctr2=ctr2, extent1=extent1, extent2=extent2, - r=r, start=start, end=end, averaging=tmp[10], material_id=tmp[9]) + r=r, start=start, end=end, averaging=averaging, material_id=tmp[9]) # Uniaxial anisotropic case elif len(tmp) == 12: @@ -229,7 +254,8 @@ def process_geometrycmds(geometry): # Isotropic case with user specified averaging elif len(tmp) == 7: - sphere = Sphere(p1=p1, r=r, material_id=tmp[5], averaging=tmp[6]) + averaging = check_averaging(tmp[6].lower()) + sphere = Sphere(p1=p1, r=r, material_id=tmp[5], averaging=averaging) # Uniaxial anisotropic case elif len(tmp) == 8: