C C $Id: random.F,v 1.4 1998/07/16 16:40:25 jjv5 Exp arjan $ C C------------------------------------------------------------------------ C this file contains random number generators CCC----------------------------------------------------------CCC FUNCTION xrandom(idum) C C random number generator, taken from Numerical Recipes C returns a random between 0.0 and 1.0 C INTEGER idum,IA,IM,IQ,IR,NTAB,NDIV double precision xrandom,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 xrandom=min(AM*iy,RNMX) return END C (C) Copr. 1986-92 Numerical Recipes Software +). CCC------------------------------------------------------------CCC FUNCTION irandom(idum,imax) C C random number generator, adapted from Numerical Recipes C returns a random between 1.0 and imax C INTEGER irandom,idum,imax,IA,IM,IQ,IR,NTAB,NDIV double precision xr,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 xr=min(AM*iy,RNMX) irandom=xr*imax+1 return END C adapted from Numerical Recipes C (C) Copr. 1986-92 Numerical Recipes Software +). CCC------------------------------------------------------------------CCC function grandom(idum, var) C generates a random number from a gaussian distribution C with zero mean and variance var implicit double precision(a-h,o-z) parameter (a1=3.949846138) parameter (a3=0.252408784) parameter (a5=0.076542912) parameter (a7=0.008355968) parameter (a9=0.029899776) sum = 0.0 do i=1,12 sum = sum + xrandom(idum) enddo sum = 0.25*(sum-6.0) sum2 = sum*sum x = ((((a9*sum2+a7)*sum2+a5)*sum2+a3)*sum2+a1)*sum grandom = x*var return end CCC------------------------------------------------------------------CCC