# NAG Library Function Document

## 1Purpose

nag_init_vavilov (g01zuc) is used to initialize functions nag_prob_vavilov (g01euc) and nag_prob_density_vavilov (g01muc).
It is intended to be used before a call to nag_prob_vavilov (g01euc) or nag_prob_density_vavilov (g01muc).

## 2Specification

 #include #include
 void nag_init_vavilov (double rkappa, double beta2, Integer mode, double *xl, double *xu, double comm_arr[], NagError *fail)

## 3Description

nag_init_vavilov (g01zuc) initializes the array comm_arr for use by nag_prob_vavilov (g01euc) or nag_prob_density_vavilov (g01muc) in the evaluation of the Vavilov functions ${\varphi }_{V}\left(\lambda \text{;}\kappa ,{\beta }^{2}\right)$ and ${\Phi }_{V}\left(\lambda \text{;}\kappa ,{\beta }^{2}\right)$ respectively.
Multiple calls to nag_prob_vavilov (g01euc) or nag_prob_density_vavilov (g01muc) can be made following a single call to nag_init_vavilov (g01zuc), provided that rkappa or beta2 do not change, and that either all calls are to nag_prob_vavilov (g01euc) or all calls are to nag_prob_density_vavilov (g01muc). If you wish to call both nag_prob_vavilov (g01euc) and nag_prob_density_vavilov (g01muc), then you will need to initialize both separately.

## 4References

Schorr B (1974) Programs for the Landau and the Vavilov distributions and the corresponding random numbers Comp. Phys. Comm. 7 215–224

## 5Arguments

1:    $\mathbf{rkappa}$doubleInput
On entry: the argument $\kappa$ of the function.
Constraint: $0.01\le {\mathbf{rkappa}}\le 10.0$.
2:    $\mathbf{beta2}$doubleInput
On entry: the argument ${\beta }^{2}$ of the function.
Constraint: $0.0\le {\mathbf{beta2}}\le 1.0$.
3:    $\mathbf{mode}$IntegerInput
On entry: if ${\mathbf{mode}}=0$, nag_prob_density_vavilov (g01muc) is to be called after the call to nag_init_vavilov (g01zuc). Otherwise, nag_prob_vavilov (g01euc) is to be called.
4:    $\mathbf{xl}$double *Output
On exit: ${x}_{l}$, a threshold value below which ${\varphi }_{V}\left(\lambda \text{;}\kappa ,{\beta }^{2}\right)$ will be set to zero by nag_prob_density_vavilov (g01muc) and ${\Phi }_{V}\left(\lambda \text{;}\kappa ,{\beta }^{2}\right)$ will be set to zero by nag_prob_vavilov (g01euc) if $\lambda <{x}_{l}$.
5:    $\mathbf{xu}$double *Output
On exit: ${x}_{u}$, a threshold value above which ${\varphi }_{V}\left(\lambda \text{;}\kappa ,{\beta }^{2}\right)$ will be set to zero by nag_prob_density_vavilov (g01muc) and ${\Phi }_{V}\left(\lambda \text{;}\kappa ,{\beta }^{2}\right)$ will be set to unity by nag_prob_vavilov (g01euc) if $\lambda >{x}_{u}$.
6:    $\mathbf{comm_arr}\left[322\right]$doubleCommunication Array
On exit: this argument should be passed unchanged to nag_prob_vavilov (g01euc) or nag_prob_density_vavilov (g01muc).
7:    $\mathbf{fail}$NagError *Input/Output
The NAG error argument (see Section 3.7 in How to Use the NAG Library and its Documentation).

## 6Error Indicators and Warnings

NE_ALLOC_FAIL
Dynamic memory allocation failed.
See Section 2.3.1.2 in How to Use the NAG Library and its Documentation for further information.
On entry, argument $〈\mathit{\text{value}}〉$ had an illegal value.
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 2.7.6 in How to Use the NAG Library and its Documentation for further information.
NE_NO_LICENCE
Your licence key may have expired or may not have been installed correctly.
See Section 2.7.5 in How to Use the NAG Library and its Documentation for further information.
NE_REAL
On entry, ${\mathbf{beta2}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{beta2}}\le 1.0$.
On entry, ${\mathbf{beta2}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{beta2}}\ge 0.0$.
On entry, ${\mathbf{rkappa}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{rkappa}}\le 10.0$.
On entry, ${\mathbf{rkappa}}=〈\mathit{\text{value}}〉$.
Constraint: ${\mathbf{rkappa}}\ge 0.01$.

## 7Accuracy

At least five significant digits are usually correct.

## 8Parallelism and Performance

nag_init_vavilov (g01zuc) is not threaded in any implementation.