function ran1(idum) c "Minimal" random number generator of Park and Miller with Bays-Durham c shuffle and added safeguards. Returns a uniform random deviate between c 0.0 and 1.0 (exclusive of the endpoint values). Call with idum a c negative integer to initialize; THEREAFTER, DO NOT ALTER idum BETWEEN c SUCCESSIVE DEVIATES IN A SEQUENCE. RNMX should approximate the largest c floating value that is less than 1. c c William H. Press and Saul A. Teukolsky c c C. Hummel: added common iran, to keep track of function calls c common/random/iran c 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 iran=0 idum=max(-idum,1) do 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 enddo 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) c iran=iran+1 c return end