]>
Commit | Line | Data |
---|---|---|
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 | |
13 | C. | |
14 | C. ****************************************************************** | |
15 | C. * * | |
16 | C. * SUBR. GGNLEV * | |
17 | C. * * | |
18 | C. * Scans the JVOLUM structure to find the maximum Number of * | |
19 | C. * LEVels and maximum number of volumes in each level.top * | |
20 | C. * Stores corresponding information in bank next to JVOLUM * | |
21 | C. * mother bank. * | |
22 | C. * * | |
23 | C. * Called by : GGCLOS * | |
24 | C. * Author : S.Banerjee * | |
25 | C. * * | |
26 | C. ****************************************************************** | |
27 | C. | |
28 | #include "geant321/gcbank.inc" | |
29 | PARAMETER (NLVMAX=15) | |
30 | INTEGER ILINK(NLVMAX), LJVOM(NLVMAX), NLINK(NLVMAX) | |
31 | INTEGER NDVLP(NLVMAX), MAXVO(NLVMAX) | |
32 | C. | |
33 | C. ------------------------------------------------------------------ | |
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 |