Initializes the generator with "seed"
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| integer(kind=INT32), | intent(in) | :: | seed | |||
| type(mtprng_state), | intent(out) | :: | state |
subroutine mtprng_init(seed, state)
!! Initializes the generator with "seed"
integer(INT32), intent(in) :: seed
type(mtprng_state), intent(out) :: state
integer :: i !! working storage
! save seed
state%mt(0) = seed
! Set the seed using values suggested by Matsumoto & Nishimura, using
! a generator by Knuth. See original source for details.
do i = 1, mtprng_N - 1
state%mt(i) = iand(4294967295_INT64,1812433253_INT64 * ieor(state%mt(i-1),ishft(state%mt(i-1),-30_INT64)) + i)
end do
state%mti = mtprng_N
end subroutine mtprng_init