39 INTEGER,
INTENT(IN) :: n
40 REAL,
INTENT(OUT) :: a(*)
41 INTEGER,
PARAMETER :: nb=511
42 INTEGER,
PARAMETER :: ia=16807
43 INTEGER,
PARAMETER :: im=2147483647
44 INTEGER,
PARAMETER :: iq=127773
45 INTEGER,
PARAMETER :: ir=2836
46 REAL,
PARAMETER :: aeps=1.0e-10
47 REAL,
PARAMETER :: scalin=4.6566125e-10
48 common/ranbuf/mbuff(0:nb),ian,ic,iboost
52 irotor(m,n)=ieor(ior(ishft(m,17),ishft(m,-15)),n)
53 DATA istart/0/,iwarm/10/,iseed/4711/
54 IF(istart /= 0) go to 20
55 WRITE(*,*)
' Automatic GBRSHI initialization using:'
58 WRITE(*,*)
' ISEED=',iseed,
' IWARM=',iwarm
61 idum=ia*(idum-k*iq)-ir*k
62 IF(idum < 0) idum=idum+im
63 mbuff(j)=ishft(idum,1)
70 mbuff(ian)=irotor(it,ic)
72 ian=iand(it+iboost,nb)
80 mbuff(ian)=irotor(it,ic)
82 ian=iand(it+iboost,nb)
83 a(i)=float(ishft(it,-1))*scalin+aeps
86 iboost=iand(iboost,nb)
89 entry gbrvin(jseed,jwarm)
91 WRITE(*,*)
' Gbrshi initialization by GBRVIN-call using:'
109 WRITE(*,*)
' Gbrshi initialialization using Time()'
110 CALL gbrvin(jseed,10)
127 indx=mod(indx,ndim)+1
128 IF(indx == 1) CALL
gbrshi(ndim,buffer)
150 DATA indx/ndim/,kn/1/
151 SAVE indx,buffer,kn,cs,al
155 10 indx=mod(indx,ndim)+2
156 IF(indx == 2) CALL
gbrshi(ndim,buffer)
157 rn1=buffer(indx-1)-1.0+buffer(indx-1)
158 rn2=buffer(indx )-1.0+buffer(indx)
159 radsq=rn1*rn1+rn2*rn2
160 IF(radsq > 1.0) go to 10
165 al=sqrt(-2.0*alog(radsq))