From f463ac757075652f9ada52cd18a1c7502a990b6d Mon Sep 17 00:00:00 2001 From: Neïl Zaim <49716072+NeilZaim@users.noreply.github.com> Date: Tue, 9 May 2023 01:09:53 +0200 Subject: 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> --- Python/pywarpx/picmi.py | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) (limited to 'Python/pywarpx/picmi.py') 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: -- cgit v1.2.3