Skip to content

Commit bebdda7

Browse files
authored
Merge pull request #5542 from BrianMarre/topic-switchToIPDIonizationStatesForIPDUnboundEvaluation
Switch to using IPD ionization states for unbound evaluation
2 parents b1df970 + 2201de4 commit bebdda7

File tree

3 files changed

+19
-6
lines changed

3 files changed

+19
-6
lines changed

include/picongpu/particles/atomicPhysics/DeltaEnergyTransition.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,10 @@ namespace picongpu::particles::atomicPhysics
7878
public:
7979
/** ionizationEnergy from lowerState- to upperState- chargeState
8080
*
81+
* @param lowerStateChargeState
82+
* @param upperStateChargeState
8183
* @param ionizationPotentialDepression, in eV
84+
* @param chargeStateDataBox
8285
*
8386
* @return unit: eV
8487
*/

include/picongpu/particles/atomicPhysics/ionizationPotentialDepression/kernel/ApplyIPDIonization.kernel

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,10 @@
3131
#pragma once
3232

3333
#include "picongpu/defines.hpp"
34+
#include "picongpu/particles/atomicPhysics/DeltaEnergyTransition.hpp"
3435
#include "picongpu/particles/atomicPhysics/SetAtomicState.hpp"
3536
#include "picongpu/particles/atomicPhysics/enums/ProcessClass.hpp"
37+
#include "picongpu/particles/atomicPhysics/enums/ProcessClassGroup.hpp"
3638
#include "picongpu/particles/atomicPhysics/ionizationPotentialDepression/BarrierSupressionIonization.hpp"
3739
#include "picongpu/particles/atomicPhysics/spawnFromSourceSpeciesModules/CacheEFieldForSuperCell.hpp"
3840
#include "picongpu/particles/atomicPhysics/spawnFromSourceSpeciesModules/InitAsCoMoving.hpp"
@@ -173,10 +175,6 @@ namespace picongpu::particles::atomicPhysics::ionizationPotentialDepression::ker
173175
uint8_t const currentChargeState
174176
= T_AtomicStateDataBox::ConfigNumber::getChargeState(currentAtomicStateConfigNumber);
175177

176-
// eV
177-
float_X const ionizationEnergy = chargeStateBox.ionizationEnergy(currentChargeState)
178-
- atomicStateBox.energy(currentAtomicStateClctIdx);
179-
180178
// eV
181179
float_X ipd = T_IPDModel::ipd(kernelState.superCellConstantIPDInput, currentChargeState);
182180

@@ -198,8 +196,20 @@ namespace picongpu::particles::atomicPhysics::ionizationPotentialDepression::ker
198196
ipd += BarrierSupressionIonization::getIPD(screenedCharge, eFieldNormAU);
199197
}
200198

199+
auto const ipdIonizationStateConfigNumber = atomicStateBox.configNumber(ipdIonizationStateClctIdx);
200+
uint8_t const ipdIonizationStateChargeState
201+
= T_AtomicStateDataBox::ConfigNumber::getChargeState(ipdIonizationStateConfigNumber);
201202

202-
bool const stateIsUnbound = ((ionizationEnergy - ipd) <= 0._X);
203+
///@details need to do by hand since IPD-Ionization does not always follow a defined transition
204+
// eV
205+
float_X const ionizationEnergyToIPDIonizationState
206+
= DeltaEnergyTransition::template ionizationEnergy<
207+
s_enums::ProcessClassGroup::boundFreeBased,
208+
float_X>(currentChargeState, ipdIonizationStateChargeState, ipd, chargeStateBox)
209+
+ atomicStateBox.energy(ipdIonizationStateClctIdx)
210+
- atomicStateBox.energy(currentAtomicStateClctIdx);
211+
212+
bool const stateIsUnbound = (ionizationEnergyToIPDIonizationState <= 0._X);
203213

204214
/** @details states that are unbound without an IPD contribution should have option to relax via
205215
* auto-ionization, electronic collisional ionization or deexcitation channels in the regular rate solver

include/picongpu/particles/atomicPhysics/rateCalculation/BoundBoundTransitionRates.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ namespace picongpu::particles::atomicPhysics::rateCalculation
219219
// check whether electron has enough kinetic energy
220220
if constexpr(T_excitation)
221221
{
222-
// transition physical impossible, insufficient electron energy
222+
// transition physically impossible, insufficient electron energy
223223
if(energyDifference > energyElectron)
224224
{
225225
return 0._X;

0 commit comments

Comments
 (0)