NAG CL Interface
s15drc (erfc_​complex_​vector)

Settings help

CL Name Style:


1 Purpose

s15drc computes values of the function w(z)=e-z2erfc(-iz), for an array of Complex values z.

2 Specification

#include <nag.h>
void  s15drc (Integer n, const Complex z[], Complex f[], Integer ivalid[], NagError *fail)
The function may be called by the names: s15drc, nag_specfun_erfc_complex_vector or nag_complex_erfc_vector.

3 Description

s15drc computes values of the function w(zi)=e-zi2erfc(-izi), for i=1,2,,n, where erfc(zi) 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(-z)=2e-z2-w(z) and w(z¯)=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 w(z) 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 error-like functions CWI Tract 10 Centre for Mathematics and Computer Science, Amsterdam

5 Arguments

1: n Integer Input
On entry: n, the number of points.
Constraint: n0.
2: z[n] const Complex Input
On entry: the argument zi of the function, for i=1,2,,n.
3: f[n] Complex Output
On exit: w(zi)=e-zi2, the function values.
4: ivalid[n] Integer Output
On exit: ivalid[i-1] contains the error code for zi, for i=1,2,,n.
ivalid[i-1]=0
No error.
ivalid[i-1]=1
Real part of result overflows.
ivalid[i-1]=2
Imaginary part of result overflows.
ivalid[i-1]=3
Both real and imaginary part of result overflows.
ivalid[i-1]=4
Result has less than half precision.
ivalid[i-1]=5
Result has no precision.
5: fail NagError * Input/Output
The NAG error argument (see Section 7 in the Introduction to the NAG Library CL Interface).

6 Error Indicators and Warnings

NE_ALLOC_FAIL
Dynamic memory allocation failed.
See Section 3.1.2 in the Introduction to the NAG Library CL Interface for further information.
NE_BAD_PARAM
On entry, argument value had an illegal value.
NE_INT
On entry, n=value.
Constraint: n0.
NE_INTERNAL_ERROR
An internal error has occurred in this function. Check the function call and any array sizes. If the call is correct then please contact NAG for assistance.
See Section 7.5 in the Introduction to the NAG Library CL Interface for further information.
NE_NO_LICENCE
Your licence key may have expired or may not have been installed correctly.
See Section 8 in the Introduction to the NAG Library CL Interface for further information.
NW_IVALID
On entry, at least one value of z produced a result with reduced accuracy.
Check ivalid for more information.

7 Accuracy

The accuracy of the returned result depends on the argument zi. If zi lies in the first or second quadrant of the complex plane (i.e., Im(zi) 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 function are given to this precision. With such arguments, ivalid[i-1] can only return as ivalid[i-1]=0.
If however, Im(zi) is less than zero, accuracy may be lost in two ways; firstly, in the evaluation of e-zi2, if Im(-zi2) is large, in which case a warning will be issued through ivalid[i-1]=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 ivalid[i-1]=1, 2 or 3.

8 Parallelism and Performance

s15drc is not threaded in any implementation.

9 Further Comments

The time taken for a call of s15drc depends on the argument zi, the time increasing as |zi|0.0.
s15drc may be used to compute values of erfc(zi) and erfzi for Complex zi by the relations erfc(zi)=e-zi2w(izi), erfzi=1-erfc(zi). (For double arguments, s15arc and s15asc should be used.)

10 Example

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

10.1 Program Text

Program Text (s15drce.c)

10.2 Program Data

Program Data (s15drce.d)

10.3 Program Results

Program Results (s15drce.r)