initiate RNG state with reproducible state
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in), | optional | :: | input_seed(:) |
input seed |
|
logical, | intent(in), | optional | :: | fwd |
boolean that if True runs the generator for 100 steps before returning |
subroutine init_rng(input_seed, fwd) !! initiate RNG state with reproducible state !> input seed integer, optional, intent(IN) :: input_seed(:) !> boolean that if True runs the generator for 100 steps before returning logical, optional, intent(IN) :: fwd integer, allocatable :: seed(:) integer :: n, i logical :: ffwd real(kind=wp) :: a call random_seed(size=n) allocate(seed(n)) if(present(input_seed))then seed = 0 seed = input_seed else seed = 1234567 end if if(present(fwd))then ffwd = fwd else ffwd = .false. end if call random_seed(put=seed) !fast forward rng state 100 times to avoid any potential bad seeds if(ffwd)then call random_seed(get=seed) do i = 1, 100 a = ran2() call random_seed(get=seed) end do end if end subroutine init_rng