5 * Revision 1.1.1.1 1995/10/24 10:20:28 cernlib
9 #include "geant321/pilot.h"
10 *CMZ : 3.21/02 29/03/94 15.41.27 by S.Giani
12 SUBROUTINE GDTR0(IVTREE,IROOT,LEVMAX,IER)
14 C. ******************************************************************
16 C. * Steering routine to build geometric structure tree *
17 C. * (starting from JVOLUM structure until to have an *
18 C. * optimized tree on IQ(JNAM1),IQ(JBRO1),etc.) *
20 C. * IVTREE= view bank used to store tree structure (input) *
21 C. * IROOT = root of the tree to be built up (input) *
22 C. * IER = error flag to detect nodes overflow (output) *
24 C. * ==>Called by : GDFSPC, GDTREE *
25 C. * Author : P.Zanarini ********* *
26 C. * Revised: S.Giani ********* *
28 C. ******************************************************************
30 #include "geant321/gcbank.inc"
31 #include "geant321/gcflag.inc"
32 #include "geant321/gcunit.inc"
33 #include "geant321/gcdraw.inc"
34 COMMON/GCLOCA/NLOCAL(2),JLOCA(19),JV
35 COMMON /QUEST/ IQUEST(100)
38 DATA NAMZ/'DNAM','DMOT','DXON','DBRO','DDUP','DSCA','DDVM','DPSM',
39 + 'DNA1','DMO1','DXO1','DBR1','DDU1','DSC1','DUUU','DVVV'/
41 C. ------------------------------------------------------------------
43 IF (IVTREE.LE.NKVIEW.AND.LQ(JDRAW-IVTREE).NE.0) THEN
46 ELSEIF (IVTREE.GT.NKVIEW) THEN
48 CALL MZNEED(IXCONS,2*NDL,'G')
49 IF(IQUEST(11).LT.0) GOTO 50
50 CALL MZPUSH(IXCONS,JDRAW,NDL,NDL,'I')
51 DO 10 I=NKVIEW+1,IVTREE-1
57 C Open view number IVTREE
60 CALL MZBOOK(IXCONS,JV,JDRAW,-IVTREE,'DTRE',16,16,0,3,0)
66 CALL MZNEED(IXCONS,LLL,'G')
68 IF (IQUEST(11).LT.0) THEN
72 *** PRINT *,'NEW MAXNOD',MAXNOD
75 CALL MZBOOK(IXCONS,LBANK,JV,-I,NAMZ(I),0,0,MAXNOD,3,0)
77 IF (LBANK.EQ.0) GO TO 40
82 40 WRITE (CHMAIL,10000)
86 50 WRITE (CHMAIL,10100)
92 C 1. Scan JVOLUM banks and build non-optimized tree structur
93 C with arrays of pointers JNAM,JMOT,JXON,JBRO,JDUP,JDVM
94 C Note : IQ(JDUP) is set >0 for multiplicity by positioni
95 C (normal case is 1); IQ(JDVM) is set <0 for
96 C multiplicity by dividing (or 0 if not)
98 C 2. Scan non-optimized tree and build optimized tree,
99 C with arrays of pointers JNAM1,JMOT1,JXON1,JBRO1,JDUP1
100 C Note : IQ(JDUP1) is set >0 for multiplicity by position
101 C or <0 for multiplicity by dividing (normal case
106 C IQ(JNAM+I) = node name (in non-optimized tree)
107 C IQ(JMOT+I) = mother (or 0 if top of tree)
108 C IQ(JXON+I) = first son (or 0 if any)
109 C IQ(JBRO+I) = next brother (or 0 if any)
110 C IQ(JDUP+I) = multiplicity (<0 for div. or >0 for pos.)
111 C IQ(JSCA+I) = service word (scan flag, etc.)
112 C IQ(JDVM+I) = division multiplicity (>0 for div. or 0 for n
113 C IQ(JPSM+I) = position multiplicity (>1 for pos. or 1 for d
115 C IQ(JNAM1+I) = node name (in optimized tree)
116 C IQ(JMOT1+I) = mother (or 0 if top of tree)
117 C IQ(JXON1+I) = first son (or 0 if any)
118 C IQ(JBRO1+I) = next brother (or 0 if any)
119 C IQ(JDUP1+I) = multiplicity (<0 for div. or >0 for pos.)
120 C IQ(JSCA1+I) = service word (scan flag, etc.)
121 C IQ(JULEV+I) = u-coordinate of the node in the tree
122 C IQ(JVLEV+I) = v-coordinate of the node in the tree
147 C Scan JVOLUM banks and build non-optimized tree structure
149 C WRITE (CHMAIL,5001)
151 CALL GDTR2(IROOT,JMAX,LEVMAX,IER)
152 IF (IER.NE.0) GO TO 999
155 C Scan non-optimized tree and build optimized tree
157 C WRITE (CHMAIL,5002)
160 C WRITE (CHMAIL,5003)
165 C WRITE (CHMAIL,1500) NLEFT,MAXNOD,NUMNOD,NUMND1
168 10000 FORMAT (' ERROR IN GDTR0: MEMORY OVERFLOW IN CREATING A BANK')
169 10100 FORMAT (' ERROR IN GDTR0: MEMORY OVERFLOW IN PUSHING A BANK')