NCEPLIBS-w3emc 2.12.0
|
This module calculates random numbers using the Mersenne twister. More...
Data Types | |
interface | random_gauss |
interface | random_index |
interface | random_number |
interface | random_setseed |
type | random_stat |
Functions/Subroutines | |
real function, public | random_gauss_f () |
Generates Gaussian random numbers in functional mode. | |
integer function, public | random_index_f (imax) |
Generates random indices in functional mode. | |
real function, public | random_number_f () |
Generates random numbers in functional mode. | |
subroutine, public | random_seed (size, put, get, stat) |
Sets and gets state; overloads Fortran 90 standard. | |
Variables | |
type(random_stat), save | sstat |
This module calculates random numbers using the Mersenne twister.
(It has been adapted to a Fortran 90 module from open source software. The comments from the original software are given below in the remarks.)
The Mersenne twister (aka MT19937) is a state-of-the-art random number generator based on Mersenne primes and originally developed in 1997 by Matsumoto and Nishimura. It has a period before repeating of 2^19937-1, which certainly should be good enough for geophysical purposes.
Considering the algorithm's robustness, it runs fairly speedily. (Some timing statistics are given below in the remarks.)
This adaptation uses the standard Fortran 90 random number interface, which can generate an arbitrary number of random numbers at one time. The random numbers generated are uniformly distributed between 0 and 1.
The module also can generate random numbers from a Gaussian distribution with mean 0 and standard deviation 1, using a Numerical Recipes algorithm.
The module also can generate uniformly random integer indices. There are also thread-safe versions of the generators in this adaptation, necessitating the passing of generator states which must be kept private.
Usage:
Public Defined Types:
real function, public mersenne_twister::random_gauss_f |
Generates Gaussian random numbers in functional mode.
Definition at line 334 of file mersenne_twister.f.
integer function, public mersenne_twister::random_index_f | ( | integer, intent(in) | imax | ) |
Generates random indices in functional mode.
[in] | imax | Integer maximum index input |
Definition at line 440 of file mersenne_twister.f.
real function, public mersenne_twister::random_number_f |
Generates random numbers in functional mode.
Definition at line 250 of file mersenne_twister.f.
subroutine, public mersenne_twister::random_seed | ( | integer, intent(out), optional | size, |
integer, dimension(nrest), intent(in), optional | put, | ||
integer, dimension(nrest), intent(out), optional | get, | ||
type(random_stat), intent(inout), optional | stat | ||
) |
Sets and gets state; overloads Fortran 90 standard.
[out] | size | Optional integer output size of seed array. |
[in] | put | Optional integer(:) input seed array. |
[out] | get | Optional integer(:) output seed array. |
[in,out] | stat | Optional type(random_stat) (thread-safe mode). |
Definition at line 158 of file mersenne_twister.f.
type(random_stat), save mersenne_twister::sstat |
Definition at line 127 of file mersenne_twister.f.