source: PSPA/parmelaPSPA/trunk/norran.f @ 445

Last change on this file since 445 was 12, checked in by lemeur, 12 years ago

parmela pspa initial

File size: 3.7 KB
Line 
1      FUNCTION NORRAN ( RN )
2C
3C     FORTRAN version for Alliant of CERN library routine NORRAN
4C     (entry V101) for the genereration of standard normal pseudo-
5C     random numbers.                             / Ch.Walck 880407
6C
7C     Calling sequences:
8C     R = UNI ( DUMMY )              Continuous uniform r.n. 0 TO 1
9C     R = VNI ( DUMMY )              Continuous uniform r.n. -1 to 1
10C     CALL NORRAN ( R )              Standard normal r.n.
11C     CALL NORRIN ( ISEED1, ISEED2 ) Initialize seeds
12C     CALL NORRUT ( ISEED1, ISEED2 ) Access seeds
13C
14      SAVE MCGN, SRGN, TBL
15      PARAMETER ( M20=2**20-1, M24=2**24-1, XM24=2.0**(-24)
16     +          , XM28=2.0**(-28) )
17      DIMENSION TBL(0:326)
18      INTEGER R0, R1, R2, SEED1, SEED2, SIGN, SRGN
19      EQUIVALENCE (MAN,XMAN)
20      DATA TBL/   0.0000,   0.0625, 2*0.1250, 4*0.1875, 5*0.2500
21     +        ,   0.5625, 5*0.6250, 3*0.8750,   1.1250,   1.4375
22     +        , 5*0.0000, 5*0.0625, 4*0.1250, 2*0.1875,   0.2500
23     +        , 5*0.3125, 5*0.3750, 5*0.4375, 5*0.5000, 4*0.5625
24     +        , 4*0.6875, 4*0.7500, 4*0.8125,   0.8750, 3*0.9375
25     +        , 3*1.0000, 3*1.0625, 2*1.1250, 2*1.1875, 2*1.2500
26     +        , 2*1.3125, 2*1.3750,   1.4375,   1.5000,   1.5625
27     +        ,   1.6250,   1.6875,   1.7500,   1.8125,10*0.3125
28     +        , 7*0.3750, 5*0.4375, 2*0.5000, 9*0.6875, 5*0.7500
29     +        ,   0.8125,10*0.9375, 7*1.0000, 3*1.0625,12*1.1875
30     +        , 9*1.2500, 5*1.3125, 2*1.3750,13*1.5000,10*1.5625
31     +        , 7*1.6250, 5*1.6875, 2*1.7500,15*1.8750,13*1.9375
32     +        ,12*2.0000,10*2.0625, 9*2.1250, 8*2.1875, 7*2.2500
33     +        , 6*2.3125, 5*2.3750, 4*2.4375, 3*2.5000, 3*2.5625
34     +        , 2*2.6250, 2*2.6875 /
35      DATA MCGN/12345/, SRGN/1073/
36C
37      R0   = IEOR ( ISHFT(SRGN,-15), SRGN )
38      R1   = ISHFT(R0,17)
39      SRGN = IEOR(R0,R1)
40      MCGN = 69069 * MCGN
41      R2   = IEOR(SRGN,MCGN)
42      R0   = ISHFT(R2,-24)
43      IF ( R0 .GE. 104 ) GO TO 2
44      MAN  = IAND(R2,M24)
45      XMAN = MAN
46      IF ( XMAN .EQ. 0.0 ) XMAN = 0.5
47      RN   = XM28 * XMAN + TBL(R0)
48      RETURN
49C
50    2 IF ( R0 .GE. 208 ) GO TO 3
51      R0   = R0 - 104
52      MAN  = IAND(R2,M24)
53      XMAN = MAN
54      IF ( XMAN .EQ. 0.0 ) XMAN = 0.5
55      RN   = - ( XM28 * XMAN + TBL(R0) )
56      RETURN
57C
58    3 R0   = ISHFT(R2,-20)
59      IF ( R0 .GE. 3631 ) GO TO 4
60      R0   = R0 - 3304
61      MAN  = ISHFT ( IAND(R2,M20), 4 )
62      XMAN = MAN
63      IF ( XMAN .EQ. 0.0 ) XMAN = 0.5
64      RN   = XM28 * XMAN + TBL(R0)
65      RETURN
66C
67    4 IF ( R0 .GE. 3934 ) GO TO 5
68      R0   = R0 - 3607
69      MAN  = ISHFT ( IAND(R2,M20), 4 )
70      XMAN = MAN
71      IF ( XMAN .EQ. 0.0 ) XMAN = 0.5
72      RN   = - ( XM28 * XMAN + TBL(R0) )
73      RETURN
74C
75    5 RN   = RNORTH ( R2 )
76      RETURN
77C
78C     UNI entry for RNORTH
79C
80      ENTRY UNI ( DUMMY )
81      R0   = IEOR ( ISHFT(SRGN,-15), SRGN )
82      R1   = ISHFT ( R0 , 17 )
83      SRGN = IEOR ( R0 ,R1 )
84      MCGN = 69069 * MCGN
85      MAN  = ISHFT ( IEOR ( SRGN, MCGN ) , -8 )
86      XMAN = MAN
87      IF ( XMAN .EQ. 0.0 ) XMAN = 0.5
88      UNI = XM24 * XMAN
89      RETURN
90C
91C     Uniform number between -1 and 1 for RNORTH
92C
93      ENTRY VNI ( DUMMY )
94      R0   = IEOR ( ISHFT(SRGN,-15), SRGN )
95      R1   = ISHFT ( R0 , 17 )
96      SRGN = IEOR ( R0 ,R1 )
97      MCGN = 69069 * MCGN
98      R2   = IEOR ( SRGN, MCGN )
99      MAN  = IAND ( ISHFT ( R2, -7 ), M24 )
100      SIGN = ISHFT ( R2, -31 )
101      SIGN = 1 - 2 * SIGN
102      XMAN = MAN
103      IF ( XMAN .EQ. 0.0 ) XMAN = 0.5
104      VNI = SIGN * XM24 * XMAN
105      RETURN
106C
107C     Set seeds
108C
109      ENTRY NORRIN ( SEED1, SEED2 )
110      MCGN = SEED1
111      SRGN = SEED2
112      RETURN
113C
114C     Get seeds
115C
116      ENTRY NORRUT ( SEED1, SEED2 )
117cbm 27/07/00      SEED1 = MCGN
118cbm 27/07/00      SEED2 = SRGN
119      MCGN = SEED1
120      SRGN = SEED2
121      RETURN
122      END
Note: See TracBrowser for help on using the repository browser.