]> git.uio.no Git - u/mrichter/AliRoot.git/blame - GEANT321/neutron/xsecn2.F
New files for folders and Stack
[u/mrichter/AliRoot.git] / GEANT321 / neutron / xsecn2.F
CommitLineData
fe4da5cc 1*
2* $Id$
3*
4* $Log$
5* Revision 1.1.1.1 1995/10/24 10:22:00 cernlib
6* Geant
7*
8*
9#include "geant321/pilot.h"
10*CMZ : 3.21/04 23/02/95 14.46.01 by S.Giani
11*-- Author :
12 SUBROUTINE XSECN2(ICOM,IREC,IUNIT,IGAMS,LGAM,ELTOL,INABS,LNAB,
13 + ITHRMS,LTHRM,IDICTS,LDICT,NTX,NTS,IGCBS,LGCB,AWR,Q,LR,QLR,
14 + BUF,IBUF,LIM,LAST,INEL)
15C THIS ROUTINE READS THE REMAINDER OF INPUT I/O UNIT(s),
16C SELECTS THE ELEMENTS NEEDED FOR THE CALCULATIONS,
17C AND STORES THE CROSS SECTION DATA IN CORE
18#include "geant321/minput.inc"
19#include "geant321/mconst.inc"
20#include "geant321/mmicab.inc"
21 CHARACTER*4 MARK
22 DIMENSION BUF(*),IBUF(*),ICOM(*),IGAMS(*),LGAM(*),INABS(*),
23 +LNAB(*),ITHRMS(*),LTHRM(*),AWR(*),IDICTS(NNR,NNUC),ELTOL(*),
24 +LDICT(NNR,NNUC),Q(NQ,NNUC),NTX(*),NTS(*),IGCBS(NGR,NNUC),
25 +LGCB(NGR,NNUC),IREC(*),LR(NQ,NNUC),QLR(NQ,NNUC)
26 DIMENSION INEL(*),IUNIT(*)
27C ASSIGN THE DEFAULT VALUES
28 LEN=0
29C INITIALIZE THE COUNTERS FOR THE LOOP
30C NISR EQUALS THE NUMBER OF ISOTOPES READ
31C IRECNO EQUALS THE NEXT RECORD NUMBER TO BE READ ON INPUT
32C I/O UNIT (NUNIT)
33C LAST EQUALS THE LAST CORE POSITION USED IN THE CALLING
34CROUTINE (INPUT1)
35C LST EQUALS THE LAST POSITION USED IN THE BUF ARRAY
36C (I.E. (BUF(LST) = D(LAST)))
37 NISR=0
38 IRECNO=1
39 LST=0
40C PRINT OUT THE CROSS SECTION DIRECTORY IF CALLED FOR
41 10 CONTINUE
42C START LOOP TO READ IN THE DATA ON INPUT I/O UNIT
43 DO 370 II=1,NI
44 IR = IREC(II)
45 IF(NUNIT.NE.IUNIT(II)) IRECNO = 1
46 NUNIT= IUNIT(II)
47 IF(NUNIT.LE.0) THEN
48 WRITE(IOUT,'(/,'' XSECN2 : Wrong unit number '',I10)') NUNIT
49 GOTO 370
50 ENDIF
51 IF(NISR.GE.NNUC)GO TO 370
52 IF(IR.EQ.0)GO TO 370
53C LOOP TO LOCATE THE I CONTROL BLOCK RECORD (IR=IREC(II))
54CZ x-section endmark = 'ENDE'
55CZ file endmark ='ENDF'
56 MARK = ' '
57 20 IF(MARK.EQ.'ENDE') IRECNO = IRECNO + 1
58 IF(MARK.EQ.'ENDF') GOTO 50
59 IF(IR.EQ.IRECNO) GOTO 30
60 READ(NUNIT,'(A)') MARK
61 GO TO 20
62C CHECK TO DETERMINE THE ISOTOPE NUMBER FOR THE RANDOM WALK
63 30 DO 40 I=1,NNUC
64 IF(ICOM(I).EQ.II)GO TO 60
65 40 CONTINUE
66 50 WRITE(IOUT,10000)II
6710000 FORMAT('0',10X,'ERROR IN ROUTINE XSECN2, II=',I6,/)
68 GO TO 390
69C READ I CONTROL BLOCK RECORD OFF INPUT I/O UNIT (NUNIT) FOR
70C THE ELEMENT CORRESPONDING TO IREC(II) AND ICOM(I)
71 60 IJK=I
72 READ(NUNIT,'(I10,4G13.7,1I10,/,6I10)') IBUF(LST+1),(BUF(LST+
73 + IK),IK=2,5),(IBUF(LST+IJ),IJ=6,12)
74 NISR=NISR+1
75C ASSIGN VALUES TO ARRAYS NEEDED FOR THE RANDOM WALK
76 ISO=IJK
77 NEL=INEL(II)
78 AWR(ISO)=BUF(LST+2)
79CZ store accuracy of xs
80 ELTOL(ISO) = BUF(LST+4)
81 IFLAGU=IBUF(LST+6)
82 LGAM(ISO)=IBUF(LST+7)
83 NTX(ISO)=IBUF(LST+8)
84 NTS(ISO)=IBUF(LST+9)
85 LTHRM(ISO)=IBUF(LST+11)
86 LNAB(ISO)=IBUF(LST+12)
87C READ IN THE ISOTOPE DICTIONARY (IDICT ARRAY)
88C FROM INPUT I/O UNIT (NUNIT)
89 READ(NUNIT,'((8I10))')(LDICT(J,ISO),J=1,NNR)
90 70 CONTINUE
91C READ IN ENDF/B FILE3 CROSS SECTION DATA
92C READ IN ENDF/B FILE4 ANGULAR DISTRIBUTION DATA
93C READ IN ENDF/B FILE5 SECONDARY ENERGY DISTRIBUTION DATA
94 DO 190 I2=1,NNR
95 LZ=LDICT(I2,ISO)
96 IF(LZ.EQ.0)GO TO 190
97 LEN=LIM-LAST
98 IF(LEN.LT.LZ)GO TO 380
99 IDICTS(I2,ISO)=LAST+1-LMOX2
100CZ changed in order to read ASCII input file
101C I2 < 67 -> x-section data
102C I2 < 123 -> angular distribution
103C I2 < 134 -> secondary energy distribution
104C I2 = 134 ->
105 IF(I2.LT.67) THEN
106 READ(NUNIT,'((6G13.7))')(BUF(LST+I),I=1,LZ)
107 ELSE IF(I2.LT.123) THEN
108C ------------------- I2 = 67 -----------------------------
109 READ(NUNIT,'((8I10))') (IBUF(LST+I),I=1,2), (IBUF(LST+
110 + J+2),J=1,2*IBUF(LST+1))
111 K = 2*IBUF(LST+1) + 2 + 1
112 DO 80 J=1,IBUF(LST+2)
113 READ(NUNIT,'(G13.7,I10,/,(6G13.7))') BUF(LST+K),
114 + IBUF(LST+K+1), (BUF(LST+IK+K+1),IK=1,IBUF(LST+K+1)*2)
115 K = K + 2 + IBUF(LST+K+1)*2
116 80 CONTINUE
117 ELSE IF(I2.LT.134) THEN
118C-------------------- I2 = 123 ----------------------------
119 READ(NUNIT,'(2I10,G13.7,2I10,/,(8I10))') (IBUF(LST+I),
120 + I=1,2),BUF(LST+3),(IBUF(LST+J),J=4,5), (IBUF(LST+K+5),K=
121 + 1,2*IBUF(LST+4))
122 ID = 2*IBUF(LST+4) + 5
123 LF = IBUF(LST+2)
124 NP2 = 2*IBUF(LST+5)
125 READ(NUNIT,'((6G13.7))') (BUF(LST+ID+I),I=1,NP2)
126 ID = ID + NP2
127 KEND = 1
128 IF(LF.EQ.5.OR.LF.EQ.11) KEND = 2
129 DO 100 K=1,KEND
130 READ(NUNIT,'((8I10))') (IBUF(LST+ID+I),I=1,2)
131 NR2 = 2*IBUF(LST+ID+1)
132 NE = IBUF(LST+ID+2)
133 ID = ID + 2
134 READ(NUNIT,'((8I10))') (IBUF(LST+ID+I),I=1,NR2)
135 ID = ID + NR2
136 IEND = NE
137 IF(LF.EQ.5.OR.LF.EQ.11) IEND = 1
138 IF(LF.EQ.7.OR.LF.EQ.9) IEND = 1
139 DO 90 I=1,IEND
140 IF(LF.EQ.1) THEN
141 READ(NUNIT,'(G13.7,2I10)') BUF(LST+ID+1),
142 + (IBUF(LST+ID+J),J=2,3)
143 NR2 = 2*IBUF(LST+ID+2)
144 NP2 = 2*IBUF(LST+ID+3)
145 ID = ID + 3
146 READ(NUNIT,'((8I10))') (IBUF(LST+ID+J),J=1,
147 + NR2)
148 ID = ID + NR2
149 ELSE
150 NP2 = 2*NE
151 ENDIF
152 READ(NUNIT,'((6G13.7))') (BUF(LST+ID+J),J=1,NP2)
153 ID = ID + NP2
154 90 CONTINUE
155 100 CONTINUE
156 ELSE
157C ------------------ I2 = 134 --------------------------------------
158 READ(NUNIT,'(I10)') IBUF(LST+1)
159 LNU = IBUF(LST+1)
160 IF(LNU.NE.2) THEN
161 READ(NUNIT,'(I10,/,(6G13.7))') IBUF(LST+2), (BUF(LST
162 + +I+2),I=1,IBUF(LST+2))
163 ELSE
164 READ(NUNIT,'((8I10))') (IBUF(LST+I),I=2,3)
165 NR2 = IBUF(LST+2)*2
166 READ(NUNIT,'((8I10))') (IBUF(LST+3+J),J=1,NR2)
167 NP2 = IBUF(LST+3)*2
168 READ(NUNIT,'((6G13.7))') (BUF(LST+3+NR2+J),J=1,NP2)
169 ENDIF
170 ENDIF
171CZ end of change
172 IF(I2.GT.66)GO TO 120
173 110 CONTINUE
174 GO TO 180
175 120 IF(I2.GT.122)GO TO 150
176 130 CONTINUE
177 CALL ANGCDF(BUF(LST+1),BUF(LST+1),LZ)
178 140 CONTINUE
179 GO TO 180
180 150 IF(I2.GT.133)GO TO 170
181 160 CONTINUE
182 GO TO 180
183 170 CONTINUE
184 180 CONTINUE
185 LAST=LAST+LZ
186 LST=LST+LZ
187 190 CONTINUE
188C READ IN THE AVERAGE PHOTON PRODUCTION ARRAY
189 LZ=LGAM(ISO)
190 IF(LZ.EQ.0)GO TO 210
191 LEN=LIM-LAST
192 IF(LEN.LT.LZ)GO TO 380
193 IGAMS(ISO)=LAST+1-LMOX2
194 READ(NUNIT,'((6G13.7))')(BUF(LST+I),I=1,LZ)
195 200 CONTINUE
196 LAST=LAST+LZ
197 LST=LST+LZ
198 210 CONTINUE
199C READ IN THE TOTAL NEUTRON DISAPPERANCE ARRAY
200 LZ=LNAB(ISO)
201 IF(LZ.EQ.0)GO TO 230
202 LEN=LIM-LAST
203 IF(LEN.LT.LZ)GO TO 380
204 INABS(ISO)=LAST+1-LMOX2
205 READ(NUNIT,'((6G13.7))')(BUF(LST+I),I=1,LZ)
206 220 CONTINUE
207 LAST=LAST+LZ
208 LST=LST+LZ
209 230 CONTINUE
210C READ IN THE Q VALUE ARRAY
211 READ(NUNIT,'((6G13.7))')(Q(I,ISO),I=1,NQ)
212 240 CONTINUE
213C READ IN THE LR VALUE ARRAY
214 READ(NUNIT,'((8I10))')(LR(I,ISO),I=1,NQ)
215 250 CONTINUE
216C READ IN THE QLR VALUE ARRAY
217 READ(NUNIT,'((6G13.7))')(QLR(I,ISO),I=1,NQ)
218 260 CONTINUE
219C READ IN THE PHOTON DATA DICTIONARY (GCB ARRAY)
220C FROM INPUT I/O UNIT (NUNIT)
221C CURRENT STORAGE IS SET TO ACCOMODATE UP TO 30 INTERACTIONS
222C (I.E. (2*NTX(ISO)+2*NTS(ISO)).LE.NGR)
223 L=2*NTX(ISO)+2*NTS(ISO)
224 IF(L.EQ.0)GO TO 350
225 L1=2*NTX(ISO)
226 L2=L1+1
227 READ(NUNIT,'((8I10))')(LGCB(J,ISO),J=1,L)
228 270 CONTINUE
229C READ IN ENDF/B FILE12 PHOTON MULTIPLICATION DATA
230C READ IN ENDF/B FILE13 PHOTON CROSS SECTION DATA
231 NNTX=NTX(ISO)
232 DO 300 I2=1,NNTX
233 LZ=LGCB(2*I2,ISO)
234 IF(LZ.EQ.0)GO TO 300
235 LEN=LIM-LAST
236 IF(LEN.LT.LZ)GO TO 380
237 IGCBS(2*I2-1,ISO)=LGCB(2*I2-1,ISO)
238 IGCBS(2*I2,ISO)=LAST+1-LMOX2
239CZ changed in order to read ASCII xsection file
240 READ(NUNIT,'((8I10))') (IBUF(LST+I),I=1,2)
241 READ(NUNIT,'((6G13.7))') (BUF(LST+J+2),J=1,IBUF(LST+2))
242 ID = IBUF(LST+2) + 2 + LST
243 DO 280 K = 1, IBUF(LST+1)
244 READ(NUNIT,'(2(G13.7,I10))') BUF(ID+1),IBUF(ID+2),
245 + BUF(ID+3),IBUF(ID+4)
246 ID = ID + 4
247 READ(NUNIT,'((6G13.7))') (BUF(ID + J),J=1,IBUF(LST+2))
248 ID = ID + IBUF(LST+2)
249 280 CONTINUE
250CZ end of change
251 290 CONTINUE
252 LAST=LAST+LZ
253 LST=LST+LZ
254 300 CONTINUE
255C READ IN ENDF/B FILE15 PHOTON SECONDARY ENERGY DISTRIBUTIONS
256 NNTS=NTS(ISO)
257 IF(NNTS.EQ.0)GO TO 350
258 DO 340 I2=1,NNTS
259 LZ=LGCB(L1+2*I2,ISO)
260 IF(LZ.EQ.0)GO TO 340
261 LEN=LIM-LAST
262 IF(LEN.LT.LZ)GO TO 380
263 IGCBS(L1+2*I2-1,ISO)=LGCB(L1+2*I2-1,ISO)
264 IGCBS(L1+2*I2,ISO)=LAST+1-LMOX2
265CZ changed in order to read ASCII xsection file
266 READ(NUNIT,'(2I10,G13.7,2I10,/,(8I10))') (IBUF(LST+I),I=1,
267 + 2),BUF(LST+3), (IBUF(LST+J),J=4,5), (IBUF(LST+K+5),K=1,2*
268 + IBUF(LST+4))
269 ID = 2*IBUF(LST+4) + 5
270 LF = IBUF(LST+2)
271 NP2 = 2*IBUF(LST+5)
272 READ(NUNIT,'((6G13.7))') (BUF(LST+ID+I),I=1,NP2)
273 ID = ID + NP2
274 KEND = 1
275 IF(LF.EQ.5.OR.LF.EQ.11) KEND = 2
276 DO 320 K=1,KEND
277 READ(NUNIT,'((8I10))') (IBUF(LST+ID+I),I=1,2)
278 NR2 = 2*IBUF(LST+ID+1)
279 NE = IBUF(LST+ID+2)
280 ID = ID + 2
281 READ(NUNIT,'((8I10))') (IBUF(LST+ID+I),I=1,NR2)
282 ID = ID + NR2
283 IEND = NE
284 IF(LF.EQ.5.OR.LF.EQ.11) IEND = 1
285 IF(LF.EQ.7.OR.LF.EQ.9) IEND = 1
286 DO 310 I=1,IEND
287 IF(LF.EQ.1) THEN
288 READ(NUNIT,'(G13.7,2I10)') BUF(LST+ID+1), (IBUF(L
289 + ST+ID+J),J=2,3)
290 NR2 = 2*IBUF(LST+ID+2)
291 NP2 = 2*IBUF(LST+ID+3)
292 ID = ID + 3
293 READ(NUNIT,'((8I10))') (IBUF(LST+ID+J),J=1,NR2)
294 ID = ID + NR2
295 ELSE
296 NP2 = 2*NE
297 ENDIF
298 READ(NUNIT,'((6G13.7))') (BUF(LST+ID+J),J=1,NP2)
299 ID = ID + NP2
300 310 CONTINUE
301 320 CONTINUE
302CZ end of change
303 330 CONTINUE
304 LAST=LAST+LZ
305 LST=LST+LZ
306 340 CONTINUE
307 350 CONTINUE
308C READ IN THE THERMAL CROSS SECTION DATA ARRAY
309 LZ=LTHRM(ISO)
310 IF(LZ.EQ.0)GO TO 360
311 LEN=LIM-LAST
312 IF(LEN.LT.LZ)GO TO 380
313 ITHRMS(ISO)=LAST+1
314 READ(NUNIT,'((6G13.7))')(BUF(LST+I),I=1,LZ)
315 LAST=LAST+LZ
316 LST=LST+LZ
317 360 CONTINUE
318 370 CONTINUE
319 GO TO 400
320 380 WRITE(IOUT,10100)LZ,LEN
32110100 FORMAT('0','NOT ENOUGH SPACE TO READ IN RECORD',/,5X,
322 +'LENGTH OF RECORD=',I10,/,5X,'SPACE AVAILABLE=',I10)
323 390 PRINT '('' CALOR: ERROR in XSECN2 ====> STOP '')'
324 STOP
325 400 RETURN
326 END