mtprng_init Subroutine

public subroutine mtprng_init(seed, state)

NAME

mtprng_init(3f) - [M_random:MERSENNE TWISTER] Initialize the Mersenne Twister random number generator with "seed"
(LICENSE:CUSTOM OPEN)

SYNOPSIS

subroutine mtprng_init(seed, state)
integer(INT32),     intent(in)  :: seed
type(mtprng_state), intent(out) :: state

DESCRIPTION

Initializes the Mersenne Twister random number generator with "seed"

OPTIONS

seed   A seed value is used to start a specific sequence of pseudo-random numbers
state  generator state initialized by mtprng_init(3f) or mtprng_init_array(3f)

EXAMPLE

Sample program:

program demo_mtprng_init
use M_random, only : mtprng_state, mtprng_init, mtprng_rand64
use, intrinsic :: iso_fortran_env, only : int32, int64
implicit none
integer(INT32) :: seed
type(mtprng_state) :: state
   GET_SEED: block
   integer :: count
   integer :: count_rate
      call system_clock(count, count_rate)
      seed=count
   endblock GET_SEED
  call mtprng_init(seed, state)
  ! returns a INT64 integer with a range in 0 .. 2^32-1
  write(*,*) mtprng_rand64(state)
end program demo_mtprng_init

Sample Results:

  867010878

Arguments

Type IntentOptional Attributes Name
integer(kind=INT32), intent(in) :: seed
type(mtprng_state), intent(out) :: state

Source Code

subroutine mtprng_init(seed, state)

! ident_8="@(#) M_random mtprng_int(3f) Initializes the Mersenne Twister random number generator with "seed""

! arguments
integer(INT32),     intent(in)  :: seed
type(mtprng_state), intent(out) :: state
   ! working storage
   integer :: i
   ! 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, N - 1
      state%mt(i) = iand(4294967295_INT64,1812433253_INT64 * ieor(state%mt(i-1),ishft(state%mt(i-1),-30_INT64)) + i)
   enddo

   state%mti = N

end subroutine mtprng_init