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 |
| Generator state. More... | |
Functions/Subroutines | |
| subroutine, public | random_seed (size, put, get, stat) |
| This subroutine sets and gets state; overloads Fortran 90 standard. | |
| real(kind_dbl_prec) function, public | random_number_f () |
| This function generates random numbers in functional mode. | |
| real(kind_dbl_prec) function, public | random_gauss_f () |
| This subrouitne generates Gaussian random numbers in functional mode. | |
| integer function, public | random_index_f (imax) |
| This subroutine generates random indices in functional mode. | |
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.
| real(kind_dbl_prec) function, public mersenne_twister::random_gauss_f |
This subrouitne generates Gaussian random numbers in functional mode.
Definition at line 375 of file mersenne_twister.f.
| integer function, public mersenne_twister::random_index_f | ( | integer, intent(in) | imax | ) |
This subroutine generates random indices in functional mode.
Definition at line 458 of file mersenne_twister.f.
| real(kind_dbl_prec) function, public mersenne_twister::random_number_f |
This function generates random numbers in functional mode.
Definition at line 302 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 | ||
| ) |
This subroutine sets and gets state; overloads Fortran 90 standard.
Definition at line 220 of file mersenne_twister.f.
| type(random_stat), save mersenne_twister::sstat |
Definition at line 195 of file mersenne_twister.f.