diff options
Diffstat (limited to 'Python/pywarpx/picmi.py')
-rw-r--r-- | Python/pywarpx/picmi.py | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/Python/pywarpx/picmi.py b/Python/pywarpx/picmi.py index 61f1b6c88..7b67656ca 100644 --- a/Python/pywarpx/picmi.py +++ b/Python/pywarpx/picmi.py @@ -17,6 +17,11 @@ import periodictable codename = 'warpx' picmistandard.register_codename(codename) +# dictionary to map field boundary conditions from picmistandard to WarpX +BC_map = { + 'open':'pml', 'dirichlet':'pec', 'periodic':'periodic', 'none':'none' +} + class constants: # --- Put the constants in their own namespace # --- Values from WarpXConst.H @@ -375,11 +380,16 @@ class CylindricalGrid(picmistandard.PICMI_CylindricalGrid): # Geometry pywarpx.geometry.coord_sys = 1 # RZ - pywarpx.geometry.is_periodic = '0 %d'%(self.bc_zmin=='periodic') # Is periodic? pywarpx.geometry.prob_lo = self.lower_bound # physical domain pywarpx.geometry.prob_hi = self.upper_bound pywarpx.warpx.n_rz_azimuthal_modes = self.n_azimuthal_modes + # Boundary conditions + pywarpx.boundary.field_lo = [BC_map[bc] for bc in [self.bc_rmin, self.bc_zmin]] + pywarpx.boundary.field_hi = [BC_map[bc] for bc in [self.bc_rmax, self.bc_zmax]] + pywarpx.boundary.particle_lo = [self.bc_rmin_particles, self.bc_zmin_particles] + pywarpx.boundary.particle_hi = [self.bc_rmax_particles, self.bc_zmax_particles] + if self.moving_window_zvelocity is not None: if np.isscalar(self.moving_window_zvelocity): if self.moving_window_zvelocity !=0: @@ -422,10 +432,15 @@ class Cartesian2DGrid(picmistandard.PICMI_Cartesian2DGrid): # Geometry pywarpx.geometry.coord_sys = 0 # Cartesian - pywarpx.geometry.is_periodic = '%d %d'%(self.bc_xmin=='periodic', self.bc_ymin=='periodic') # Is periodic? pywarpx.geometry.prob_lo = self.lower_bound # physical domain pywarpx.geometry.prob_hi = self.upper_bound + # Boundary conditions + pywarpx.boundary.field_lo = [BC_map[bc] for bc in [self.bc_xmin, self.bc_ymin]] + pywarpx.boundary.field_hi = [BC_map[bc] for bc in [self.bc_xmax, self.bc_ymax]] + pywarpx.boundary.particle_lo = [self.bc_xmin_particles, self.bc_ymin_particles] + pywarpx.boundary.particle_hi = [self.bc_xmax_particles, self.bc_ymax_particles] + if self.moving_window_velocity is not None and np.any(np.not_equal(self.moving_window_velocity, 0.)): pywarpx.warpx.do_moving_window = 1 if self.moving_window_velocity[0] != 0.: @@ -468,10 +483,19 @@ class Cartesian3DGrid(picmistandard.PICMI_Cartesian3DGrid): # Geometry pywarpx.geometry.coord_sys = 0 # Cartesian - pywarpx.geometry.is_periodic = '%d %d %d'%(self.bc_xmin=='periodic', self.bc_ymin=='periodic', self.bc_zmin=='periodic') # Is periodic? pywarpx.geometry.prob_lo = self.lower_bound # physical domain pywarpx.geometry.prob_hi = self.upper_bound + # Boundary conditions + pywarpx.boundary.field_lo = [BC_map[bc] for bc in [self.bc_xmin, self.bc_ymin, self.bc_zmin]] + pywarpx.boundary.field_hi = [BC_map[bc] for bc in [self.bc_xmax, self.bc_ymax, self.bc_zmax]] + pywarpx.boundary.particle_lo = [ + self.bc_xmin_particles, self.bc_ymin_particles, self.bc_zmin_particles + ] + pywarpx.boundary.particle_hi = [ + self.bc_xmax_particles, self.bc_ymax_particles, self.bc_zmax_particles + ] + if self.moving_window_velocity is not None and np.any(np.not_equal(self.moving_window_velocity, 0.)): pywarpx.warpx.do_moving_window = 1 if self.moving_window_velocity[0] != 0.: |