aboutsummaryrefslogtreecommitdiff
path: root/Python/pywarpx/picmi.py
diff options
context:
space:
mode:
authorGravatar Dave Grote <grote1@llnl.gov> 2018-09-13 13:20:34 -0700
committerGravatar Dave Grote <grote1@llnl.gov> 2018-09-13 13:20:34 -0700
commitd7e5344a3c5869062c70a3647fa20c50074a0616 (patch)
tree0faffb5876a80de24a366b5f558487168731cbaf /Python/pywarpx/picmi.py
parent6336383b37357a82cf90d0e59db250d7b97e4f1b (diff)
downloadWarpX-d7e5344a3c5869062c70a3647fa20c50074a0616.tar.gz
WarpX-d7e5344a3c5869062c70a3647fa20c50074a0616.tar.zst
WarpX-d7e5344a3c5869062c70a3647fa20c50074a0616.zip
Implemented refined_regions option
Other minor clean ups. Removed max_level argument from sample input files.
Diffstat (limited to 'Python/pywarpx/picmi.py')
-rw-r--r--Python/pywarpx/picmi.py31
1 files changed, 24 insertions, 7 deletions
diff --git a/Python/pywarpx/picmi.py b/Python/pywarpx/picmi.py
index fe2124360..1d02f8b29 100644
--- a/Python/pywarpx/picmi.py
+++ b/Python/pywarpx/picmi.py
@@ -258,7 +258,7 @@ class CylindricalGrid(picmistandard.PICMI_CylindricalGrid):
class Cartesian2DGrid(picmistandard.PICMI_Cartesian2DGrid):
def init(self, kw):
self.max_grid_size = kw.pop('warpx_max_grid_size', 32)
- self.max_level = kw.pop('warpx_max_level', 0)
+ self.blocking_factor = kw.pop('warpx_blocking_factor', None)
self.coord_sys = kw.pop('warpx_coord_sys', 0)
def initialize_inputs(self):
@@ -268,9 +268,6 @@ class Cartesian2DGrid(picmistandard.PICMI_Cartesian2DGrid):
# this is used to decompose the domain for parallel calculations.
pywarpx.amr.max_grid_size = self.max_grid_size
- # Maximum level in hierarchy (for now must be 0, i.e., one level in total)
- pywarpx.amr.max_level = self.max_level
-
# Geometry
pywarpx.geometry.coord_sys = self.coord_sys
pywarpx.geometry.is_periodic = '%d %d'%(self.bc_xmin=='periodic', self.bc_ymin=='periodic') # Is periodic?
@@ -286,11 +283,21 @@ class Cartesian2DGrid(picmistandard.PICMI_Cartesian2DGrid):
pywarpx.warpx.moving_window_dir = 'y'
pywarpx.warpx.moving_window_v = self.moving_window_velocity[1]/c # in units of the speed of light
+ if self.refined_regions:
+ assert len(self.refined_regions) == 1, Exception('WarpX only supports one refined region.')
+ assert self.refined_regions[0][0] == 1, Exception('The one refined region can only be level 1')
+ pywarpx.amr.max_level = 1
+ pywarpx.warpx.fine_tag_lo = self.refined_regions[0][1]
+ pywarpx.warpx.fine_tag_hi = self.refined_regions[0][2]
+ # The refinement_factor is ignored (assumed to be [2,2])
+ else:
+ pywarpx.amr.max_level = 0
+
class Cartesian3DGrid(picmistandard.PICMI_Cartesian3DGrid):
def init(self, kw):
self.max_grid_size = kw.pop('warpx_max_grid_size', 32)
- self.max_level = kw.pop('warpx_max_level', 0)
+ self.blocking_factor = kw.pop('warpx_blocking_factor', None)
self.coord_sys = kw.pop('warpx_coord_sys', 0)
def initialize_inputs(self):
@@ -300,8 +307,7 @@ class Cartesian3DGrid(picmistandard.PICMI_Cartesian3DGrid):
# this is used to decompose the domain for parallel calculations.
pywarpx.amr.max_grid_size = self.max_grid_size
- # Maximum level in hierarchy (for now must be 0, i.e., one level in total)
- pywarpx.amr.max_level = self.max_level
+ pywarpx.amr.blocking_factor = self.blocking_factor
# Geometry
pywarpx.geometry.coord_sys = self.coord_sys
@@ -321,18 +327,29 @@ class Cartesian3DGrid(picmistandard.PICMI_Cartesian3DGrid):
pywarpx.warpx.moving_window_dir = 'z'
pywarpx.warpx.moving_window_v = self.moving_window_velocity[2]/c # in units of the speed of light
+ if self.refined_regions:
+ assert len(self.refined_regions) == 1, Exception('WarpX only supports one refined region.')
+ assert self.refined_regions[0][0] == 1, Exception('The one refined region can only be level 1')
+ pywarpx.amr.max_level = 1
+ pywarpx.warpx.fine_tag_lo = self.refined_regions[0][1]
+ pywarpx.warpx.fine_tag_hi = self.refined_regions[0][2]
+ # The refinement_factor is ignored (assumed to be [2,2,2])
+ else:
+ pywarpx.amr.max_level = 0
class ElectromagneticSolver(picmistandard.PICMI_ElectromagneticSolver):
def init(self, kw):
assert self.method is None or self.method in ['Yee', 'CKC'], Exception("Only 'Yee' and 'CKC' FDTD are supported")
self.do_pml = kw.pop('warpx_do_pml', None)
+ self.pml_ncell = kw.pop('warpx_pml_ncell', None)
def initialize_inputs(self):
self.grid.initialize_inputs()
pywarpx.warpx.do_pml = self.do_pml
+ pywarpx.warpx.pml_ncell = self.pml_ncell
# --- Same method names are used, though mapped to lower case.
pywarpx.warpx.maxwell_fdtd_solver = self.method