diff --git a/CHANGELOG.md b/CHANGELOG.md index 48052f6773..87d7e050ae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -116,6 +116,7 @@ for their contributions to this release! **Bug Fixes:** - PIC: + - Fix missing euler number in ADK formula #4696 - Fix incorrect assignment of Jz in 2d EmZ implementation #3892 - Fix getExternalCellsTotal() to properly account for guard cells #4030 - Fix incident field math around corners #4102 diff --git a/docs/source/models/field_ionization.rst b/docs/source/models/field_ionization.rst index ac52a93eb5..9fb9e211ed 100644 --- a/docs/source/models/field_ionization.rst +++ b/docs/source/models/field_ionization.rst @@ -127,6 +127,7 @@ Leaving out the pre-factor distinguishes ``ADKCircPol`` from ``ADKLinPol``. .. attention:: Be aware that :math:`Z` denotes the **residual ion charge** and not the proton number of the nucleus! + Be aware that :math:`e` in :math:`D` denotes Euler's number, not the elementary charge In the following comparison one can see the ``ADKLinPol`` ionization rates for the transition from Carbon II to III (meaning 1+ to 2+). For a reference the rates for Hydrogen as well as the barrier suppression field strengths :math:`F_\mathrm{BSI}` have been plotted. diff --git a/include/picongpu/particles/ionization/byField/ADK/AlgorithmADK.hpp b/include/picongpu/particles/ionization/byField/ADK/AlgorithmADK.hpp index 55a07008f7..e2355ab440 100644 --- a/include/picongpu/particles/ionization/byField/ADK/AlgorithmADK.hpp +++ b/include/picongpu/particles/ionization/byField/ADK/AlgorithmADK.hpp @@ -1,4 +1,4 @@ -/* Copyright 2015-2023 Marco Garten, Jakob Trojok +/* Copyright 2015-2023 Marco Garten, Jakob Trojok, Brian Marre * * This file is part of PIConGPU. * @@ -93,7 +93,8 @@ namespace picongpu /* effective principal quantum number (unitless) */ float_X const nEff = effectiveCharge / math::sqrt(float_X(2.0) * iEnergy); /* nameless variable for convenience dFromADK*/ - float_X const dBase = float_X(4.0) * util::cube(effectiveCharge) / (eInAU * util::quad(nEff)); + float_X const dBase = float_X(4.0) * math::exp(1._X) * util::cube(effectiveCharge) + / (eInAU * util::quad(nEff)); float_X const dFromADK = math::pow(dBase, nEff); /* ionization rate (for CIRCULAR polarization)*/ diff --git a/lib/python/picongpu/extra/utils/field_ionization.py b/lib/python/picongpu/extra/utils/field_ionization.py index 3c71fbf618..1abba9fb34 100755 --- a/lib/python/picongpu/extra/utils/field_ionization.py +++ b/lib/python/picongpu/extra/utils/field_ionization.py @@ -2,7 +2,7 @@ This file is part of the PIConGPU. Copyright 2019-2023 PIConGPU contributors -Authors: Marco Garten +Authors: Marco Garten, Brian Marre License: GPLv3+ """ @@ -93,7 +93,7 @@ def ADKRate(self, ) nEff = np.float64(self.n_eff(Z, E_Ip)) - D = ((4. * Z**3.) / (F * nEff**4.))**nEff + D = ((4. * np.exp(1.) * Z**3.) / (F * nEff**4.))**nEff rate = (F * D**2.) / (8. * np.pi * Z) \ * np.exp(-(2. * Z**3.) / (3. * nEff**3. * F))