Skip to content

Instantly share code, notes, and snippets.

@jamesmcm
Created October 16, 2012 15:13
Show Gist options
  • Save jamesmcm/3899876 to your computer and use it in GitHub Desktop.
Save jamesmcm/3899876 to your computer and use it in GitHub Desktop.
Failing Numerical Methods algorithm
PROGRAM RAND2
IMPLICIT NONE
REAL R
REAL ran2
R=ran2(65000)
WRITE(*,310) R
310 FORMAT(F6.6)
STOP
END
REAL FUNCTION ran2(idum)
IMPLICIT NONE
INTEGER idum,IM1,IM2,IMM1,IA1,IA2,IQ1,IQ2,IR1,IR2,NTAB,NDIV
REAL ran2,AM,EPS,RNMX
PARAMETER (IM1=2147483563,IM2=2147483399,
+ AM=1./IM1,IMM1=IM1-1, IA1=40014,IA2=40692,IQ1=53668,
+ IQ2=52774,IR1=12211, IR2=3791,NTAB=32,NDIV=1+IMM1/NTAB,
+ EPS=1.2e-7,RNMX=1.-EPS)
INTEGER idum2,j,k,iv(NTAB),iy
SAVE iv,iy,idum2
DATA idum2/123456789/, iv/NTAB*0/, iy/0/
if (idum.le.0) then
idum=max(-idum,1)
idum2=idum
do j=NTAB+8,1,-1
k=idum/IQ1
idum=IA1*(idum-k*IQ1)-k*IR1
if (idum.lt.0) idum=idum+IM1
if (j.le.NTAB) iv(j)=idum
enddo
iy=iv(1)
endif
k=idum/IQ1
WRITE(*,310) "IA1:",IA1," idum:", idum, " k:", k, " IQ1:",
+ IQ1, " IR1", IR1
310 FORMAT(A, I10, A, I10, A, I10, A, I10, A, I10)
idum=(IA1*(idum-k*IQ1))-(k*IR1)
WRITE(*,320) "CRASH JERE\n"
320 FORMAT(A)
if (idum.lt.0) idum=idum+IM1
k=idum2/IQ2
idum2=IA2*(idum2-k*IQ2)-k*IR2
if (idum2.lt.0) idum2=idum2+IM2
j=1+iy/NDIV
iy=iv(j)-idum2
iv(j)=idum
if(iy.lt.1)iy=iy+IMM1
ran2=min(AM*iy,RNMX)
return
END
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment