ITS.Propagation.LFMF 1.1
Part of the NTIA/ITS Propagation Library
|
Implements a function to calculate Airy functions and their derivatives. More...
Functions | |
std::complex< double > | ITS::Propagation::LFMF::Airy (const std::complex< double > Z, const AiryKind kind, const AiryScaling scaling) |
Finds the functions and their derivatives for Airy functions of the first, second, and third (following Hufford) kind. | |
Implements a function to calculate Airy functions and their derivatives.
std::complex< double > ITS::Propagation::LFMF::Airy | ( | const std::complex< double > | Z, |
const AiryKind | kind, | ||
const AiryScaling | scaling ) |
Finds the functions and their derivatives for Airy functions of the first, second, and third (following Hufford) kind.
The function accepts a complex input argument and computes the result from a shifted Taylor series or by asymptotic approximation depending of the location of the input argument.
This routine determines the so-called "Airy Functions of the third kind" \( Wi(1) \) and \( Wi(2) \) that are found in equation 38 of NTIA Report 87-219 "A General Theory of Radio Propagation through a Stratified Atmosphere", George Hufford, July 1987.
The Airy function that appeared in the original FORTRAN GWINT
and GWRES
implementations had the switches all mangled from what George Hufford had in mind. This routine has the corrected switches. Please see the Airy function code that appears in the appendix of OT/ITS RR 11 "A Wave Hop Propagation
Program for an Anisotropic Ionosphere" L. A. Berry and J. E. Herman, April 1971.
[in] | Z | Complex input argument |
[in] | kind | The type of Airy function to solve |
[in] | scaling | Type of scaling to use (HUFFORD or WAIT ) when solving Airy functions of the third kind. This parameter is ignored for AIRY , AIRYD , BAIRY , and BAIRYD values of kind . |
std::invalid_argument | If the values provided for kind or scaling are not valid for this function. This includes when scaling NONE is provided for Airy functions of the third kind. |
std::range_error | If the calculation requires expansion data outside the range of what is known by this program. |
There is a definitional problem with the Airy function which is inevitable relative to how it was defined in the original LFMF code originated with the Hufford's AIRY
subroutine.
Using the scaling equal to HUFFORD
in this program follows the definitions of \( \mathrm{Wi}^{(1)} \) and \( \mathrm{Wi}^{(2)} \) as defined by Hufford (87-219).
Using the scaling equal to WAIT
in this program uses the definitions of \( W_1 \) and \( W_2 \) defined in DeMinco (99-368) and in the original LFMF code following Berry via Wait.
The two solutions differ by a constant. As Hufford notes concerning \( \mathrm{Wi}^{(1)} \) and \( \mathrm{Wi}^{(2)} \) in 87-219:
"Except for multiplicative constants they correspond to what Fock (1965) calls W1 and W2 and to what Wait (1962) calls W2 and W1.
The following are the multiplicative constants that allow for the translation between Hufford \( \mathrm{Wi}^{(1)} \) and \( \mathrm{Wi}^{(2)} \) with Wait \( w_1 \) and \( w_2 \), respectively. These are given here as a reference if this function is used for programs other than LFMF.
To make the solutions that are generated by this program for the Hufford Airy functions of the "3rd kind" abundantly clear please examine the following examples.
For \( z = 8.0 + 8.0i \) the Asymptotic Solution is used.
For \( z = 1.0 - 2.0i \) the Taylor series with a shifted center of expansion solution is used.