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
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
|
*DECK AFM
SUBROUTINE AFM(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
*
*-----------------------------------------------------------------------
*
*Purpose:
* Generate a macrolib using the AFM feedback model
*
*Copyright:
* Copyright (C) 2002 Ecole Polytechnique de Montreal
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version
*
*Author(s):
* M.T. Sissaoui
*
*Update(s):
* E. Varin, B. Dionne
*
*Parameters: input
* NENTRY number of data structures transfered to this module.
* HENTRY name of the data structures.
* IENTRY data structure type where:
* IENTRY=1 for LCM memory object;
* IENTRY=2 for XSM file;
* IENTRY=3 for sequential binary file;
* IENTRY=4 for sequential ASCII file.
* JENTRY access permission for the data structure where:
* JENTRY=0 for a data structure in creation mode;
* JENTRY=1 for a data structure in modifications mode;
* JENTRY=2 for a data structure in read-only mode.
* KENTRY data structure pointer.
*
*Reference:
* M. T. Sissaoui, G. Marleau and D. Rozon, "CANDU Reactor Simulations
* Using the Feedback Model with Actinide Burnup History," Nucl.
* Technology, 125, 197 (1999).
*
*Comments:
* The AFM: calling specifications are:
* MACRO := AFM: [ MACRO ] DBASE [ MAPFL ] :: (descafm) ;
* where
* MACRO : name of the extended \emph{macrolib}
* DBASE : name of the \emph{database} object containing fuel properties with
* respect to local parameters.
* MAPFL : name of the \emph{map} object containing fuel regions description
* and burnupinformations. This file is only required when a \emph{MACRO is
* created for fuel area.
* (descafm) : structure containing the data to module AFM:.
*
*-----------------------------------------------------------------------
*
USE GANLIB
*----
* SUBROUTINE ARGUMENTS
*----
INTEGER NENTRY,IENTRY(NENTRY),JENTRY(NENTRY)
TYPE(C_PTR) KENTRY(NENTRY)
CHARACTER HENTRY(NENTRY)*12
*----
* LOCAL VARIABLES
*----
PARAMETER (NSTATE=40)
CHARACTER TEXT12*12,HSMG*131,HSIGN*12,TEXT*5,CTITRE*72,TINFO*72
LOGICAL LMCR,LMAP
DOUBLE PRECISION DFLOTT
INTEGER IPAR(NSTATE),IDATA(NSTATE)
TYPE(C_PTR) IPLIST
*
LMCR=.FALSE.
LMAP=.FALSE.
MSFT=0
*
* PARAMETER VALIDATION.
IF(NENTRY.LE.1) CALL XABORT('AFM: 2 PARAMETER EXPECTED.')
IF((IENTRY(1).NE.1).AND.(IENTRY(1).NE.2)) CALL XABORT('AFM:'
1 //' MACROLIB LINKED LIST OR XSM FILE EXPECTED AT LHS.')
*
IF((IENTRY(2).NE.1).AND.(IENTRY(2).NE.2)) CALL XABORT('AFM:'
1 //' DATABASE LINKED LIST OR XSM FILE EXPECTED AT RHS.')
IF(JENTRY(2).NE.2) CALL XABORT('AFM: DATABASE IN READ-ONLY '
1 //'MODE EXPECTED AT RHS.')
*
CALL REDGET (INDIC,NITMA,FLOTT,TEXT,DFLOTT)
IF(INDIC.NE.3) CALL XABORT('AFM: CHARACTER DATA EXPECTED.')
IF(TEXT.EQ.'MCR') THEN
LMCR=.TRUE.
WRITE(6,'(A37)') 'AFM: GENERATION OF A SINGLE MACROLIB'
CALL REDGET (INDIC,MXSH,FLOTT,TEXT,DFLOTT)
IF(INDIC.NE.1) CALL XABORT('AFM: INTEGER DATA EXPECTED.')
ELSEIF(TEXT.EQ.'MAP') THEN
LMAP=.TRUE.
IF((IENTRY(3).NE.1).AND.(IENTRY(3).NE.2)) CALL XABORT('AFM:'
1 //' FUEL MAP LINKED LIST OR XSM FILE EXPECTED AT RHS.')
IF(JENTRY(3).NE.2) CALL XABORT('AFM: COMPO IN READ-ONLY '
1 //'MODE EXPECTED AT RHS.')
ELSE
CALL XABORT('AFM: MAP OR MCR KEY WORD EXPECTED')
ENDIF
*
ITYPE=JENTRY(1)
IPLIST=KENTRY(1)
MMIX=1
*---------------------------------------------------------------*
* CHECK THE SIGNTURE OF THE LINKED LIST OR XSM FILE
CALL LCMGTC(KENTRY(2),'SIGNATURE',12,HSIGN)
IF(HSIGN.NE.'REACTOR_XSDB') THEN
TEXT12=HENTRY(2)
CALL XABORT('AFM: SIGNATURE OF '//TEXT12//' IS '//HSIGN//
1 '. REACTOR_XSDB EXPECTED.')
ENDIF
*---------------------------------------------------------------*
* IF L_MAP IS NOT AVAILABLE AFM GENERATE ONLY A TABLE
IF(LMAP) THEN
CALL LCMGTC(KENTRY(3),'SIGNATURE',12,HSIGN)
IF(HSIGN.NE.'L_MAP') THEN
TEXT12=HENTRY(3)
CALL XABORT('AFM: SIGNATURE OF '//TEXT12//' IS '//HSIGN//
1 '. L_MAP EXPECTED.')
ENDIF
WRITE(6,'(A42)') 'AFM: GENARATION OF A MACROLIB USING L_MAP'
ENDIF
*---------------------------------------------------------------*
* READ THE INFORMATION TITLE.
CALL REDGET (INDIC,NITMA,FLOTT,TEXT,DFLOTT)
IF(INDIC.NE.3) CALL XABORT('AFM: CHARACTER DATA EXPECTED.')
IF(TEXT.EQ.'INFOR') THEN
CALL REDGET(INDIC,NITMA,FLOTT,TINFO,DFLOTT)
IF(INDIC.NE.3) CALL XABORT('AFM: CHARACTER DATA EXPECTED.')
ELSE
CALL XABORT('AFM:KEY WORD INFOR EXPECTED.')
ENDIF
*
* RECOVER SOME INFORMATIONS FROM THE DATABASE.
TEXT12='INFORMATION'
CALL LCMLEN(KENTRY(2),TEXT12,LENGT,ITYLCM)
IF(LENGT.GT.0) THEN
CALL LCMGTC(KENTRY(2),'INFORMATION',72,CTITRE)
WRITE(6,*)'INFORMATION TITLE ',TINFO
*
IF(CTITRE.NE.TINFO) THEN
CALL XABORT('AFM: INCONSISTENT TITLES '//CTITRE//
1 ' EXPECTED. INSTEAD OF ' //TINFO// ' ')
ENDIF
ELSE
CALL XABORT('AFM: DATA BASE TITLE IS NOT PROVIDED ')
ENDIF
*---------------------------------------------------------------*
* CHECK THE NAMES OF THE DIFFERENTS DIRECTORIES
CALL REDGET (INDIC,NITMA,FLOTT,TEXT,DFLOTT)
IF(INDIC.NE.3) CALL XABORT('AFM: CHARACTER DATA EXPECTED.')
IF(TEXT.NE.'DNAME') CALL XABORT('AFM:KEY WORD DNAME EXPECTED.')
CALL REDGET(INDIC,NUT,FLOTT,TEXT,DFLOTT)
IF(INDIC.NE.1) CALL XABORT('AFM: INTEGER DATA EXPECTED.')
IF(NUT.GT.1.AND.LMCR) CALL XABORT('AFM: INVALID NUMBER.')
DO 100 IJ=1,NUT
CALL REDGET (INDIC,NITMA,FLOTT,TEXT12,DFLOTT)
IF(INDIC.NE.3) CALL XABORT('AFM: CHARACTER DATA EXPECTED.')
CALL LCMLEN(KENTRY(2),TEXT12,LENGT,ITYLCM)
IF(LENGT.EQ.0) THEN
CALL XABORT('AFM: DATA NAME '//TEXT12//
1 ' DO NOT EXIST ')
ENDIF
100 CONTINUE
*---------------------------------------------------------------*
* RECOVER SOME INFORMATIONS FROM DATABASE.
* TEXT12='SIGNATURE'
CALL LCMSIX(KENTRY(2),TEXT12,1)
* RECOVER THE TITLE.
CALL LCMLEN(KENTRY(2),'TITLE',LENGT,ITYLCM)
IF(LENGT.GT.0) THEN
CALL LCMGTC(KENTRY(2),'TITLE',72,CTITRE)
ELSE
CTITRE='*** NO TITLE PROVIDED ***'
ENDIF
* READ PARAMETERS DANS L_FBM
CALL LCMGET(KENTRY(2),'PARAM',IPAR)
CALL LCMSIX(KENTRY(2),' ',2)
NGRP =IPAR(1)
NISO =IPAR(2)
NL =IPAR(3)
NBURN=IPAR(4)
IXYZ =IPAR(5)
*---------------------------------------------------------------*
IF(LMCR) THEN
NBCH=MXSH
NCCO=1
NCZO=1
ISC=4
MMIX=NBCH*NCCO
MSFT =0
ELSEIF (LMAP) THEN
* RECOVER INFORMATIONS FROM L_MAP.
* READ PARAMETERS
CALL LCMGET(KENTRY(3),'STATE-VECTOR',IPAR)
NBCH =IPAR(1)
NCCO =IPAR(2)
NCZO =IPAR(3)
ISC =IPAR(5)
MSFT =IPAR(6)
NPARM =IPAR(8)
MMIX=NBCH*NCCO
C HISTORY PARAMETER
IF(IPAR(4).NE.NGRP) THEN
WRITE(HSMG,'(A40,I5,A18,I5)') 'AFM: INCONSISTENT NB OF '
1 //'GROUPS. IN MAP =',IPAR(4),' IN REACTOR_XSDB =',NGRP
CALL XABORT(HSMG)
ENDIF
ENDIF
* MSFT IS THE TOTAL NUMBER OF SHIFT
MNPS=MSFT+2
* READ THE INPUT DATA.
* TO USE THE SAME VECTOR TO GET THE REFERENCE LOCAL PARAMETER
* IF(NISO.LT.8) THEN
* NISM=8
IF(NISO.LT.7) THEN
NISM=7
ELSE
NISM=NISO
ENDIF
IF(ITYPE.NE.0) THEN
CALL LCMGET(IPLIST,'STATE-VECTOR',IDATA)
IF(NGRP.NE.IDATA(1)) CALL XABORT('WRONG NUMBER OF ENERGY'
1 //' GROUPS IN UPDATED MACROLIB')
IF(MMIX.NE.IDATA(2)) CALL XABORT('WRONG NUMBER OF MATER'
1 //'IAL MIXTURES IN UPDATED MACROLIB')
IF(NL.NE.IDATA(3)) CALL XABORT('WRONG ORDER OF ANISOTROPY'
1 //'IN UPDATED MACROLIB')
ENDIF
*---------------------------------------------------------------*
* NTYP TYPE OF CROSS-SECTIONS CONSIDERED
NTYP=5+NL+IXYZ*2
*---------------------------------------------------------------*
* DRIVER TO COMPUTE THE FEEDBACK COEFFICIENTS.
*---------------------------------------------------------------*
CALL AFMDRV(KENTRY,NENTRY,NPARM,ITYPE,NBURN,NGRP,NISO,ISC,MNPS,
1 NL,ILEAK,NTYP,NBCH,NCCO,NCZO,NUT,CTITRE,LMCR,IXYZ,MMIX,MSFT,
2 NISM)
*---------------------------------------------------------------*
IF(JENTRY(1).EQ.0) THEN
IDATA(:NSTATE)=0
HSIGN='L_MACROLIB'
CALL LCMPTC(IPLIST,'SIGNATURE',12,HSIGN)
IDATA(1)=NGRP
IDATA(2)=MMIX
IDATA(3)=NL
IDATA(4)=1
IDATA(9)=ILEAK
CALL LCMPUT(IPLIST,'STATE-VECTOR',NSTATE,1,IDATA)
ELSE
IDATA(1)=NGRP
IDATA(2)=MMIX
IDATA(3)=1
IDATA(4)=1
IDATA(9)=ILEAK
CALL LCMPUT(IPLIST,'STATE-VECTOR',NSTATE,1,IDATA)
ENDIF
RETURN
END
|