From 8e60484b44cb1b0a679d279cd81209f5188c82ad Mon Sep 17 00:00:00 2001 From: nmannall Date: Mon, 6 Jan 2025 16:01:36 +0000 Subject: [PATCH] Make PML formulation optional in PMLProps user object --- gprMax/user_objects/cmds_singleuse.py | 29 +++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/gprMax/user_objects/cmds_singleuse.py b/gprMax/user_objects/cmds_singleuse.py index d6a5ec06..8ac2a6ba 100644 --- a/gprMax/user_objects/cmds_singleuse.py +++ b/gprMax/user_objects/cmds_singleuse.py @@ -391,10 +391,12 @@ class PMLThickness(ModelUserObject): ): raise ValueError(f"{self} has too many cells for the domain size") + thickness = model.G.pmls["thickness"] + logger.info( - f"PML thickness: x0={model.G.pmls['x0']}, y0={model.G.pmls['y0']}," - f" z0={model.G.pmls['z0']}, xmax={model.G.pmls['xmax']}," - f" ymax={model.G.pmls['yxmax']}, zmax={model.G.pmls['zmax']}" + f"PML thickness: x0={thickness['x0']}, y0={thickness['y0']}," + f" z0={thickness['z0']}, xmax={thickness['xmax']}," + f" ymax={thickness['ymax']}, zmax={thickness['zmax']}" ) @@ -427,7 +429,7 @@ class PMLProps(ModelUserObject): def __init__( self, - formulation: str, + formulation: Optional[str] = None, thickness: Optional[int] = None, x0: Optional[int] = None, y0: Optional[int] = None, @@ -463,7 +465,10 @@ class PMLProps(ModelUserObject): " PMLThickness user objects instead." ) - self.pml_formulation = PMLFormulation(formulation) + if formulation is not None: + self.pml_formulation = PMLFormulation(formulation) + else: + self.pml_formulation = None if thickness is not None: self.pml_thickness = PMLThickness(thickness) @@ -477,11 +482,19 @@ class PMLProps(ModelUserObject): ): self.pml_thickness = PMLThickness((x0, y0, z0, xmax, ymax, zmax)) else: - raise ValueError("Either set thickness, or all of x0, y0, z0, xmax, ymax, zmax.") + self.pml_thickness = None + + if self.pml_formulation is None and self.pml_thickness is None: + raise ValueError( + "Must set PML formulation or thickness. Thickness can be set by specifying all of x0, y0, z0, xmax, ymax, zmax." + ) def build(self, model): - self.pml_formulation.build(model) - self.pml_thickness.build(model) + if self.pml_formulation is not None: + self.pml_formulation.build(model) + + if self.pml_thickness is not None: + self.pml_thickness.build(model) class SrcSteps(ModelUserObject):