]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MINICERN/packlib/kernlib/kerngen/tcgen/ranmar.F
Bugfix in AliPoints2Memory
[u/mrichter/AliRoot.git] / MINICERN / packlib / kernlib / kerngen / tcgen / ranmar.F
CommitLineData
fe4da5cc 1*
2* $Id$
3*
4* $Log$
5* Revision 1.1.1.1 1996/02/15 17:49:53 mclareni
6* Kernlib
7*
8*
9#include "kerngen/pilot.h"
10 SUBROUTINE RANMAR(RVEC,LENV)
11#if defined(CERNLIB_QMCRY)
12CDIR$ STACK
13#endif
14C
15C CERN PROGLIB# V113 RANMAR .VERSION KERNFOR 4.21 890323
16C ORIG. 01/03/89 FCA + FJ
17C
18 DIMENSION RVEC(*)
19C
20 COMMON/RANMA1/IJKL,NTOT,NTOT2,I97,J97,C,U(97)
21 LOGICAL FIRST
22 PARAMETER (TWOM24=2.**(-24),TWOM48=2.**(-48))
23 PARAMETER (CD=7654321.*TWOM24,CM=16777213.*TWOM24)
24 PARAMETER (CINT=362436.*TWOM24,MODCNS=1000000000)
25 SAVE /RANMA1/, FIRST
26 DATA FIRST/.TRUE./
27C
28 IF(FIRST) THEN
29 IJKL = 54217137
30 NTOT = 0
31 NTOT2 = 0
32 GO TO 70
33 ENDIF
34C
35 80 CONTINUE
36 DO 100 IVEC= 1, LENV
37 UNI = U(I97)-U(J97)
38 IF (UNI .LT. 0.) UNI=UNI+1.
39 U(I97) = UNI
40 I97 = I97-1
41 IF (I97 .EQ. 0) I97=97
42 J97 = J97-1
43 IF (J97 .EQ. 0) J97=97
44 C = C - CD
45 IF (C .LT. 0.) C=C+CM
46 UNI = UNI-C
47 IF (UNI .LT. 0.) UNI=UNI+1.
48C
49C Replace exact zeroes by uniform distr. *2**-24
50C
51 IF (UNI .EQ. 0.) THEN
52 UNI = TWOM24*U(2)
53C
54C An exact zero here is very unlikely, but let's be safe.
55C
56 IF (UNI .EQ. 0.) UNI= TWOM48
57 ENDIF
58 RVEC(IVEC) = UNI
59 100 CONTINUE
60C
61 NTOT = NTOT + LENV
62 IF (NTOT .GE. MODCNS) THEN
63 NTOT2 = NTOT2 + 1
64 NTOT = NTOT - MODCNS
65 ENDIF
66 RETURN
67 ENTRY RMARIN(IJKLIN,NTOTIN,NTO2IN)
68C
69 FIRST = .FALSE.
70 IJKL = IJKLIN
71 NTOT = NTOTIN
72 NTOT2 = NTO2IN
73C
74 70 CONTINUE
75 IJ = IJKL/30082
76 KL = IJKL - 30082*IJ
77 I = MOD(IJ/177, 177) + 2
78 J = MOD(IJ, 177) + 2
79 K = MOD(KL/169, 178) + 1
80 L = MOD(KL, 169)
81 DO 30 II= 1, 97
82 S = 0.
83 T = .5
84 DO 20 JJ= 1, 24
85 M = MOD(MOD(I*J,179)*K, 179)
86 I = J
87 J = K
88 K = M
89 L = MOD(53*L+1, 169)
90 IF (MOD(L*M,64) .GE. 32) S = S+T
91 T = 0.5*T
92 20 CONTINUE
93 U(II) = S
94 30 CONTINUE
95 C = CINT
96 I97 = 97
97 J97 = 33
98C Complete initialization by skipping
99C (NTOT2*MODCNS + NTOT) random numbers
100 NITER = MODCNS
101 DO 50 LOOP2= 1, NTOT2+1
102 IF(LOOP2.GT.NTOT2) NITER=NTOT
103 DO 40 IDUM = 1, NITER
104 UNI = U(I97)-U(J97)
105 IF (UNI .LT. 0.) UNI=UNI+1.
106 U(I97) = UNI
107 I97 = I97-1
108 IF (I97 .EQ. 0) I97=97
109 J97 = J97-1
110 IF (J97 .EQ. 0) J97=97
111 C = C - CD
112 IF (C .LT. 0.) C=C+CM
113 40 CONTINUE
114 50 CONTINUE
115 NTOT = 0
116 NTOT2 = 0
117 IF(FIRST) THEN
118 FIRST = .FALSE.
119 GO TO 80
120 ENDIF
121 RETURN
122 ENTRY RMARUT(IJKLUT,NTOTUT,NTO2UT)
123C
124 NTOTUT = NTOT
125 NTO2UT = NTOT2
126 IJKLUT = IJKL
127C
128 END