1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
|
*DECK CREXSR
SUBROUTINE CREXSR(IPCPO,LTAB,HCOMPO,NMIXT,IMPX,NISO,IBM,DERIV,UPS,
1 NAMDIR,NISOR,HISO,ITY,CONC,NBURN,KBURN,IVARTY,IBTYP,BURN0,BURN1)
*
*-----------------------------------------------------------------------
*
*Purpose:
* Read input data stream for MIX record and recover the information
* from l_compo linked list.
*
*Copyright:
* Copyright (C) 2007 Ecole Polytechnique de Montreal.
*
*Author(s):
* A. Hebert
*
*Parameters: input/output
* IPCPO pointer to l_compo information.
* HCOMPO name of l_compo linked list.
* LTAB flag: =.true. table option; =.false. compo option.
* NMIXT maximum number of material mixtures.
* IMPX printing index (=0 for no print).
* NISO 1+maximum number of extracted isotopes.
* IBM mixture number to be treated.
* NAMDIR character*12 name of directory in l_compo object.
* DERIV flag: =.true. derivative of the macrolib is computed with
* respect to burn1.
* UPS flag: =.true. no up-scatering cross section will be stored.
* NISOR 1+number of extracted isotopes.
* HISO hollerith name information for extracted isotopes.
* ITY =0: do not process the isotope; =1: use number density
* stored in conc(i); =2: use number density stored in compo.
* CONC user defined number density.
* NBURN number of burnup steps in compo linked list.
* BURN0 user defined initial burnup.
* BURN1 user defined final burnup: if burn0=burn1 => a simple
* interpolation is performed; if burn0<burn1 => a time-average
* calculation is performed.
* KBURN =0: no burnup parameters; =1: use mw day/tonne of initial
* heavy elements.
* IVARTY index of the exit burnup used to compute derivatives. Set to
* zero to avoid taking the derivative.
* IBTYP type of interpolation: =1 time-average; =2 instantaneous;
* derivative with respect to a single exit burnup.
*
*-----------------------------------------------------------------------
*
USE GANLIB
*----
* SUBROUTINE ARGUMENTS
*----
TYPE(C_PTR) IPCPO
INTEGER NMIXT,IMPX,NISO,IBM,NISOR,NBURN,KBURN,IVARTY,IBTYP,
1 HISO(3*NISO),ITY(NISO)
LOGICAL DERIV,UPS,LTAB
CHARACTER NAMDIR*12,HCOMPO*12
REAL CONC(NISO),BURN0,BURN1
*----
* LOCAL VARIABLES
*----
PARAMETER(NSTATE=40,IOUT=6)
TYPE(C_PTR) JPCPO
INTEGER IPAR(NSTATE)
CHARACTER TEXT12*12,TEXT*12,CGRPNM*12
DOUBLE PRECISION DFLOT
*
KBURN=0
ITY(:NISO)=0
ITY(1)=2
*----
* RECOVER INFORMATION
*----
IBM=0
TEXT12='MIX'
10 IF(TEXT12.EQ.'MIX')THEN
IVARTY=0
IBTYP=0
IF(IBM.NE.0)CALL XABORT('@CREXSR: MIX ALREADY SELECTED.')
CALL REDGET(ITYP,IBM,FLOT,TEXT,DFLOT)
IF(ITYP.NE.1)CALL XABORT('@CREXSR: INTEGER DATA EXPECTED.')
IF(IBM.GT.NMIXT)CALL XABORT('@CREXSR: INVALID MIX INDEX.')
CALL REDGET(ITYP,NITMA,FLOT,NAMDIR,DFLOT)
IF(ITYP.NE.3)CALL XABORT('@CREXSR: CHARACTER DATA EXPECTED.')
IF(IMPX.GT.0)WRITE(6,'(/27H CREXSR: ACCESS DIRECTORY '',A12,
1 17H'' IN COMPO FILE '',A12,2H''.)') NAMDIR,HCOMPO
JPCPO=LCMGID(IPCPO,NAMDIR)
CALL LCMGET(JPCPO,'PARAM',IPAR)
NISOR=IPAR(2)
NBURN=IPAR(4)
IF(NISOR.GT.1)CALL LCMGET(JPCPO,'ISOTOPESNAME',HISO)
ELSEIF(TEXT12.EQ.'I-BURNUP')THEN
IF(LTAB )CALL XABORT('@CREXSR: INVALID OPTION I-BURNUP WITH'
1 //' FUEL MAP OBJECT.')
IF(NBURN.LE.1)CALL XABORT('@CREXSR: NO BURNUP INFORMATION.')
KBURN=1
CALL REDGET(ITYP,NITMA,BURN0,TEXT,DFLOT)
IF(ITYP.NE.2)CALL XABORT('@CREXSR: REAL DATA EXPECTED(1).')
BURN1=BURN0
ELSEIF(TEXT12.EQ.'T-BURNUP')THEN
IF(LTAB )CALL XABORT('@CREXSR: INVALID OPTION T-BURNUP WITH'
1 //' FUEL MAP OBJECT.')
IF(NBURN.LE.1)CALL XABORT('@CREXSR: NO BURNUP INFORMATION.')
KBURN=1
CALL REDGET(ITYP,NITMA,BURN0,TEXT,DFLOT)
IF(ITYP.NE.2)CALL XABORT('@CREXSR: REAL DATA EXPECTED(2).')
CALL REDGET(ITYP,NITMA,BURN1,TEXT,DFLOT)
IF(ITYP.NE.2)CALL XABORT('@CREXSR: REAL DATA EXPECTED(3).')
IF(BURN1.LE.BURN0)CALL XABORT('@CREXSR: INVALID BURN1.')
ELSEIF(TEXT12.EQ.'MICRO')THEN
IF(NISO.LE.1)CALL XABORT('NO EXTRACTED ISOTOPES IN L_COMPO.')
20 CALL REDGET(ITYP,NITMA,FLOT,TEXT,DFLOT)
IF(ITYP.NE.3)CALL XABORT('@CREXSR: CHARACTER DATA EXPECTED.')
IF(TEXT.EQ.'ALL')THEN
DO 30 I=2,NISO
ITY(I)=2
30 CONTINUE
ELSEIF(TEXT.EQ.'ENDMIX')THEN
TEXT12=TEXT
GOTO 10
ELSEIF(TEXT.EQ.'UPS')THEN
TEXT12=TEXT
GOTO 10
ELSE
DO 50 I=1,NISO
WRITE(CGRPNM,'(3A4)') (HISO(3*(I-1)+J),J=1,3)
IF(CGRPNM.EQ.TEXT)THEN
CALL REDGET(ITYP,NITMA,FLOT,TEXT,DFLOT)
IF(ITYP.EQ.2)THEN
CONC(I)=FLOT
ITY(I)=1
ELSEIF((ITYP.EQ.3).AND.(TEXT.EQ.'*'))THEN
ITY(I)=2
ELSE
CALL XABORT('@CREXSR: REAL NUMBER OR * EXPECTED.')
ENDIF
GOTO 20
ENDIF
50 CONTINUE
CALL XABORT('@CREXSR: UNABLE TO MATCH ISOTOPE'//TEXT//'.')
ENDIF
ELSEIF(TEXT12.EQ.'DERIV')THEN
DERIV=.TRUE.
ELSEIF(TEXT12.EQ.'TIMAV-BURN')THEN
IBTYP=1
ELSEIF(TEXT12.EQ.'INST-BURN')THEN
IBTYP=2
ELSEIF(TEXT12.EQ.'AVG-EX-BURN') THEN
IBTYP=3
CALL REDGET(INDIC,IVARTY,FLOTT,TEXT12,DFLOT)
IF(INDIC.NE.1) CALL XABORT('CREXSR: INTEGER DATA EXPECTED'
1 //'(AVG-EX-BURN).')
ELSEIF(TEXT12.EQ.'UPS')THEN
UPS=.TRUE.
ELSEIF(TEXT12.EQ.'ENDMIX')THEN
IF(LTAB)THEN
IF(NBURN.LE.0)CALL XABORT('@CREXSR: NO BURNUP INFORMATION '
1 //'FOR THIS MIXTURE.')
ELSE
IF((KBURN.EQ.0).AND.(NBURN.GT.1))CALL XABORT('@CREXSR: BUR'
1 //'NUP INTEGRATION OPTION REQUIRED.')
ENDIF
RETURN
ELSE
WRITE(IOUT,'(A40)')'@CREXSR: MIX SHOULD FINISH WITH ENDMIX.'
CALL XABORT('@CREXSR: WRONG KEYWORD '//TEXT12//'.')
ENDIF
CALL REDGET(ITYP,NITMA,FLOT,TEXT12,DFLOT)
IF(ITYP.NE.3)CALL XABORT('@CREXSR: CHARACTER DATA EXPECTED.')
GOTO 10
END
|