1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
|
SUBROUTINE inrgcm()
C**********************************************************************
C
C SUBROUTINE INRGCM()
C INitialize Random number Generator CoMmon
C
C
C Function
C
C
C Initializes common area for random number generator. This saves
C the nuisance of a BLOCK DATA routine and the difficulty of
C assuring that the routine is loaded with the other routines.
C
C**********************************************************************
C .. Parameters ..
INTEGER numg
PARAMETER (numg=32)
C ..
C .. Scalars in Common ..
INTEGER a1,a1vw,a1w,a2,a2vw,a2w,m1,m2
C ..
C .. Arrays in Common ..
INTEGER cg1(numg),cg2(numg),ig1(numg),ig2(numg),lg1(numg),
+ lg2(numg)
LOGICAL qanti(numg)
C ..
C .. Local Scalars ..
INTEGER i
LOGICAL qdum
C ..
C .. External Functions ..
LOGICAL qrgnsn
EXTERNAL qrgnsn
C ..
C .. Common blocks ..
COMMON /globe/m1,m2,a1,a2,a1w,a2w,a1vw,a2vw,ig1,ig2,lg1,lg2,cg1,
+ cg2,qanti
C ..
C .. Save statement ..
SAVE /globe/
C ..
C .. Executable Statements ..
C V=20; W=30;
C
C A1W = MOD(A1**(2**W),M1) A2W = MOD(A2**(2**W),M2)
C A1VW = MOD(A1**(2**(V+W)),M1) A2VW = MOD(A2**(2**(V+W)),M2)
C
C If V or W is changed A1W, A2W, A1VW, and A2VW need to be recomputed.
C An efficient way to precompute a**(2*j) MOD m is to start with
C a and square it j times modulo m using the function MLTMOD.
C
m1 = 2147483563
m2 = 2147483399
a1 = 40014
a2 = 40692
a1w = 1033780774
a2w = 1494757890
a1vw = 2082007225
a2vw = 784306273
DO 10,i = 1,numg
qanti(i) = .FALSE.
10 CONTINUE
C
C Tell the world that common has been initialized
C
qdum = qrgnsn(.TRUE.)
RETURN
END
|