From 19518ecaf4fcd33bbb627c09be01805875047e9d Mon Sep 17 00:00:00 2001 From: BrianMarre Date: Tue, 7 Jan 2025 14:34:47 +0100 Subject: [PATCH] fix IPD ionization cascade ci: picongpu --- .../kernel/ApplyIPDIonization.kernel | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/include/picongpu/particles/atomicPhysics/ionizationPotentialDepression/kernel/ApplyIPDIonization.kernel b/include/picongpu/particles/atomicPhysics/ionizationPotentialDepression/kernel/ApplyIPDIonization.kernel index 0ed242cfe8..dbaeceaaf6 100644 --- a/include/picongpu/particles/atomicPhysics/ionizationPotentialDepression/kernel/ApplyIPDIonization.kernel +++ b/include/picongpu/particles/atomicPhysics/ionizationPotentialDepression/kernel/ApplyIPDIonization.kernel @@ -204,9 +204,21 @@ namespace picongpu::particles::atomicPhysics::ionizationPotentialDepression::ker // eV float_X const ipdIonizationEnergy = ionizationEnergy - ipd; - if(ipdIonizationEnergy < 0._X) + bool const stateIsUnbound = (ipdIonizationEnergy < 0._X); + + /** @details states that are unbound without an IPD contribution must relax via auto-ionization, electronic + * collisional ionization or deexcitation channels + * + * these states are typically low shell hole states, IPD-Ionization will not relax these states until + * very high charge states, causing: + * - numerical energy creation as the IPD actually lacks the energy required for ionization + * - instant ionization cascades, which are not consistent with the IPD equilibrium description + */ + bool const stateIsUnboundDueToIPDOnly = (ionizationEnergy >= 0._X); + + if(stateIsUnbound && stateIsUnboundDueToIPDOnly) { - /* we only update the atomic state since IPDIonization is not a regular transition and does not use + /* we only update the atomic state since IPD-Ionization is not a regular transition and does not use * shared resources */ // update ion atomic state