mtprng_init Subroutine

private subroutine mtprng_init(seed, state)

Initializes the generator with "seed"

Arguments

TypeIntentOptionalAttributesName
integer(kind=INT32), intent(in) :: seed
type(mtprng_state), intent(out) :: state

Called by

proc~~mtprng_init~~CalledByGraph proc~mtprng_init mtprng_init proc~mtprng_rand64 mtprng_rand64 proc~mtprng_rand64->proc~mtprng_init proc~generate_uuid generate_uuid proc~generate_uuid->proc~mtprng_init proc~generate_uuid->proc~mtprng_rand64

Contents

Source Code


Source Code

    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