c MISC.f - random number routines c function IRAN(IPPP) include 'common.f' integer ippp,itmp c integer iran,irqq,idum c save idum c returns a randomly distributed integer on [1..irqq] c c iran=1+int(float(irqq)*ran1()) 10 rtemp=ran1(iisave) c if(rtemp.gt.1.) stop 'RTEMP>1' c write(*,*) 'IRAN: ',rtemp itmp=1.0+float(ippp)*rtemp if(itmp.gt.ippp) goto 10 iran=itmp return end c c function ran1(idum) c c this is RAN2 from Numerical Recipes, Press et al. c include 'common.f' c integer idum,ia1,ia2,im1,im2,imm1,iq1,iq2,ir1,ir2,ntab,ndiv c real ran1,am,eps,rnmx c parameter (ia=16807,im=2147483647,am=1./im,iq=127773,ir=2836, c & ntab=32,ndiv=1+(im-1)/ntab,eps=1.2e-7,rnmx=1.-eps) c parameter (ia1=40014,im1=2147483563,am=1./im1,iq=127773,ir=2836, c & imm1=im1-1,ntab=32,ndiv=1+imm1/ntab,eps=1.2e-7,rnmx=1.-eps c & ,ia2=40692,iq1=53668,iq2=52774,ir1=12211 c & ,ir2=3791,im2=2147483399) c integer idum2,j,k,iv(ntab),iy c save iv,iy,idum2 data idum2/123456789/, iv /ntab*0/, iy /0/ if(idum.le.0) then write(*,*) 'Initializing RAN1, IDUM=',idum idum=max(-idum,1) idum2=idum do 11, j=ntab+8,1,-1 k=idum/iq1 idum=ia1*(idum-k*iq1)-ir1*k 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)-ir1*k 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 ran1=am*iy c c I actually want the endpoint values! c c ran1=min(am*iy,rnmx) return end c c IRAN : Generates a random integer uniformly distributed on [1,j]. c -------------------------------------------------------------- c copyright 1992 Elizabeth A. Holm c c function iran(j) c include 'common.f' c integer j c iran=int(rand(0)*j)+1 c end c c DRAN : Returns a random, double precision real on [0,j]. c -------------------------------------------------------------- c copyright 1992 Elizabeth A. Holm c function dran(jss) include 'common.f' double precision jss c integer idum c save idum dran=1.d0*ran1(iisave)*jss c edited for Dec alpha, ix96 adr end c function drand(dummy) c double precision drand include 'common.f' integer dummy drand=1.d0*ran1(iisave) c change to RAN1 for Dec alphas return end c DRAN : Returns a random, double precision real on [0,j]. c -------------------------------------------------------------- c copyright 1992 Elizabeth A. Holm c c function dran(j) c include 'common.f' c double precision j c dran=1.d0*drand(0)*j c end