NAG FL Interfaces15ddf (erfc_​complex)

▸▿ Contents

Settings help

FL Name Style:

FL Specification Language:

1Purpose

s15ddf computes values of the function $w\left(z\right)={e}^{-{z}^{2}}\mathrm{erfc}\left(-iz\right)$, for complex $z$.

2Specification

Fortran Interface
 Function s15ddf ( z,
 Complex (Kind=nag_wp) :: s15ddf Integer, Intent (Inout) :: ifail Complex (Kind=nag_wp), Intent (In) :: z
#include <nag.h>
 Complex s15ddf_ (const Complex *z, Integer *ifail)
The routine may be called by the names s15ddf or nagf_specfun_erfc_complex.

3Description

s15ddf computes values of the function $w\left(z\right)={e}^{-{z}^{2}}\mathrm{erfc}\left(-iz\right)$, where $\mathrm{erfc}\left(z\right)$ is the complementary error function
 $erfc(z) = 2π ∫z∞ e-t2 dt ,$
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.

4References

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 error-like functions CWI Tract 10 Centre for Mathematics and Computer Science, Amsterdam

5Arguments

1: $\mathbf{z}$Complex (Kind=nag_wp) Input
On entry: the argument $z$ of the function.
2: $\mathbf{ifail}$Integer Input/Output
On entry: ifail must be set to $0$, $-1$ or $1$ to set behaviour on detection of an error; these values have no effect when no error is detected.
A value of $0$ causes the printing of an error message and program execution will be halted; otherwise program execution continues. A value of $-1$ means that an error message is printed while a value of $1$ means that it is not.
If halting is not appropriate, the value $-1$ or $1$ is recommended. If message printing is undesirable, then the value $1$ is recommended. Otherwise, the value $0$ is recommended. When the value $-\mathbf{1}$ 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).

6Error Indicators and Warnings

If on entry ${\mathbf{ifail}}=0$ or $-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$
Real part of result overflows when entered with argument ${\mathbf{z}}=\left(⟨\mathit{\text{value}}⟩,⟨\mathit{\text{value}}⟩\right)$.
${\mathbf{ifail}}=2$
Imaginary part of result overflows when entered with argument ${\mathbf{z}}=\left(⟨\mathit{\text{value}}⟩,⟨\mathit{\text{value}}⟩\right)$.
${\mathbf{ifail}}=3$
Both real and imaginary parts of result overflow when entered with argument ${\mathbf{z}}=\left(⟨\mathit{\text{value}}⟩,⟨\mathit{\text{value}}⟩\right)$.
${\mathbf{ifail}}=4$
Result has less than half precision when entered with argument ${\mathbf{z}}=\left(⟨\mathit{\text{value}}⟩,⟨\mathit{\text{value}}⟩\right)$.
${\mathbf{ifail}}=5$
Result has no precision when entered with argument ${\mathbf{z}}=\left(⟨\mathit{\text{value}}⟩,⟨\mathit{\text{value}}⟩\right)$.
${\mathbf{ifail}}=-99$
See Section 7 in the Introduction to the NAG Library FL Interface for further information.
${\mathbf{ifail}}=-399$
Your licence key may have expired or may not have been installed correctly.
See Section 8 in the Introduction to the NAG Library FL Interface for further information.
${\mathbf{ifail}}=-999$
Dynamic memory allocation failed.
See Section 9 in the Introduction to the NAG Library FL Interface for further information.

7Accuracy

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 half-plane, one or both parts of the result may overflow – this is signalled through ${\mathbf{ifail}}={\mathbf{1}}$, ${\mathbf{2}}$ or ${\mathbf{3}}$.

8Parallelism and Performance

s15ddf is not threaded in any implementation.

The time taken for a call of s15ddf depends on the argument $z$, the time increasing as $|z|\to 0.0$.
s15ddf may be used to compute values of $\mathrm{erfc}\left(z\right)$ and $\mathrm{erf}z$ for complex $z$ by the relations $\mathrm{erfc}\left(z\right)={e}^{-{z}^{2}}w\left(iz\right)$, $\mathrm{erf}z=1-\mathrm{erfc}\left(z\right)$. (For real arguments, s15adf and s15aef should be used.)

10Example

This example reads values of the argument $z$ from a file, evaluates the function at each value of $z$ and prints the results.

10.1Program Text

Program Text (s15ddfe.f90)

10.2Program Data

Program Data (s15ddfe.d)

10.3Program Results

Program Results (s15ddfe.r)