-ccccccccccccccccccccccccccccccccccccccccccccccccc
- FUNCTION ran0(idum)
- INTEGER idum,IA,IM,IQ,IR,MASK
- REAL ran0,AM
- PARAMETER (IA=16807,IM=2147483647,AM=1./IM,IQ=127773,IR=2836,
- *MASK=123459876)
- INTEGER k
- idum=ieor(idum,MASK)
- k=idum/IQ
- idum=IA*(idum-k*IQ)-IR*k
- if (idum.lt.0) idum=idum+IM
- ran0=AM*idum
- idum=ieor(idum,MASK)
- return
- END
-C (C) Copr. 1986-92 Numerical Recipes Software *11915
-ccccccccccccccccccccccccccccccccccccccccccccccccc
- FUNCTION ran1(idum)
- INTEGER idum,IA,IM,IQ,IR,NTAB,NDIV
- REAL ran1,AM,EPS,RNMX
- PARAMETER (IA=16807,IM=2147483647,AM=1./IM,IQ=127773,IR=2836,
- *NTAB=32,NDIV=1+(IM-1)/NTAB,EPS=1.2e-7,RNMX=1.-EPS)
- INTEGER j,k,iv(NTAB),iy
- SAVE iv,iy
- DATA iv /NTAB*0/, iy /0/
- if (idum.le.0.or.iy.eq.0) then
- idum=max(-idum,1)
- do 11 j=NTAB+8,1,-1
- k=idum/IQ
- idum=IA*(idum-k*IQ)-IR*k
- if (idum.lt.0) idum=idum+IM
- if (j.le.NTAB) iv(j)=idum
-11 continue
- iy=iv(1)
- endif
- k=idum/IQ
- idum=IA*(idum-k*IQ)-IR*k
- if (idum.lt.0) idum=idum+IM
- j=1+iy/NDIV
- iy=iv(j)
- iv(j)=idum
- ran1=min(AM*iy,RNMX)
- return
- END
-C (C) Copr. 1986-92 Numerical Recipes Software *11915
-ccccccccccccccccccccccccccccccccccccccccccccccccc
- FUNCTION ran2(idum)
- 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 11 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
-11 continue
- iy=iv(1)
- endif
- k=idum/IQ1
- idum=IA1*(idum-k*IQ1)-k*IR1
- 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
-C (C) Copr. 1986-92 Numerical Recipes Software *11915
-ccccccccccccccccccccccccccccccccccccccccccccccccc
- FUNCTION ran3(idum)
- INTEGER idum
- INTEGER MBIG,MSEED,MZ
-C REAL MBIG,MSEED,MZ
- REAL ran3,FAC
- PARAMETER (MBIG=1000000000,MSEED=161803398,MZ=0,FAC=1./MBIG)
-C PARAMETER (MBIG=4000000.,MSEED=1618033.,MZ=0.,FAC=1./MBIG)
- INTEGER i,iff,ii,inext,inextp,k
- INTEGER mj,mk,ma(55)
-C REAL mj,mk,ma(55)
- SAVE iff,inext,inextp,ma
- DATA iff /0/
- if(idum.lt.0.or.iff.eq.0)then
- iff=1
- mj=MSEED-iabs(idum)
- mj=mod(mj,MBIG)
- ma(55)=mj
- mk=1
- do 11 i=1,54
- ii=mod(21*i,55)
- ma(ii)=mk
- mk=mj-mk
- if(mk.lt.MZ)mk=mk+MBIG
- mj=ma(ii)
-11 continue
- do 13 k=1,4
- do 12 i=1,55
- ma(i)=ma(i)-ma(1+mod(i+30,55))
- if(ma(i).lt.MZ)ma(i)=ma(i)+MBIG
-12 continue
-13 continue
- inext=0
- inextp=31
- idum=1
- endif
- inext=inext+1
- if(inext.eq.56)inext=1
- inextp=inextp+1
- if(inextp.eq.56)inextp=1
- mj=ma(inext)-ma(inextp)
- if(mj.lt.MZ)mj=mj+MBIG
- ma(inext)=mj
- ran3=mj*FAC
- return
- END
-C (C) Copr. 1986-92 Numerical Recipes Software *11915
-ccccccccccccccccccccccccccccccccccccccccccccccccc