whizard is hosted by Hepforge, IPPP Durham
• WHIZARD • HOME

• MANUAL, WIKI, NEWS

• SUBPACKAGES/INTERFACES

• CONTACT   # Chapter 6  Random number generators

## 6.1  General remarks

The random number generators (RNG) are one of the crucialer points of Monte Carlo calculations, hence, giving those their “randomness”. A decent multipurpose random generator covers

• reproducibility
• large period
• fast generation
• independence

of the random numbers. Therefore, special care is taken for the choice of the RNGs in WHIZARD. It is stated that WHIZARD utilizes pseudo-RNGs, which are based on one (or more) recursive algorithm(s) and start-seed(s) to have reproducible sequences of numbers. In contrast, a genuine random generator relies on physical processes.

WHIZARD ships with two completely different random number generators which can be selected by setting the SINDARIN option

 ``` \$rng_method = "rng_tao" ```

Although, WHIZARD sets a default seed, it is adviced to use a different one

 ``` seed = 175368842 ```

note that some RNGs do not allow certain seed values (e.g. zero seed).

## 6.2  The TAO Random Number Generator

The TAO (“The Art Of”) random number generator is a lagged Fibonacci generator based upon (signed) 32-bit integer arithmetic and was proposed by Donald E. Knuth and is implemented in the VAMP package. The TAO random number generator is the default RNG of WHIZARD, but can additionally be set as SINDARIN option

 ``` \$rng_method = rng_tao ```

The TAO random number generators is a subtractive lagged Fibonacci generator

 xj = ⎛ ⎝ xj−k − xj−L ⎞ ⎠ mod 230

with lags k = 100 and l = 37 and period length ρ = 230 − 2.

## 6.3  The RNGStream Generator

The RNGStream  was originally implemented in C++ with floating point arithmetic and has been ported to Fortran2003. The RNGstream can be selected by the SINDARIN option

 ``` \$rng_method = "rng_stream" ```

The RNGstream supports multiple independent streams and substreams of random numbers which can be directly accessed.

The main advantage of the RNGStream lies in the domain of parallelization where different worker have to access different parts of the random number stream to ensure numerical reproducibility. The RNGstream provides exactly this property with its (sub)stream-driven model.

Unfortunately, the RNGStream can only be used in combination with VAMP2.   