jump Subroutine

private subroutine jump(self)

Type Bound

rng_t

Arguments

Type IntentOptional Attributes Name
class(rng_t), intent(inout) :: self

Calls

proc~~jump~~CallsGraph proc~jump rng_t%jump proc~next rng_t%next proc~jump->proc~next proc~rotl rotl proc~next->proc~rotl

Called by

proc~~jump~~CalledByGraph proc~jump rng_t%jump proc~init_parallel prng_t%init_parallel proc~init_parallel->proc~jump proc~set_seed rng_t%set_seed proc~set_seed->proc~jump proc~particle_base_init particle_base_init proc~particle_base_init->proc~set_seed proc~particles_init particles_init proc~particles_init->proc~particle_base_init

Source Code

  subroutine jump(self)
    class(rng_t), intent(inout) :: self
    integer                     :: i, b
    integer(i8)                 :: global_time(2), dummy

    ! The signed equivalent of the unsigned constants
    integer(i8), parameter      :: jmp_c(2) = (/-4707382666127344949_i8,&
        -2852180941702784734_i8/)

    global_time = 0
    do i = 1, 2
       do b = 0, 63
          if (iand(jmp_c(i), shiftl(1_i8, b)) /= 0) then
             global_time = ieor(global_time, self%s)
          end if
          dummy = self%next()
       end do
    end do

    self%s = global_time
  end subroutine jump