aboutsummaryrefslogtreecommitdiff
path: root/Python/pywarpx/picmi.py
diff options
context:
space:
mode:
authorGravatar David Grote <grote1@llnl.gov> 2020-09-17 17:12:48 -0700
committerGravatar GitHub <noreply@github.com> 2020-09-17 17:12:48 -0700
commit6243b97603d423dd9fe9c227efbfb71dafe949ca (patch)
treeda7ca036ac0ada0d75cd6c6f55dd40d3aa655cd4 /Python/pywarpx/picmi.py
parent13c55e2577215e0ca78af03dca3f58491f47be0a (diff)
downloadWarpX-6243b97603d423dd9fe9c227efbfb71dafe949ca.tar.gz
WarpX-6243b97603d423dd9fe9c227efbfb71dafe949ca.tar.zst
WarpX-6243b97603d423dd9fe9c227efbfb71dafe949ca.zip
picmi - implemented rigid advance species option (#1338)
Diffstat (limited to 'Python/pywarpx/picmi.py')
-rw-r--r--Python/pywarpx/picmi.py18
1 files changed, 16 insertions, 2 deletions
diff --git a/Python/pywarpx/picmi.py b/Python/pywarpx/picmi.py
index 6c43c2932..b8a7fa3ce 100644
--- a/Python/pywarpx/picmi.py
+++ b/Python/pywarpx/picmi.py
@@ -64,7 +64,10 @@ class Species(picmistandard.PICMI_Species):
if self.mass is None:
self.mass = element.mass*periodictable.constants.atomic_mass_constant
- def initialize_inputs(self, layout, initialize_self_fields=False):
+ def initialize_inputs(self, layout,
+ initialize_self_fields = False,
+ injection_plane_position = None,
+ injection_plane_normal_vector = None):
self.species_number = len(pywarpx.particles.species_names)
if self.name is None:
@@ -82,6 +85,14 @@ class Species(picmistandard.PICMI_Species):
if self.initial_distribution is not None:
self.initial_distribution.initialize_inputs(self.species_number, layout, self.species, self.density_scale)
+ if injection_plane_position is not None:
+ if injection_plane_normal_vector is not None:
+ assert injection_plane_normal_vector[0] == 0. and injection_plane_normal_vector[1] == 0.,\
+ Exception('Rigid injection can only be done along z')
+ pywarpx.particles.rigid_injected_species.append(self.name)
+ self.species.rigid_advance = 1
+ self.species.zinject_plane = injection_plane_position
+
for interaction in self.interactions:
assert interaction[0] == 'ionization'
assert interaction[1] == 'ADK', 'WarpX only has ADK ionization model implemented'
@@ -676,7 +687,10 @@ class Simulation(picmistandard.PICMI_Simulation):
self.solver.initialize_inputs()
for i in range(len(self.species)):
- self.species[i].initialize_inputs(self.layouts[i], self.initialize_self_fields[i])
+ self.species[i].initialize_inputs(self.layouts[i],
+ self.initialize_self_fields[i],
+ self.injection_plane_positions[i],
+ self.injection_plane_normal_vectors[i])
for i in range(len(self.lasers)):
self.lasers[i].initialize_inputs()