NAG Library Routine Document

s15ddf (erfc_complex)


s15ddf computes values of the function wz=e-z2erfc-iz, for complex z.


Fortran Interface
Function s15ddf ( z, ifail)
Complex (Kind=nag_wp):: s15ddf
Integer, Intent (Inout):: ifail
Complex (Kind=nag_wp), Intent (In):: z
C Header Interface
#include <nagmk26.h>
Complex  s15ddf_ (const Complex *z, Integer *ifail)


s15ddf computes values of the function wz=e-z2erfc-iz, where erfcz is the complementary error function
erfcz = 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-z=2e-z2-wz and wz¯=w-z¯. 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 wz is sometimes known as the Voigt function.


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


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 or 1. If you are unfamiliar with this argument you should refer to Section 3.4 in How to Use the NAG Library and its Documentation for details.
For environments where it might be inappropriate to halt program execution when an error is detected, the value -1 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 argument, the recommended value is 0. When the value -1 or 1 is used it is essential to test the value of ifail on exit.
On exit: ifail=0 unless the routine detects an error or a warning has been flagged (see Section 6).

Error Indicators and Warnings

If on entry 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:
Real part of result overflows when entered with argument z=value,value.
Imaginary part of result overflows when entered with argument z=value,value.
Both real and imaginary parts of result overflow when entered with argument z=value,value.
Result has less than half precision when entered with argument z=value,value.
Result has no precision when entered with argument z=value,value.
An unexpected error has been triggered by this routine. Please contact NAG.
See Section 3.9 in How to Use the NAG Library and its Documentation for further information.
Your licence key may have expired or may not have been installed correctly.
See Section 3.8 in How to Use the NAG Library and its Documentation for further information.
Dynamic memory allocation failed.
See Section 3.7 in How to Use the NAG Library and its Documentation for further information.


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., Imz 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 ifail=0.
If however, Imz is less than zero, accuracy may be lost in two ways; firstly, in the evaluation of e-z2, if Im-z2 is large, in which case a warning will be issued through ifail=4 or 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 ifail=1, 2 or 3.

Parallelism and Performance

s15ddf is not threaded in any implementation.

Further Comments

The time taken for a call of s15ddf depends on the argument z, the time increasing as z0.0.
s15ddf may be used to compute values of erfcz and erfz for complex z by the relations erfcz=e-z2wiz, erfz=1-erfcz. (For real arguments, s15adf and s15aef should be used.)


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

Program Text

Program Text (s15ddfe.f90)

Program Data

Program Data (s15ddfe.d)

Program Results

Program Results (s15ddfe.r)