s19ad returns a value for the Kelvin function $\mathrm{kei} x$.

# Syntax

C#
```public static double s19ad(
double x,
out int ifail
)```
Visual Basic
```Public Shared Function s19ad ( _
x As Double, _
<OutAttribute> ByRef ifail As Integer _
) As Double```
Visual C++
```public:
double x,
[OutAttribute] int% ifail
)```
F#
```static member s19ad :
x : float *
ifail : int byref -> float
```

#### Parameters

x
Type: System..::..Double
On entry: the argument $x$ of the function.
Constraint: ${\mathbf{x}}\ge 0.0$.
ifail
Type: System..::..Int32%
On exit: ${\mathbf{ifail}}={0}$ unless the method detects an error or a warning has been flagged (see [Error Indicators and Warnings]).

#### Return Value

s19ad returns a value for the Kelvin function $\mathrm{kei} x$.

# Description

s19ad evaluates an approximation to the Kelvin function $\mathrm{kei} x$.
Note:  for $x<0$ the function is undefined, so we need only consider $x\ge 0$.
The method is based on several Chebyshev expansions:
For $0\le x\le 1$,
 $kei x=-π4ft+x24-gtlogx+vt$
where $f\left(t\right)$, $g\left(t\right)$ and $v\left(t\right)$ are expansions in the variable $t=2{x}^{4}-1$;
For $1,
 $kei x=exp-98xut$
where $u\left(t\right)$ is an expansion in the variable $t=x-2$;
For $x>3$,
 $kei x=π2xe-x/21+1xctsin β+1xdtcos β$
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$.
For $x<0$, the function is undefined, and hence the method fails and returns zero.
When $x$ is sufficiently close to zero, the result is computed as
 $kei x=-π4+1-γ-logx2x24$
and when $x$ is even closer to zero simply as
 $kei x=-π4.$
For large $x$, $\mathrm{kei} 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 method fails.

# References

Abramowitz M and Stegun I A (1972) Handbook of Mathematical Functions (3rd Edition) Dover Publications

# Error Indicators and Warnings

Errors or warnings detected by the method:
${\mathbf{ifail}}=1$
On entry, x is too large: the result underflows. On failure, the method returns zero. See also the Users' Note for your implementation.
${\mathbf{ifail}}=2$
On entry, ${\mathbf{x}}<0.0$: the function is undefined. On failure the method returns zero.
${\mathbf{ifail}}=-9000$
An error occured, see message report.

# Accuracy

Let $E$ be the absolute error in the result, and $\delta$ be the relative error in the argument. If $\delta$ is somewhat larger than the machine representation error, then we have:
 $E≃x2-ker1 x+kei1 xδ.$
For small $x$, errors are attenuated 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 absolute accuracy of 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{kei} x$, which is asymptotically given by $\sqrt{\frac{\pi }{2x}}{e}^{-x/\sqrt{2}}$,becomes so small that it cannot be calculated without causing underflow and therefore the method returns zero. Note that for large $x$, the errors are dominated by those of the standard function exp.

# Parallelism and Performance

None.

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

# Example

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