5 * Revision 1.1.1.1 1995/10/24 10:22:00 cernlib
9 #include "geant321/pilot.h"
10 *CMZ : 3.21/02 29/03/94 15.41.48 by S.Giani
12 SUBROUTINE XSECN3(KM,KE,RHO,IN,IDICTS,LDICT,ISIGTS,LSIGT,BUF,
14 C THIS ROUTINE CREATES MACROSCOPIC TOTAL CROSS SECTIONS
15 C AND THEN MIXES AND THINS THESE CROSS SECTIONS ACCORDING
17 #include "geant321/minput.inc"
18 #include "geant321/mconst.inc"
19 #include "geant321/mpoint.inc"
20 #include "geant321/mmicab.inc"
21 DIMENSION BUF(*),IBUF(*),KM(*),KE(*),RHO(*),IN(*),
22 +IDICTS(NNR,NNUC),LDICT(NNR,NNUC),ISIGTS(*),LSIGT(*),TCS(*)
23 C ASSIGN THE INITIAL VALUES
24 C LST EQUALS THE LAST POSITION USED IN THE BUF ARRAY
25 C (I.E. (BUF(LST) = D(LAST)))
26 C LEN EQUALS THE CORE SPACE AVAILABLE
30 C READ IN TWO CROSS SECTION ARRAYS AND CREATE
31 C MACROSCOPIC CROSS SECTIONS
35 C READ IN THE FIRST ARRAY
37 IF(KM(IJ).NE.J)GO TO 140
41 TOL = AMIN1(TCS(LFP210+II-1)/5.,TOL)
44 ISLZ=IDICTS(1,II)+LMOX2
49 BUF(LST+2*M-1)=TCS(ISLZ+2*(M-1))
50 BUF(LST+2*M)=TCS(ISLZ+2*M-1)*RHO(IJ)
54 C READ IN THE SECOND ARRAY
58 ISLZ=IDICTS(1,II)+LMOX2
63 BUF(LST+LZ1+2*M-1)=TCS(ISLZ+2*(M-1))
64 BUF(LST+LZ1+2*M)=TCS(ISLZ+2*M-1)*RHO(IJ)
70 IF(BUF(LST+1).NE.1.E-5)GO TO 170
71 IF(BUF(LST+LZ2).NE.1.E-5)GO TO 170
73 BUF(LST+LZ1+LZ+1)=1.E-5
74 BUF(LST+LZ1+LZ+2)=BUF(LST+2)+BUF(LST+LZ2+1)
75 C DETERMINE THE NEXT ENERGY POINT
76 50 IF(BUF(LST+1+K).EQ.BUF(LST+LZ2+L))GO TO 90
77 IF(BUF(LST+1+K).LT.BUF(LST+LZ2+L))GO TO 70
78 C DETERMINE THE CROSS SECTION AT ENERGY POINT BUF(LST+LZ2+L)
79 CALL CTERP(BUF(LST+K-1),BUF(LST+K+1),BUF(LST+LZ2+L),
80 + BUF(LST+K), BUF(LST+K+2),SIGMA)
82 LP=LZ1+LZ+1+2*(NXSEC-1)
83 BUF(LST+LP)=BUF(LST+LZ2+L)
84 BUF(LST+LP+1)=BUF(LST+LZ2+L+1)+SIGMA
87 C ALL THE POINTS IN THE SECOND ARRAY HAVE NOW BEEN USED
89 LP=LZ1+LZ+1+2*(NXSEC-1)
90 BUF(LST+LP)=BUF(LST+1+K)
91 BUF(LST+LP+1)=BUF(LST+2+K)
95 C DETERMINE THE CROSS SECTION AT ENERGY POINT BUF(LST+1+K)
96 70 CALL CTERP(BUF(LST+LZ2+L-2),BUF(LST+LZ2+L),BUF(LST+1+K),
97 + BUF(LST+LZ2+L-1),BUF(LST+LZ2+L+1),SIGMA)
99 LP=LZ1+LZ+1+2*(NXSEC-1)
100 BUF(LST+LP)=BUF(LST+1+K)
101 BUF(LST+LP+1)=BUF(LST+K+2)+SIGMA
104 C ALL THE POINTS IN THE FIRST ARRAY HAVE NOW BEEN USED
107 BUF(LST+LP)=BUF(LST+LZ2+L)
108 BUF(LST+LP+1)=BUF(LST+LZ2+L+1)
112 C THE ENERGY POINTS COINCIDE
114 LP=LZ1+LZ+1+2*(NXSEC-1)
115 BUF(LST+LP)=BUF(LST+LZ2+L)
116 BUF(LST+LP+1)=BUF(LST+2+K)+BUF(LST+LZ2+L+1)
119 IF((L.LT.LZ).AND.(K.LT.LZ1))GO TO 50
120 IF((L.GT.LZ).AND.(K.LT.LZ1))GO TO 60
121 IF((L.LT.LZ).AND.(K.GT.LZ1))GO TO 80
122 C FINISHED MIXING NOW THIN
126 BUF(LST+NXSEC2)=BUF(LST+LP+L)
127 BUF(LST+NXSEC2+1)=BUF(LST+LP+L+1)
131 C CHECK TO SEE IF AT END OF CROSS SECTION ARRAY
138 BUF(LST+1+N)=BUF(LST+LP+L)
139 BUF(LST+2+N)=BUF(LST+LP+L+1)
144 C ESTIMATE THE CROSS SECTION AT KI NODES
145 CALL CTERP(BUF(LST+LP+L-2*KI),BUF(LST+LP+L2),
146 + BUF(LST+LP+L-2*I+2),BUF(LST+LP+L-2*KI+1),
147 + BUF(LST+LP+L2+1),SIGMA)
148 ER=ABS(SIGMA-BUF(LST+LP+L-2*I+3))
149 C IF ERROR IS WITHIN ALLOWABLE TOLERANCE, CHECK NEXT POINT
150 ERMAX=BUF(LST+LP+L-2*I+3)*TOL
151 IF(ER.LE.ERMAX)GO TO 130
152 C NOT WITHIN ALLOWABLE TOLERANCE, MUST ADD NODE L-2 TO MESH
153 IF(L.GT.3.AND.KI.GT.1) L = L - 2
156 BUF(LST+1+N)=BUF(LST+LP+L)
157 BUF(LST+2+N)=BUF(LST+LP+L+1)
161 C ALL KI POINTS ARE WITHIN ALLOWABLE TOLERANCE
162 C CHECK THE NEXT POINT
165 C FINISHED WITH MEDIUM J, NOW STORE IN CORE
169 ISIGTS(J)=LAST+1-LMOX3
173 C FINISHED MIXING AND THINING
176 170 WRITE(IOUT,10000)BUF(LST+1),BUF(LST+LZ2)
177 10000 FORMAT(' MICAP: ERROR-BEGINNING ENERGY DOES NOT START AT 1.-5',
183 10100 FORMAT(' MICAP: NOT ENOUGH ROOM TO MIX CROSS SECTIONS',/,5X,
184 +'SPACE AVAILABLE=',I10,/,5X,'SPACE NEEDED=',I10)
185 190 PRINT '('' CALOR: ERROR in XSECN3 ====> STOP'')'