# NAG FL Interfaces19acf (kelvin_​ker)

## ▸▿ Contents

Settings help

FL Name Style:

FL Specification Language:

## 1Purpose

s19acf returns a value for the Kelvin function $\mathrm{ker}x$, via the function name.

## 2Specification

Fortran Interface
 Function s19acf ( x,
 Real (Kind=nag_wp) :: s19acf Integer, Intent (Inout) :: ifail Real (Kind=nag_wp), Intent (In) :: x
#include <nag.h>
 double s19acf_ (const double *x, Integer *ifail)
The routine may be called by the names s19acf or nagf_specfun_kelvin_ker.

## 3Description

s19acf evaluates an approximation to the Kelvin function $\mathrm{ker}x$.
Note:  for $x<0$ the function is undefined and at $x=0$ it is infinite so we need only consider $x>0$.
The routine is based on several Chebyshev expansions:
For $0,
 $ker⁡x=-f(t)log(x)+π16x2g(t)+y(t)$
where $f\left(t\right)$, $g\left(t\right)$ and $y\left(t\right)$ are expansions in the variable $t=2{x}^{4}-1$.
For $1,
 $ker⁡x=exp(-1116x) q(t)$
where $q\left(t\right)$ is an expansion in the variable $t=x-2$.
For $x>3$,
 $ker⁡x=π 2x e-x/2 [(1+1xc(t))cos⁡β-1xd(t)sin⁡β]$
where $\beta =\frac{x}{\sqrt{2}}+\frac{\pi }{8}$, and $c\left(t\right)$ and $d\left(t\right)$ are expansions in the variable $t=\frac{6}{x}-1$.
When $x$ is sufficiently close to zero, the result is computed as
 $ker⁡x=-γ-log(x2)+(π-38x2) x216$
and when $x$ is even closer to zero, simply as $\mathrm{ker}x=-\gamma -\mathrm{log}\left(\frac{x}{2}\right)$.
For large $x$, $\mathrm{ker}x$ is asymptotically given by $\sqrt{\frac{\pi }{2x}}{e}^{-x/\sqrt{2}}$ and this becomes so small that it cannot be computed without underflow and the routine fails.

## 4References

NIST Digital Library of Mathematical Functions

## 5Arguments

1: $\mathbf{x}$Real (Kind=nag_wp) Input
On entry: the argument $x$ of the function.
Constraint: ${\mathbf{x}}>0.0$.
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$
On entry, ${\mathbf{x}}=⟨\mathit{\text{value}}⟩$. The function returns zero.
Constraint: ${\mathbf{x}}\le ⟨\mathit{\text{value}}⟩$.
x is too large, the result underflows and the function returns zero.
${\mathbf{ifail}}=2$
On entry, ${\mathbf{x}}=⟨\mathit{\text{value}}⟩$.
Constraint: ${\mathbf{x}}>0.0$.
The function is undefined and returns zero.
${\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

Let $E$ be the absolute error in the result, $\epsilon$ be the relative error in the result and $\delta$ be the relative error in the argument. If $\delta$ is somewhat larger than the machine precision, then we have:
 $E≃ |x2(ker1⁡x+kei1⁡x)|δ,$
 $ε ≃ |x2 ker1⁡x + kei1⁡x ker⁡x | δ.$
For very small $x$, the relative error amplification factor is approximately given by $\frac{1}{|\mathrm{log}\left(x\right)|}$, which implies a strong attenuation of relative error. However, $\epsilon$ in general cannot be less than the machine precision.
For small $x$, errors are damped by the function and hence are limited by the machine precision.
For medium and large $x$, the error behaviour, like the function itself, is oscillatory, and hence only the absolute accuracy for the function can be maintained. For this range of $x$, the amplitude of the absolute error decays like $\sqrt{\frac{\pi x}{2}}{e}^{-x/\sqrt{2}}$ which implies a strong attenuation of error. Eventually, $\mathrm{ker}x$, which asymptotically behaves like $\sqrt{\frac{\pi }{2x}}{e}^{-x/\sqrt{2}}$, becomes so small that it cannot be calculated without causing underflow, and the routine returns zero. Note that for large $x$ the errors are dominated by those of the standard function exp.

## 8Parallelism and Performance

s19acf is not threaded in any implementation.

Underflow may occur for a few values of $x$ close to the zeros of $\mathrm{ker}x$, below the limit which causes a failure with ${\mathbf{ifail}}={\mathbf{1}}$.

## 10Example

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

### 10.1Program Text

Program Text (s19acfe.f90)

### 10.2Program Data

Program Data (s19acfe.d)

### 10.3Program Results

Program Results (s19acfe.r)