8 dimension seeds(24), iseeds(24)
9 parameter(maxlev=4, lxdflt=3)
10 dimension ndskip(0:maxlev)
12 parameter(twop12=4096., igiga=1000000000, jsdflt=314159265)
13 parameter(itwo24=2**24, icons=2147483563)
14 save notyet, i24, j24, carry, seeds, twom24, twom12,
luxlev 15 save nskip, ndskip, in24, next, kount, mkount, inseed
18 data notyet,
luxlev, in24, kount, mkount/.true., lxdflt, 0, 0, 0/
19 data i24, j24, carry/24, 10, 0./
22 data ndskip/0, 24, 73, 199, 365/
28 subroutine ranlux(RVEC, LENV)
83 write (6,
'(A,I12)')
' RANLUX DEFAULT INITIALIZATION: ', jseed
90 write (6,
'(A,I2,A,I4)')
' RANLUX DEFAULT LUXURY LEVEL = ', &
96 jseed = 40014 * (jseed - k * 53668) - k * 12211
97 if (jseed .lt. 0) jseed = jseed + icons
98 iseeds(i) = mod(jseed, itwo24)
100 twom12 = twom24 * 4096.
102 seeds(i) =
real(ISEEDS(I)) * TWOM24
109 if (abs(seeds(24)) .lt. tiny(seeds)) carry = twom24
116 do 100 ivec = 1, lenv
117 uni = seeds(j24) - seeds(i24) - carry
118 if (uni .lt. 0.)
then 129 if (uni .lt. twom12)
then 130 rvec(ivec) = rvec(ivec) + twom24 * seeds(j24)
132 if (abs(rvec(ivec)) .lt. tiny(rvec)) rvec(ivec) = twom24 * twom24
136 if (in24 .eq. 24)
then 138 kount = kount + nskip
140 uni = seeds(j24) - seeds(i24) - carry
141 if (uni .lt. 0.)
then 154 if (kount .ge. igiga)
then 156 kount = kount - igiga
175 twom24 = twom24 * 0.5
178 twom12 = twom24 * 4096.
179 write (6,
'(A)')
' FULL INITIALIZATION OF RANLUX WITH 25 INTEGERS:' 180 write (6,
'(5X,5I12)') isdext
182 seeds(i) =
real(ISDEXT(I)) * TWOM24
185 if (isdext(25) .lt. 0) carry = twom24
186 isd = iabs(isdext(25))
194 if (
luxlev .le. maxlev)
then 196 write (6,
'(A,I2)')
' RANLUX LUXURY LEVEL SET BY RLUXIN TO: ', &
198 else if (
luxlev .ge. 24)
then 200 write (6,
'(A,I5)')
' RANLUX P-VALUE SET BY RLUXIN TO:',
luxlev 202 nskip = ndskip(maxlev)
203 write (6,
'(A,I5)')
' RANLUX ILLEGAL LUXURY RLUXIN: ',
luxlev 213 isdext(i) = int(seeds(i) * twop12 * twop12)
215 isdext(25) = i24 + 100 * j24 + 10000 * in24 + 1000000 *
luxlev 216 if (carry .gt. 0.) isdext(25) = -isdext(25)
220 subroutine rluxat(LOUT, INOUT, K1, K2)
228 subroutine rluxgo(LUX, INS, K1, K2)
231 else if (lux .le. maxlev)
then 233 else if (lux .lt. 24 .or. lux .gt. 2000)
then 235 write (6,
'(A,I7)')
' RANLUX ILLEGAL LUXURY RLUXGO: ', lux
238 do 310 ilx = 0, maxlev
239 if (lux .eq. ndskip(ilx) + 24)
luxlev = ilx
242 if (
luxlev .le. maxlev)
then 248 write (6,
'(A,I5)')
' RANLUX P-VALUE SET BY RLUXGO TO:',
luxlev 251 if (ins .lt. 0)
write (6,
'(A)')
' Illegal initialization by RLUXGO, negative input seed' 258 write (6,
'(A)')
' RANLUX INITIALIZED BY RLUXGO FROM DEFAULT SEED' 264 twom24 = twom24 * 0.5
266 jseed = 40014 * (jseed - k * 53668) - k * 12211
267 if (jseed .lt. 0) jseed = jseed + icons
268 iseeds(i) = mod(jseed, itwo24)
270 twom12 = twom24 * 4096.
272 seeds(i) =
real(ISEEDS(I)) * TWOM24
279 if (abs(seeds(24)) .lt. tiny(seeds)) carry = twom24
285 if (k1 + k2 .ne. 0)
then 286 do 500 iouter = 1, k2 + 1
288 if (iouter .eq. k2 + 1) inner = k1
289 do 450 isk = 1, inner
290 uni = seeds(j24) - seeds(i24) - carry
291 if (uni .lt. 0.)
then 303 in24 = mod(kount, nskip + 24)
304 if (mkount .gt. 0)
then 305 izip = mod(igiga, nskip + 24)
306 izip2 = mkount * izip + in24
307 in24 = mod(izip2, nskip + 24)
310 if (in24 .gt. 23)
then 311 write (6,
'(A/A,3I11,A,I5)')
' Error in RESTARTING with RLUXGO:',&
312 &
' The values', ins, k1, k2,
' cannot occur at luxury level',
luxlev
subroutine, public rluxgo(LUX, INS, K1, K2)
subroutine rluxat(LOUT, INOUT, K1, K2)
subroutine rluxut(ISDEXT)
subroutine, public ranlux(RVEC, LENV)
subroutine rluxin(ISDEXT)