diff options
author | 2023-05-09 01:09:53 +0200 | |
---|---|---|
committer | 2023-05-08 16:09:53 -0700 | |
commit | f463ac757075652f9ada52cd18a1c7502a990b6d (patch) | |
tree | 15b913026e6f8e22d5f45427417be904c57125d7 /Python/pywarpx/picmi.py | |
parent | a5736592b589cee2bb1842d6160575e99cdb07ba (diff) | |
download | WarpX-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.py | 25 |
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: |