NAG Library Routine Document
S15DDF
1 Purpose
S15DDF computes values of the function $w\left(z\right)={e}^{{z}^{2}}\mathrm{erfc}\left(iz\right)$, for
complex
$z$.
2 Specification
COMPLEX (KIND=nag_wp) S15DDF 
INTEGER 
IFAIL 
COMPLEX (KIND=nag_wp) 
Z 

3 Description
S15DDF computes values of the function
$w\left(z\right)={e}^{{z}^{2}}\mathrm{erfc}\left(iz\right)$, where
$\mathrm{erfc}z$ is the complementary error function
for
complex
$z$. The method used is that in
Gautschi (1970) for
$z$ in the first quadrant of the complex plane, and is extended for
$z$ in other quadrants via the relations
$w\left(z\right)=2{e}^{{z}^{2}}w\left(z\right)$ and
$w\left(\overline{z}\right)=\overline{w\left(z\right)}$. Following advice in
Gautschi (1970) and
van der Laan and Temme (1984), the code in
Gautschi (1969) has been adapted to work in various precisions up to
$18$ decimal places. The real part of
$w\left(z\right)$ is sometimes known as the Voigt function.
4 References
Gautschi W (1969) Algorithm 363: Complex error function Comm. ACM 12 635
Gautschi W (1970) Efficient computation of the complex error function SIAM J. Numer. Anal. 7 187–198
van der Laan C G and Temme N M (1984) Calculation of special functions: the gamma function, the exponential integrals and errorlike functions CWI Tract 10 Centre for Mathematics and Computer Science, Amsterdam
5 Parameters
 1: Z – COMPLEX (KIND=nag_wp)Input
On entry: the argument $z$ of the function.
 2: IFAIL – INTEGERInput/Output

On entry:
IFAIL must be set to
$0$,
$1\text{ or}1$. If you are unfamiliar with this parameter you should refer to
Section 3.3 in the Essential Introduction for details.
For environments where it might be inappropriate to halt program execution when an error is detected, the value
$1\text{ or}1$ is recommended. If the output of error messages is undesirable, then the value
$1$ is recommended. Otherwise, if you are not familiar with this parameter, the recommended value is
$0$.
When the value $\mathbf{1}\text{ or}\mathbf{1}$ is used it is essential to test the value of IFAIL on exit.
On exit:
${\mathbf{IFAIL}}={\mathbf{0}}$ unless the routine detects an error or a warning has been flagged (see
Section 6).
6 Error Indicators and Warnings
If on entry
${\mathbf{IFAIL}}={\mathbf{0}}$ or
${{\mathbf{1}}}$, explanatory error messages are output on the current error message unit (as defined by
X04AAF).
Errors or warnings detected by the routine:
 ${\mathbf{IFAIL}}=1$

The real part of the result overflows, and is set to the largest safe number with the correct sign. The imaginary part of the result is meaningful.
 ${\mathbf{IFAIL}}=2$

The imaginary part of the result overflows, and is set to the largest safe number with the correct sign. The real part of the result is meaningful.
 ${\mathbf{IFAIL}}=3$

Both real and imaginary parts of the result overflow, and are set to the largest safe number with the correct signs.
 ${\mathbf{IFAIL}}=4$
The result returned is accurate to less than half precision, due to the size of an intermediate result.
 ${\mathbf{IFAIL}}=5$
The result returned has no precision, due to the size of an intermediate result, and is set to zero.
7 Accuracy
The accuracy of the returned result depends on the argument
$z$. If
$z$ lies in the first or second quadrant of the complex plane (i.e.,
$\mathrm{Im}\left(z\right)$ is greater than or equal to zero), the result should be accurate almost to
machine precision, except that there is a limit of about
$18$ decimal places on the achievable accuracy because constants in the routine are given to this precision. With such arguments,
IFAIL can only return as
${\mathbf{IFAIL}}={\mathbf{0}}$.
If however $\mathrm{Im}\left(z\right)$ is less than zero, accuracy may be lost in two ways; firstly, in the evaluation of ${e}^{{z}^{2}}$, if $\mathrm{Im}\left({z}^{2}\right)$ is large, in which case a warning will be issued through ${\mathbf{IFAIL}}={\mathbf{4}}$ or ${\mathbf{5}}$; and secondly, near the zeros of the required function, where precision is lost due to cancellation, in which case no warning is given – the result has absolute accuracy rather than relative accuracy. Note also that in this halfplane, one or both parts of the result may overflow – this is signalled through ${\mathbf{IFAIL}}={\mathbf{1}}$, ${\mathbf{2}}$ or ${\mathbf{3}}$.
The time taken for a call of S15DDF depends on the argument $z$, the time increasing as $\leftz\right\to 0.0$.
S15DDF may be used to compute values of
$\mathrm{erfc}z$ and
$\mathrm{erf}z$ for
complex
$z$ by the relations
$\mathrm{erfc}z={e}^{{z}^{2}}w\left(iz\right)$,
$\mathrm{erf}z=1\mathrm{erfc}z$. (For real arguments,
S15ADF and
S15AEF should be used.)
9 Example
This example reads values of the argument $z$ from a file, evaluates the function at each value of $z$ and prints the results.
9.1 Program Text
Program Text (s15ddfe.f90)
9.2 Program Data
Program Data (s15ddfe.d)
9.3 Program Results
Program Results (s15ddfe.r)