]> git.uio.no Git - u/mrichter/AliRoot.git/blame - GEANT321/ggeom/ggnlev.F
Allow any Cherenkov-like particle to be transported
[u/mrichter/AliRoot.git] / GEANT321 / ggeom / ggnlev.F
CommitLineData
fe4da5cc 1*
2* $Id$
3*
4* $Log$
5* Revision 1.1.1.1 1995/10/24 10:20:49 cernlib
6* Geant
7*
8*
9#include "geant321/pilot.h"
10*CMZ : 3.21/02 29/03/94 15.41.28 by S.Giani
11*-- Author :
12 SUBROUTINE GGNLEV
13C.
14C. ******************************************************************
15C. * *
16C. * SUBR. GGNLEV *
17C. * *
18C. * Scans the JVOLUM structure to find the maximum Number of *
19C. * LEVels and maximum number of volumes in each level.top *
20C. * Stores corresponding information in bank next to JVOLUM *
21C. * mother bank. *
22C. * *
23C. * Called by : GGCLOS *
24C. * Author : S.Banerjee *
25C. * *
26C. ******************************************************************
27C.
28#include "geant321/gcbank.inc"
29 PARAMETER (NLVMAX=15)
30 INTEGER ILINK(NLVMAX), LJVOM(NLVMAX), NLINK(NLVMAX)
31 INTEGER NDVLP(NLVMAX), MAXVO(NLVMAX)
32C.
33C. ------------------------------------------------------------------
34*
35 CALL VZERO (MAXVO, NLVMAX)
36 NLEV = 1
37 NLVT = NLEV
38 LJVOM(NLEV) = LQ(JVOLUM-1)
39 ILINK(NLEV) = 1
40 MAXVO(NLEV) = 1
41*
42* *** Loop over volumes going down the tree
43*
44 10 IF (NLEV.GT.NLVT) NLVT = NLEV
45*
46* ** Check if current volume is a source of local development
47*
48 IF (LQ(LJVOM(NLEV)).GT.0) THEN
49 NDVLP(NLEV) = NLEV
50 ELSE IF (NLEV.GT.1) THEN
51 NDVLP(NLEV) = NDVLP(NLEV-1)
52 ELSE
53 NDVLP(NLEV) = NLVMAX
54 ENDIF
55 NIN = Q(LJVOM(NLEV)+3)
56 IF (NIN.GT.0) THEN
57*
58* * Current volume has contents defined by position
59*
60 NLINK(NLEV) = NIN
61 IF (NIN.GT.MAXVO(NLEV+1)) MAXVO(NLEV+1) = NIN
62 IF (NLINK(NLEV).EQ.0) GO TO 30
63 IN = NLINK(NLEV)
64 NLINK(NLEV) = IN - 1
65 JIN = LQ(LJVOM(NLEV)-IN)
66 IVOT = Q(JIN+2)
67 NLEV = NLEV + 1
68 LJVOM(NLEV) = LQ(JVOLUM-IVOT)
69 ILINK(NLEV) = IN
70 GO TO 10
71*
72 ELSE IF (NIN.LT.0) THEN
73*
74* * Current volume is divided
75*
76 JDIV = LQ(LJVOM(NLEV)-1)
77 IVOT = Q(JDIV+2)
78 IF (NLEV.GT.NDVLP(NLEV)) THEN
79 JPAR = LQ(LJVOM(NDVLP(NLEV)))
80 DO 15 ILEV = NDVLP(NLEV), NLEV-1
81 IF (IQ(JPAR+1).EQ.0) THEN
82 JPAR = LQ(JPAR-ILINK(ILEV+1))
83 IF (JPAR.EQ.0) GO TO 20
84 ELSE
85 JPAR = LQ(JPAR-1)
86 ENDIF
87 IF (ILEV.EQ.NLEV-1) THEN
88 NDIV = IQ(JPAR+1)
89 GO TO 25
90 ENDIF
91 15 CONTINUE
92 ENDIF
93 20 NDIV = Q(JDIV+3)
94 IF (NDIV.LT.0) NDIV = -NDIV
95 25 NLINK(NLEV) = 0
96 IF (NDIV.GT.MAXVO(NLEV+1)) MAXVO(NLEV+1) = NDIV
97 NLEV = NLEV + 1
98 LJVOM(NLEV) = LQ(JVOLUM-IVOT)
99 ILINK(NLEV) = 1
100 GO TO 10
101 ENDIF
102*
103* ** No more content in this volume
104* * Go up the tree
105*
106 30 NLEV = NLEV - 1
107 IF (NLEV.GT.0) THEN
108 IF (NLINK(NLEV).EQ.0) GO TO 30
109 IN = NLINK(NLEV)
110 NLINK(NLEV) = IN - 1
111 JIN = LQ(LJVOM(NLEV)-IN)
112 IVOT = Q(JIN+2)
113 NLEV = NLEV + 1
114 LJVOM(NLEV) = LQ(JVOLUM-IVOT)
115 ILINK(NLEV) = IN
116 GO TO 10
117 ENDIF
118*
119* *** Scan is complete; now store the information in next-of-same-type
120* ** link of JVOLUM
121*
122 JVOLX = LQ(JVOLUM)
123 IF (JVOLX.GT.0) CALL MZDROP (IXCONS, JVOLX, ' ')
124 CALL MZBOOK (IXCONS, JVOLX, JVOLUM, 0, 'NLEV', 0, 0, NLVT, 2, 0)
125 CALL UCOPY (MAXVO, IQ(JVOLX+1), NLVT)
126#if defined(CERNLIB_DEBUGG)
127 IF (IDEBUG.NE.0) THEN
128 WRITE (CHMAIL, 2001) NLVT
129 CALL GMAIL (1, 0)
130 IF (NLVT.GT.0) THEN
131 WRITE (CHMAIL, 2002) (MAXVO(I), I = 1, NLVT)
132 CALL GMAIL (0, 0)
133 ENDIF
134 ENDIF
135 2001 FORMAT (' GGNLEV : Maximum number of levels = ',I4,
136 + ' -- maximum number of volumes in each level')
137 2002 FORMAT (5X,20I6)
138#endif
139* END GGNLEV
140 END