]> git.uio.no Git - u/mrichter/AliRoot.git/blob - GEANT321/fluka/gamrn.F
This commit was generated by cvs2svn to compensate for changes in r2,
[u/mrichter/AliRoot.git] / GEANT321 / fluka / gamrn.F
1 *
2 * $Id$
3 *
4 * $Log$
5 * Revision 1.1.1.1  1995/10/24 10:20:03  cernlib
6 * Geant
7 *
8 *
9 #include "geant321/pilot.h"
10 *CMZ :  3.21/02 29/03/94  15.41.44  by  S.Giani
11 *-- Author :
12 *$ CREATE GAMRN.FOR
13 *COPY GAMRN
14 *
15 *=== gamrn ============================================================*
16 *
17       FUNCTION GAMRN(ALAM,ETA)
18  
19 #include "geant321/dblprc.inc"
20 #include "geant321/dimpar.inc"
21 #include "geant321/iounit.inc"
22       REAL RNDM(2)
23 C
24 C********************************************************************
25 C
26 C     RANDOM NUMBER SELECTION FROM GAMMA DISTRIBUTION
27 C     F(X) = ALAM**ETA*X**(ETA-1)*EXP(-ALAM*X) / GAM(ETA)
28 C
29 C********************************************************************
30 C
31       NCOU = 0
32       N = ETA
33       F = ETA - N
34       IF (F .EQ. 0.D0) GO TO 100
35   10  CALL GRNDM(RNDM,1)
36       R = RNDM(1)
37       NCOU = NCOU + 1
38       IF (NCOU.GE.11) GO TO 100
39       IF (R .LT. F/(F + 2.718281828459045D0)) GO TO 20
40       CALL GRNDM(RNDM,1)
41       YYY = LOG(RNDM(1)+1.0D-38)/F
42       IF (ABS(YYY) .GT. 50.D0) GO TO 100
43       Y = EXP(YYY)
44       CALL GRNDM(RNDM,1)
45       IF (LOG(RNDM(1) + 1.0D-38) .GT. -Y) GO TO 10
46       GO TO 50
47  100  Y = 0.D0
48       GO TO 70
49   20  CALL GRNDM(RNDM,2)
50       Y = 1.D0 - LOG(RNDM(1) + 1.0D-38)
51       IF (RNDM(2) .GT. Y**(F-1.D0)) GO TO 10
52   50  IF (N .EQ. 0) GO TO 150
53   70  Z = 1.D0
54       IF (N .LE. 0) N = 1
55       DO 80 I = 1,N
56   80  CALL GRNDM(RNDM,1)
57       Z = Z * RNDM(1)
58       Y = Y - LOG(Z + 1.0D-38)
59  150  GAMRN = Y/ALAM
60       RETURN
61       END