aboutsummaryrefslogtreecommitdiff
path: root/Python/pywarpx/picmi.py
diff options
context:
space:
mode:
authorGravatar Neïl Zaim <49716072+NeilZaim@users.noreply.github.com> 2023-05-09 01:09:53 +0200
committerGravatar GitHub <noreply@github.com> 2023-05-08 16:09:53 -0700
commitf463ac757075652f9ada52cd18a1c7502a990b6d (patch)
tree15b913026e6f8e22d5f45427417be904c57125d7 /Python/pywarpx/picmi.py
parenta5736592b589cee2bb1842d6160575e99cdb07ba (diff)
downloadWarpX-f463ac757075652f9ada52cd18a1c7502a990b6d.tar.gz
WarpX-f463ac757075652f9ada52cd18a1c7502a990b6d.tar.zst
WarpX-f463ac757075652f9ada52cd18a1c7502a990b6d.zip
Enable field ionization from PICMI (#3298)
* Enable field ionization from PICMI * Implement Dave's suggestions and add automated test * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update test benchmark * Add docstring for FieldIonization class --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Diffstat (limited to 'Python/pywarpx/picmi.py')
-rw-r--r--Python/pywarpx/picmi.py25
1 files changed, 17 insertions, 8 deletions
diff --git a/Python/pywarpx/picmi.py b/Python/pywarpx/picmi.py
index 4a3798059..f9bb6404c 100644
--- a/Python/pywarpx/picmi.py
+++ b/Python/pywarpx/picmi.py
@@ -262,14 +262,6 @@ class Species(picmistandard.PICMI_Species):
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'
- self.species.do_field_ionization=1
- self.species.physical_element=self.particle_type
- self.species.ionization_product_species = interaction[2].name
- self.species.ionization_initial_level = self.charge_state
- self.species.charge = 'q_e'
picmistandard.PICMI_MultiSpecies.Species_class = Species
class MultiSpecies(picmistandard.PICMI_MultiSpecies):
@@ -1216,6 +1208,19 @@ class Mirror(picmistandard.PICMI_Mirror):
pywarpx.warpx.mirror_z_npoints.append(self.number_of_cells)
+class FieldIonization(picmistandard.PICMI_FieldIonization):
+ """
+ WarpX only has ADK ionization model implemented.
+ """
+ def initialize_inputs(self):
+ assert self.model == 'ADK', 'WarpX only has ADK ionization model implemented'
+ self.ionized_species.species.do_field_ionization = 1
+ self.ionized_species.species.physical_element = self.ionized_species.particle_type
+ self.ionized_species.species.ionization_product_species = self.product_species.name
+ self.ionized_species.species.ionization_initial_level = self.ionized_species.charge_state
+ self.ionized_species.species.charge = 'q_e'
+
+
class CoulombCollisions(picmistandard.base._ClassWithInit):
"""
Custom class to handle setup of binary Coulmb collisions in WarpX. If
@@ -1719,6 +1724,10 @@ class Simulation(picmistandard.PICMI_Simulation):
self.injection_plane_positions[i],
self.injection_plane_normal_vectors[i])
+ for interaction in self.interactions:
+ assert(isinstance(interaction, FieldIonization))
+ interaction.initialize_inputs()
+
if self.collisions is not None:
pywarpx.collisions.collision_names = []
for collision in self.collisions: