SUBROUTINE ran0_s(harvest) USE nrtype USE ran_state, ONLY: K4B,amm,lenran,ran_init,iran0,jran0,kran0,nran0,rans IMPLICIT NONE REAL(SP), INTENT(OUT) :: harvest if (lenran < 1) call ran_init(1) rans=iran0-kran0 if (rans < 0) rans=rans+2147483579_k4b iran0=jran0 jran0=kran0 kran0=rans nran0=ieor(nran0,ishft(nran0,13)) nran0=ieor(nran0,ishft(nran0,-17)) nran0=ieor(nran0,ishft(nran0,5)) rans=ieor(nran0,rans) harvest=amm*merge(rans,not(rans), rans<0 ) END SUBROUTINE ran0_s SUBROUTINE ran0_v(harvest) USE nrtype USE ran_state, ONLY: K4B,amm,lenran,ran_init,iran,jran,kran,nran,ranv IMPLICIT NONE REAL(SP), DIMENSION(:), INTENT(OUT) :: harvest INTEGER(K4B) :: n n=size(harvest) if (lenran < n+1) call ran_init(n+1) ranv(1:n)=iran(1:n)-kran(1:n) where (ranv(1:n) < 0) ranv(1:n)=ranv(1:n)+2147483579_k4b iran(1:n)=jran(1:n) jran(1:n)=kran(1:n) kran(1:n)=ranv(1:n) nran(1:n)=ieor(nran(1:n),ishft(nran(1:n),13)) nran(1:n)=ieor(nran(1:n),ishft(nran(1:n),-17)) nran(1:n)=ieor(nran(1:n),ishft(nran(1:n),5)) ranv(1:n)=ieor(nran(1:n),ranv(1:n)) harvest=amm*merge(ranv(1:n),not(ranv(1:n)), ranv(1:n)<0 ) END SUBROUTINE ran0_v