Kielkopf algorithm for the calculation of the Voigt profile

The usage of the Kielkopf (Ref. 1) and other "closed-form expresions" for the Voigt function (see Ref. 2, and the Introduction in Ref. 3) are not recommended due to their low accuracy (see Ref. 4) but can be useful for evaluation purposes where high calculation precision is not required and higher calculation speed is preferable.

The description below outilnes the steps to implement the Kielkopf algorithm (Ref. 1) using the nonation given by Schreier (see Ref. 2 and the Appendix in Ref. 5).   If this approximation is used in conjunction with the HITRAN database simulations, the preceding calculation steps can be found at this link.

The Voigt profile function in the Kielkopf algorithm approximation may be written (Ref. 2 and the Appendix in Ref. 5) as follows:

$$ Voigt(x,y) = K(x,y) = K(0, y) \cdot \left[ \left( 1 - \eta(y) \right) \cdot G(x) + \eta(y) \cdot L(x) \right] $$

and with an additional correction term this becomes

$$ Voigt(x,y) = K(x, y) + C(x, y) $$

where according to the Appendix in Ref. 5  $G(x)$ and $L(x)$ are

$$ G(x) = exp \left( - \sqrt{ln(2)} \cdot \left( \frac {x}{x_{h}} \right)^{2} \right) ; \qquad L(x) = \left( 1 + \left( \frac {x}{x_{h}} \right)^{2} \right)^{-1} $$

the correction term $C(x)$ according to Ref. 2, Equation 17 is

$$ C(x) = \eta \left( 1 - \eta \right) \cdot \left( G(x) - L(x) \right) \cdot \frac{k_{1} + k_{2}x^{2}}{1 + k_{3}x^{2} + k_{4}x^{4}} $$

where (see the Appendix to Ref. 2)

$$ k_{1} = 0.8029; \qquad k_{2} = -0.4207 $$ $$ k_{3} = 0.2030; \qquad k_{4} = 0.07335 $$

and (see Ref. 2 or the Appendix in Ref. 5)

$$ \eta = \eta(y) = \frac{y \cdot x_{h}}{1 + y \cdot x_{h}} $$ $$ x_{h} = \frac{y}{2} \cdot \left(1 + \epsilon \cdot ln(2) + \sqrt{ \left( 1 - \epsilon \cdot ln(2) \right)^{2} + 4 \cdot \frac{ln(2)}{y^{2}} } \right) $$ $$ \epsilon = 0.0990 $$

please note that in the equation for $x_{h}$ the last $y$ in the denominator is squared in Ref. 2 as opposed to the Appendix in Ref. 5 where it is not which apparently was a typo.

According to Equation 2 in Ref. 2 the $K(0, y)$ term in the Voigt function may be further repesented as follows

$$ K(0, y) = exp(y^{2}) \cdot \left( 1 - erf(y) \right) $$

where $ erf(y) $ is the error function which may be numerically approximated with elementary functions.  The Kielkopf algorithm is stated to have an accuracy of 0.0001, as such the approximation formula with a maximum stated error of 1.5x10-7 can be used (see this link)

$$ erf(y) \approx 1 - \left( a_{1}t + a_{2}t^{2} + ... + a_{5}t^{5} \right) \cdot e^{-y^{2}} ; \qquad t = \frac{1}{1 + p \cdot y} $$

where

$$ a_{1} = 0.254829592 \qquad a_{2} = −0.284496736 \qquad a_{3} = 1.421413741 $$ $$ a_{4} = −1.453152027 \qquad a_{5} = 1.061405429 \qquad p = 0.3275911 $$

which after substitution into the equation for $K(0, y)$ results in the cancelation of the exponential term to become

$$ K(0, y) = a_{1}t + a_{2}t^{2} + ... + a_{5}t^{5}; \qquad t = \frac{1}{1 + p \cdot y} $$

The $x$ and $y$ in the above equations (if used in spectroscopy i.e. HITRAN database calculations, see this link) are

$$ x = \frac { \sqrt{ln(2)} \cdot (\nu - \nu_{ij}^{*}) }{ \alpha_{doppler} } ; \qquad y = \frac { \sqrt{ln(2)} \cdot \gamma }{ \alpha_{doppler} } $$

where $\alpha_{doppler}$ is the Doppler half width at half maximum (HWHM), $\gamma$ is the Lorentz HWHM, $ \nu$ is the wavenumber to perform the calculation for, and $ \nu_{ij}^{*}$ is the pressure-shifted spectral line center.


References
1)   John F. Kielkopf, "New approximation to the Voigt function with applications to spectral-line profile analysis", J. Opt. Soc. Am. 63, 987-995 (1973),  https://doi.org/10.1364/JOSA.63.000987

2)   Franz Schreier, "Notes: An assessment of some closed-form expressions for the Voigt function III: Combinations of the Lorentz and Gauss functions", Journal of Quantitative Spectroscopy and Radiative Transfer, Volume 226, Pages 87-91, March 2019,  https://arxiv.org/abs/1901.08366

3)   Franz Schreier, "An assessment of some closed-form expressions for the Voigt function", Journal of Quantitative Spectroscopy and Radiative Transfer, Volume 176, Pages 1-5, June 2016,  https://elib.dlr.de/103264/

4)   Franz Schreier, "Comments on the Voigt function implementation in the Astropy and SpectraPlot.com packages", Journal of Quantitative Spectroscopy and Radiative Transfer, Volume 213, Pages 13-16, July 2018,  https://arxiv.org/abs/1806.10338

5)   F. Schreier, "The Voigt and complex error function: A comparison of computational methods", Journal of Quantitative Spectroscopy and Radiative Transfer, Volume 48, Issues 5–6, Pages 743-762, November–December 1992,  https://doi.org/10.1016/0022-4073(92)90139-U

www.bytran.org -|- 2019     To report a bug or suggest a feature please email us:  bytran@bytran.org