]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MINICERN/packlib/zebra/mqg/mzfgap.F
Mostly minor style modifications to be ready for cloning with EMCAL
[u/mrichter/AliRoot.git] / MINICERN / packlib / zebra / mqg / mzfgap.F
CommitLineData
fe4da5cc 1*
2* $Id$
3*
4* $Log$
5* Revision 1.2 1996/04/18 16:12:30 mclareni
6* Incorporate changes from J.Zoll for version 3.77
7*
8* Revision 1.1.1.1 1996/03/06 10:47:20 mclareni
9* Zebra
10*
11*
12#include "zebra/pilot.h"
13 SUBROUTINE MZFGAP
14
15C- Find the 4 largest gaps,
16C- gaps 3 + 4 may be inside the moving memory region
17C- defined by JQSTMV,JQDVM1+2,NQDVMV
18C- gaps 1 + 2 must be outside the moving memory region
19
20C- Entry 'J' in the table contains :
21C- IQGAP(1,J) = number of words available
22C- IQGAP(2,J) = abs. zebra adr of first word in the gap
23C- IQGAP(3,J) = division number
24C- IQGAP(4,J) = store number
25C- IQGAP(5,J) user flag
26
27C- Original meaning of JQSTMV,JQDVM1,JQDVM2,NQDVMV (cf. MZTABS):
28C- unless JQSTMV<0, the divisions JQDVM1 to JQDVM2 inclusive
29C- of the store JQSTMV may have to be shifted by NQDVMV words,
30C- to the left if -ve, to the right if +ve.
31C- NQDVMV=0 means to the left by a yet unknown amount.
32C- It follows that the gaps after divisions JDIV are not available
33C- for the relocation table because they may be over-written
34C- by the memory move, with :
35C- NQDVMV 0, -ve : JDIV = <JQDVM1-1,JQDVM2-1>
36C- +ve : JDIV = <JQDVM1, JQDVM2 >
37
38C- MZFGAP is also used for I/O to find a gap where to put the
39C- relocation table on input. In this case there is just one
40C- gap unavailable, namely the one which will receive the data.
41C- This is the gap before a reverse division (JQMODE=1) or after
42C- a forward division (JQMODE=0). To block this gap one can give
43C- JQDVM1=JQDVM2=JDIV and NQDVMV=1-2*JQMODE, setting JQSTMV also.
44
45#include "zebra/zstate.inc"
46#include "zebra/zunit.inc"
47#include "zebra/mqsys.inc"
48#include "zebra/mzct.inc"
49C-------------- End CDE --------------
50 DIMENSION NGAPV(7), JDIVV(7), JSTOV(7), JPV(7)
51 EQUIVALENCE (NGAPV(1),IQUEST(11)), (JDIVV(1),IQUEST(21))
52 EQUIVALENCE (JSTOV(1),IQUEST(31)), (JPV(1), IQUEST(41))
53 DIMENSION NQGAPV(2)
54 EQUIVALENCE (NQGAPV(1),NQGAPN)
55
56
57 CALL VZERO (IQGAP,20)
58
59 15 DO 17 J=1,6
60 17 NGAPV(J) = 0
61
62 IF (JQSTMV.LT.0) GO TO 19
63 KT = NQOFFT(JQSTMV+1)
64 JDVSH1 = JQDVM1
65 JDVSH2 = JQDVM2
66 IF (NQDVMV.GT.0) GO TO 19
67 IF (JDVSH1.EQ.IQTABV(KT+9)) JDVSH1=IQTABV(KT+8)+1
68 JDVSH1 = JDVSH1 - 1
69 JDVSH2 = JDVSH2 - 1
70 19 MINGN = 0
71 MINGV = 0
72 JMINGN = 1
73 JMINGV = 5
74
75C------ Loop all stores
76
77 JSTO = -1
78 21 JSTO = JSTO + 1
79 IF (JSTO.GT.NQSTOR) GO TO 61
80 IF (NQALLO(JSTO+1).LT.0) GO TO 21
81
82 KT = NQOFFT(JSTO+1)
83 JDVN = 1
84
85C---- Loop all divisions
86
87 31 JDIV = JDVN
88 IF (JDIV.EQ.21) GO TO 21
89 JDVN = JDIV + 1
90 IF (JDIV.EQ.IQTABV(KT+8)) JDVN=IQTABV(KT+9)
91
92 NWGAP = LQSTA(KT+JDVN) - LQEND(KT+JDIV)
93 IF (NWGAP.LT.164) GO TO 31
94 IF (JSTO.NE.JQSTMV) GO TO 41
95 IF (JDIV.LT.JDVSH1) GO TO 41
96 IF (JDIV.GT.JDVSH2) GO TO 41
97
98C-- Gap in moving region
99
100 IF (NWGAP.LE.MINGV) GO TO 31
101 NGAPV(JMINGV) = NWGAP
102 JDIVV(JMINGV) = JDIV
103 JSTOV(JMINGV) = JSTO
104 JMINGV = 5
105 MINGV = NGAPV(5)
106 IF (MINGV.LE.NGAPV(6)) GO TO 31
107 JMINGV = 6
108 MINGV = NGAPV(6)
109 GO TO 31
110
111C-- Gap in non-moving region
112
113 41 IF (NWGAP.LE.MINGN) GO TO 31
114 NGAPV(JMINGN) = NWGAP
115 JDIVV(JMINGN) = JDIV
116 JSTOV(JMINGN) = JSTO
117 JMINGN = 1
118 MINGN = NGAPV(1)
119 DO 44 J=2,4
120 IF (MINGN.LE.NGAPV(J)) GO TO 44
121 JMINGN = J
122 MINGN = NGAPV(J)
123 44 CONTINUE
124 GO TO 31
125
126C------- Store the result
127
128 61 DO 62 J=1,6
129 62 JPV(J) = J
130
131C-- Sort non-moving gaps
132
133 JG = 1
134 65 JF = JPV(JG)
135 JN = JPV(JG+1)
136 IF (NGAPV(JF).LT.NGAPV(JN)) GO TO 67
137 IF (JG.EQ.3) GO TO 71
138 66 JG = JG + 1
139 GO TO 65
140
141 67 JPV(JG) = JN
142 JPV(JG+1) = JF
143 IF (JG.EQ.1) GO TO 66
144 JG = JG - 1
145 GO TO 65
146
147C-- Sort moving gaps
148
149 71 JG = 4
150 75 JF = JPV(JG)
151 JN = JPV(JG+1)
152 IF (NGAPV(JF).LT.NGAPV(JN)) GO TO 77
153 IF (JG.EQ.5) GO TO 81
154 76 JG = JG + 1
155 GO TO 75
156
157 77 JPV(JG) = JN
158 JPV(JG+1) = JF
159 IF (JG.EQ.3) GO TO 76
160 JG = JG - 1
161 GO TO 75
162
163C-- Store 4 biggest gaps
164
165 81 NQGAPN = 0
166 NQGAP = 0
167 JSEL = 1
168 DO 87 JG=1,4
169 JU = JPV(JG)
170 NWGAP= NGAPV(JU)
171 IF (NWGAP.EQ.0) GO TO 87
172 JDIV = JDIVV(JU)
173 JSTO = JSTOV(JU)
174 KT = NQOFFT(JSTO+1)
175 KS = NQOFFS(JSTO+1)
176 IQGAP(1,JG) = NWGAP
177 IQGAP(2,JG) = KS+ LQEND(KT+JDIV)
178 IQGAP(3,JG) = JDIV
179 IQGAP(4,JG) = JSTO
180 IF (JU.GE.5) JSEL=2
181 NQGAPV(JSEL) = JG
182 87 CONTINUE
183 NQGAP = MAX (NQGAPN,NQGAP)
184#if defined(CERNLIB_QDEVZE)
185 IF (NQDEVZ.GE.11)
186 +WRITE (IQLOG,9888) NQGAPV,(JG,(IQGAP(J,JG),J=1,5),JG=1,NQGAP)
187 9888 FORMAT (1X/' DEVZE MZFGAP, NQGAPN,NQGAP=',2I4
188 F/16X,' JGAP SIZE LOC JDIV JSTO USED'
189 F/(16X,I4,2I8,3I5))
190#endif
191 RETURN
192 END
193* ==================================================
194#include "zebra/qcardl.inc"