5 * Revision 1.1.1.1 1995/10/24 10:22:00 cernlib
9 #include "geant321/pilot.h"
10 *CMZ : 3.21/04 23/02/95 14.46.01 by S.Giani
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)
15 C THIS ROUTINE READS THE REMAINDER OF INPUT I/O UNIT(s),
16 C SELECTS THE ELEMENTS NEEDED FOR THE CALCULATIONS,
17 C AND STORES THE CROSS SECTION DATA IN CORE
18 #include "geant321/minput.inc"
19 #include "geant321/mconst.inc"
20 #include "geant321/mmicab.inc"
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(*)
27 C ASSIGN THE DEFAULT VALUES
29 C INITIALIZE THE COUNTERS FOR THE LOOP
30 C NISR EQUALS THE NUMBER OF ISOTOPES READ
31 C IRECNO EQUALS THE NEXT RECORD NUMBER TO BE READ ON INPUT
33 C LAST EQUALS THE LAST CORE POSITION USED IN THE CALLING
35 C LST EQUALS THE LAST POSITION USED IN THE BUF ARRAY
36 C (I.E. (BUF(LST) = D(LAST)))
40 C PRINT OUT THE CROSS SECTION DIRECTORY IF CALLED FOR
42 C START LOOP TO READ IN THE DATA ON INPUT I/O UNIT
45 IF(NUNIT.NE.IUNIT(II)) IRECNO = 1
48 WRITE(IOUT,'(/,'' XSECN2 : Wrong unit number '',I10)') NUNIT
51 IF(NISR.GE.NNUC)GO TO 370
53 C LOOP TO LOCATE THE I CONTROL BLOCK RECORD (IR=IREC(II))
54 CZ x-section endmark = 'ENDE'
55 CZ file endmark ='ENDF'
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
62 C CHECK TO DETERMINE THE ISOTOPE NUMBER FOR THE RANDOM WALK
64 IF(ICOM(I).EQ.II)GO TO 60
66 50 WRITE(IOUT,10000)II
67 10000 FORMAT('0',10X,'ERROR IN ROUTINE XSECN2, II=',I6,/)
69 C READ I CONTROL BLOCK RECORD OFF INPUT I/O UNIT (NUNIT) FOR
70 C THE ELEMENT CORRESPONDING TO IREC(II) AND ICOM(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)
75 C ASSIGN VALUES TO ARRAYS NEEDED FOR THE RANDOM WALK
79 CZ store accuracy of xs
80 ELTOL(ISO) = BUF(LST+4)
85 LTHRM(ISO)=IBUF(LST+11)
86 LNAB(ISO)=IBUF(LST+12)
87 C READ IN THE ISOTOPE DICTIONARY (IDICT ARRAY)
88 C FROM INPUT I/O UNIT (NUNIT)
89 READ(NUNIT,'((8I10))')(LDICT(J,ISO),J=1,NNR)
91 C READ IN ENDF/B FILE3 CROSS SECTION DATA
92 C READ IN ENDF/B FILE4 ANGULAR DISTRIBUTION DATA
93 C READ IN ENDF/B FILE5 SECONDARY ENERGY DISTRIBUTION DATA
98 IF(LEN.LT.LZ)GO TO 380
99 IDICTS(I2,ISO)=LAST+1-LMOX2
100 CZ changed in order to read ASCII input file
101 C I2 < 67 -> x-section data
102 C I2 < 123 -> angular distribution
103 C I2 < 134 -> secondary energy distribution
106 READ(NUNIT,'((6G13.7))')(BUF(LST+I),I=1,LZ)
107 ELSE IF(I2.LT.123) THEN
108 C ------------------- 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
117 ELSE IF(I2.LT.134) THEN
118 C-------------------- 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=
122 ID = 2*IBUF(LST+4) + 5
125 READ(NUNIT,'((6G13.7))') (BUF(LST+ID+I),I=1,NP2)
128 IF(LF.EQ.5.OR.LF.EQ.11) KEND = 2
130 READ(NUNIT,'((8I10))') (IBUF(LST+ID+I),I=1,2)
131 NR2 = 2*IBUF(LST+ID+1)
134 READ(NUNIT,'((8I10))') (IBUF(LST+ID+I),I=1,NR2)
137 IF(LF.EQ.5.OR.LF.EQ.11) IEND = 1
138 IF(LF.EQ.7.OR.LF.EQ.9) IEND = 1
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)
146 READ(NUNIT,'((8I10))') (IBUF(LST+ID+J),J=1,
152 READ(NUNIT,'((6G13.7))') (BUF(LST+ID+J),J=1,NP2)
157 C ------------------ I2 = 134 --------------------------------------
158 READ(NUNIT,'(I10)') IBUF(LST+1)
161 READ(NUNIT,'(I10,/,(6G13.7))') IBUF(LST+2), (BUF(LST
162 + +I+2),I=1,IBUF(LST+2))
164 READ(NUNIT,'((8I10))') (IBUF(LST+I),I=2,3)
166 READ(NUNIT,'((8I10))') (IBUF(LST+3+J),J=1,NR2)
168 READ(NUNIT,'((6G13.7))') (BUF(LST+3+NR2+J),J=1,NP2)
172 IF(I2.GT.66)GO TO 120
175 120 IF(I2.GT.122)GO TO 150
177 CALL ANGCDF(BUF(LST+1),BUF(LST+1),LZ)
180 150 IF(I2.GT.133)GO TO 170
188 C READ IN THE AVERAGE PHOTON PRODUCTION ARRAY
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)
199 C READ IN THE TOTAL NEUTRON DISAPPERANCE ARRAY
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)
210 C READ IN THE Q VALUE ARRAY
211 READ(NUNIT,'((6G13.7))')(Q(I,ISO),I=1,NQ)
213 C READ IN THE LR VALUE ARRAY
214 READ(NUNIT,'((8I10))')(LR(I,ISO),I=1,NQ)
216 C READ IN THE QLR VALUE ARRAY
217 READ(NUNIT,'((6G13.7))')(QLR(I,ISO),I=1,NQ)
219 C READ IN THE PHOTON DATA DICTIONARY (GCB ARRAY)
220 C FROM INPUT I/O UNIT (NUNIT)
221 C CURRENT STORAGE IS SET TO ACCOMODATE UP TO 30 INTERACTIONS
222 C (I.E. (2*NTX(ISO)+2*NTS(ISO)).LE.NGR)
223 L=2*NTX(ISO)+2*NTS(ISO)
227 READ(NUNIT,'((8I10))')(LGCB(J,ISO),J=1,L)
229 C READ IN ENDF/B FILE12 PHOTON MULTIPLICATION DATA
230 C READ IN ENDF/B FILE13 PHOTON CROSS SECTION DATA
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
239 CZ 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)
247 READ(NUNIT,'((6G13.7))') (BUF(ID + J),J=1,IBUF(LST+2))
248 ID = ID + IBUF(LST+2)
255 C READ IN ENDF/B FILE15 PHOTON SECONDARY ENERGY DISTRIBUTIONS
257 IF(NNTS.EQ.0)GO TO 350
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
265 CZ 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*
269 ID = 2*IBUF(LST+4) + 5
272 READ(NUNIT,'((6G13.7))') (BUF(LST+ID+I),I=1,NP2)
275 IF(LF.EQ.5.OR.LF.EQ.11) KEND = 2
277 READ(NUNIT,'((8I10))') (IBUF(LST+ID+I),I=1,2)
278 NR2 = 2*IBUF(LST+ID+1)
281 READ(NUNIT,'((8I10))') (IBUF(LST+ID+I),I=1,NR2)
284 IF(LF.EQ.5.OR.LF.EQ.11) IEND = 1
285 IF(LF.EQ.7.OR.LF.EQ.9) IEND = 1
288 READ(NUNIT,'(G13.7,2I10)') BUF(LST+ID+1), (IBUF(L
290 NR2 = 2*IBUF(LST+ID+2)
291 NP2 = 2*IBUF(LST+ID+3)
293 READ(NUNIT,'((8I10))') (IBUF(LST+ID+J),J=1,NR2)
298 READ(NUNIT,'((6G13.7))') (BUF(LST+ID+J),J=1,NP2)
308 C READ IN THE THERMAL CROSS SECTION DATA ARRAY
312 IF(LEN.LT.LZ)GO TO 380
314 READ(NUNIT,'((6G13.7))')(BUF(LST+I),I=1,LZ)
320 380 WRITE(IOUT,10100)LZ,LEN
321 10100 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 '')'