NAG Library Routine Document
d01jaf (md_sphere_bad)
1
Purpose
d01jaf attempts to evaluate an integral over an $n$dimensional sphere ($n=2$, $3$, or $4$), to a userspecified absolute or relative accuracy, by means of a modified Sag–Szekeres method. The routine can handle singularities on the surface or at the centre of the sphere, and returns an error estimate.
2
Specification
Fortran Interface
Subroutine d01jaf ( 
f, ndim, radius, epsa, epsr, method, icoord, result, esterr, nevals, ifail) 
Integer, Intent (In)  ::  ndim, method, icoord  Integer, Intent (Inout)  ::  ifail  Integer, Intent (Out)  ::  nevals  Real (Kind=nag_wp), External  ::  f  Real (Kind=nag_wp), Intent (In)  ::  radius, epsa, epsr  Real (Kind=nag_wp), Intent (Out)  ::  result, esterr 

C Header Interface
#include nagmk26.h
void 
d01jaf_ ( double (NAG_CALL *f)(const Integer *ndim, const double x[]), const Integer *ndim, const double *radius, const double *epsa, const double *epsr, const Integer *method, const Integer *icoord, double *result, double *esterr, Integer *nevals, Integer *ifail) 

3
Description
d01jaf calculates an approximation to the
$n$dimensional integral
where
$S$ is the hypersphere
(the integrand function may also be defined in spherical coordinates). The algorithm is based on the Sag–Szekeres method (see
Sag and Szekeres (1964)), applying the product trapezoidal formula after a suitable radial transformation. An improved transformation technique is developed: depending on the behaviour of the function and on the required accuracy, different transformations can be used, some of which are ‘double exponential’, as defined by
Takahasi and Mori (1974). The resulting technique allows the routine to deal with integrand singularities on the surface or at the centre of the sphere. When the estimated error of the approximation with mesh size
$h$ is larger than the tolerated error, the trapezoidal formula with mesh size
$h/2$ is calculated. A drawback of this method is the exponential growth of the number of function evaluations in the successive approximations (this number grows with a factor
$\text{}\approx {2}^{n}$). This introduces the restriction
$n\le 4$. Because the convergence rate of the successive approximations is normally better than linear, the error estimate is based on the linear extrapolation of the difference between the successive approximations (see
Robinson and de Doncker (1981) and
Roose and de Doncker (1981)). For further details of the algorithm, see
Roose and de Doncker (1981).
4
References
Robinson I and de Doncker E (1981) Automatic computation of improper integrals over a bounded or unbounded planar region Computing 27 89–284
Roose D and de Doncker E (1981) Automatic integration over a sphere J. Comput. Appl. Math. 7 203–224
Sag T W and Szekeres G (1964) Numerical evaluation of highdimensional integrals Math. Comput. 18 245–253
Takahasi H and Mori M (1974) Double Exponential Formulas for Numerical Integration 9 Publ. RIMS, Kyoto University 721–741
5
Arguments
 1: $\mathbf{f}$ – real (Kind=nag_wp) Function, supplied by the user.External Procedure

f must return the value of the integrand
$f$ at a given point.
The specification of
f is:
Fortran Interface
Real (Kind=nag_wp)  ::  f  Integer, Intent (In)  ::  ndim  Real (Kind=nag_wp), Intent (In)  ::  x(ndim) 

C Header Interface
#include nagmk26.h
double 
f (const Integer *ndim, const double x[]) 

 1: $\mathbf{ndim}$ – IntegerInput

On entry: $n$, the number of dimensions of the integral.
 2: $\mathbf{x}\left({\mathbf{ndim}}\right)$ – Real (Kind=nag_wp) arrayInput

On entry: the coordinates of the point at which the integrand
$f$ must be evaluated. These coordinates are given in Cartesian or spherical polar form according to the value of
icoord.
f must either be a module subprogram USEd by, or declared as EXTERNAL in, the (sub)program from which
d01jaf is called. Arguments denoted as
Input must
not be changed by this procedure.
Note: f should not return floatingpoint NaN (Not a Number) or infinity values, since these are not handled by
d01jaf. If your code inadvertently
does return any NaNs or infinities,
d01jaf is likely to produce unexpected results.
 2: $\mathbf{ndim}$ – IntegerInput

On entry: $n$, the dimension of the sphere.
Constraint:
$2\le {\mathbf{ndim}}\le 4$.
 3: $\mathbf{radius}$ – Real (Kind=nag_wp)Input

On entry: $\alpha $, the radius of the sphere.
Constraint:
${\mathbf{radius}}\ge 0.0$.
 4: $\mathbf{epsa}$ – Real (Kind=nag_wp)Input

On entry: the requested absolute tolerance. If
${\mathbf{epsa}}<0.0$, its absolute value is used. See
Section 7.
 5: $\mathbf{epsr}$ – Real (Kind=nag_wp)Input

On entry: the requested relative tolerance.
 ${\mathbf{epsr}}<0.0$
 Its absolute value is used.
 ${\mathbf{epsr}}<10\times \left(\mathit{machineprecision}\right)$
 The latter value is used as epsr by the routine. See Section 7.
 6: $\mathbf{method}$ – IntegerInput

On entry: must specify the transformation to be used by the routine. The choice depends on the behaviour of the integrand and on the required accuracy.
For wellbehaved functions and functions with mild singularities on the surface of the sphere only:
 ${\mathbf{method}}=1$
 Low accuracy required.
 ${\mathbf{method}}=2$
 High accuracy required.
For functions with severe singularities on the surface of the sphere only:
 ${\mathbf{method}}=3$
 Low accuracy required.
 ${\mathbf{method}}=4$
 High accuracy required.
(in this case
icoord must be set to
${\mathbf{icoord}}=2$, and the function defined in special spherical coordinates).
For functions with a singularity at the centre of the sphere (and possibly with singularities on the surface as well):
 ${\mathbf{method}}=5$
 Low accuracy required.
 ${\mathbf{method}}=6$
 High accuracy required.
${\mathbf{method}}=0$ can be used as a default value and is equivalent to:
 ${\mathbf{method}}=1$ if ${\mathbf{epsr}}>{10}^{6}$, and
 ${\mathbf{method}}=2$ if ${\mathbf{epsr}}\le {10}^{6}$.
The distinction between low and high required accuracies, as mentioned above, depends also on the behaviour of the function. Roughly one may assume the critical value of
epsa and
epsr to be
${10}^{6}$, but the critical value will be smaller for a wellbehaved integrand and larger for an integrand with severe singularities.
Suggested value:
${\mathbf{method}}=0$.
Constraint:
${\mathbf{method}}=0$,
$1$,
$2$,
$3$,
$4$,
$5$ or
$6$.
If ${\mathbf{icoord}}=2$, ${\mathbf{method}}=3$ or $4$
 7: $\mathbf{icoord}$ – IntegerInput

On entry: must specify which kind of coordinates are used in
f.
 ${\mathbf{icoord}}=0$
 Cartesian coordinates
${x}_{\mathit{i}}$, for $\mathit{i}=1,2,\dots ,n$.
 ${\mathbf{icoord}}=1$
 Spherical coordinates (see Section 9.2): ${\mathbf{x}}\left(1\right)=\rho $;
${\mathbf{x}}\left(\mathit{i}\right)={\theta}_{\mathit{i}1}$, for $\mathit{i}=2,3,\dots ,n$.
 ${\mathbf{icoord}}=2$,
 Special spherical polar coordinates (see Section 9.3), with the additional transformation $\rho =\alpha \lambda $: ${\mathbf{x}}\left(1\right)=\lambda =\alpha \rho $;
${\mathbf{x}}\left(\mathit{i}\right)={\theta}_{\mathit{i}1}$, for $\mathit{i}=2,3,\dots ,n$.
Constraint:
${\mathbf{icoord}}=0$,
$1$ or
$2$.
If ${\mathbf{method}}=3$ or $4$, ${\mathbf{icoord}}=2$
 8: $\mathbf{result}$ – Real (Kind=nag_wp)Output

On exit: the approximation to the integral $I$.
 9: $\mathbf{esterr}$ – Real (Kind=nag_wp)Output

On exit: an estimate of the modulus of the absolute error.
 10: $\mathbf{nevals}$ – IntegerOutput

On exit: the number of function evaluations used.
 11: $\mathbf{ifail}$ – IntegerInput/Output

On entry:
ifail must be set to
$0$,
$1\text{ 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\text{ or}1$ is recommended. If the output of error messages is undesirable, then the value
$1$ is recommended. Otherwise, because for this routine the values of the output arguments may be useful even if
${\mathbf{ifail}}\ne {\mathbf{0}}$ on exit, the recommended value is
$1$.
When the value $\mathbf{1}\text{ or}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}}=0$ or
$1$, explanatory error messages are output on the current error message unit (as defined by
x04aaf).
Note: d01jaf may return useful information for one or more of the following detected errors or warnings.
Errors or warnings detected by the routine:
 ${\mathbf{ifail}}=1$

The required accuracy cannot be achieved within a limiting number of function evaluations (which is set by the routine).
 ${\mathbf{ifail}}=2$

The required accuracy cannot be achieved because of roundoff error.
 ${\mathbf{ifail}}=3$

The required accuracy cannot be achieved because the maximum accuracy with respect to the machine constants
x02ajf and
x02amf has been attained. If this maximum accuracy is rather low (compared with
x02ajf), the cause of the problem is a severe singularity on the boundary or at the centre of the sphere. If
${\mathbf{method}}=0$,
$1$ or
$2$, setting
${\mathbf{method}}=3$ or
$4$ may help.
 ${\mathbf{ifail}}=4$

On entry,  ${\mathbf{ndim}}<2$ or ${\mathbf{ndim}}>4$, 
or  ${\mathbf{radius}}<0.0$, 
or  ${\mathbf{method}}\ne 0$, $1$, $2$, $3$, $4$, $5$ or $6$, 
or  ${\mathbf{icoord}}\ne 0$, $1$ or $2$, 
or  ${\mathbf{icoord}}=2$ and ${\mathbf{method}}\ne 3$ or $4$, 
or  ${\mathbf{method}}=3$ or $4$ and ${\mathbf{icoord}}\ne 2$. 
No calculations have been performed.
result and
esterr are set to
$0.0$.
 ${\mathbf{ifail}}=99$
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.
 ${\mathbf{ifail}}=399$
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.
 ${\mathbf{ifail}}=999$
Dynamic memory allocation failed.
See
Section 3.7 in How to Use the NAG Library and its Documentation for further information.
7
Accuracy
You can specify an absolute and/or a relative tolerance, setting
epsa and
epsr. The routine attempts to calculate an approximation
result such that
If
$0\le {\mathbf{ifail}}\le 3$,
esterr returns an estimate of, but not necessarily a bound for,
$\leftI{\mathbf{result}}\right$.
8
Parallelism and Performance
d01jaf is not threaded in any implementation.
Timing depends on the integrand and the accuracy required.
Cartesian coordinates are related to the spherical polar coordinates by:
where
$0<{\theta}_{\mathit{i}}<\pi $, for
$\mathit{i}=1,2,\dots ,n2$ and
$0<{\theta}_{n1}<2\pi $.
As a consequence of the transformation technique, the severity of the singularities which can be handled by d01jaf depends on the precision and range of real numbers on the machine. ${\mathbf{method}}=3$ or $4$ must be used when the singularity on the surface is ‘severe’ in view of the requested accuracy and machine precision. In practice one has to set ${\mathbf{method}}=3$ or $4$ if d01jaf terminates with ${\mathbf{ifail}}={\mathbf{3}}$ when called with ${\mathbf{method}}=0$, $1$ or $2$.
When integrating a function with a severe singular behaviour on the surface of the sphere, the additional transformation $\rho =\alpha \lambda $ helps to avoid the loss of significant figures due to roundoff error in the calculation of the integration nodes which are very close to the surface. For these points, the value of $\lambda $ can be computed more accurately than the value of $\rho $. Naturally, care must be taken that the function subprogram does not contain expressions of the form $\alpha \lambda $, which could cause a large roundoff error in the calculation of the integrand at the boundary of the sphere.
Care should be taken to avoid underflow and/or overflow problems in the function subprogram, because some of the integration nodes used by d01jaf may be very close to the surface or to the centre of the sphere.
Example:
Note that d01jaf ensures that $\lambda ={\mathbf{x}}\left(1\right)>{\mathbf{x02amf}}$, but underflow could occur in the computation of ${\lambda}^{2}$.
10
Example
This example evaluates the integrals
where
$\rho =\sqrt{{\displaystyle \sum _{i=1}^{n}}{x}_{i}^{2}}$, and
$S$ is the unit sphere of dimension
$n=2\text{ or}4$.
The exact values (to $12$ decimal places) are $6.28318530718$ and $13.1594725348$.
10.1
Program Text
Program Text (d01jafe.f90)
10.2
Program Data
None.
10.3
Program Results
Program Results (d01jafe.r)