summaryrefslogtreecommitdiff
path: root/Donjon/src/DONDRV.F
blob: ee42c616dac8acae4c2088b3f1d979c56279ce7f (plain)
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
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
*DECK DONDRV
      INTEGER FUNCTION DONDRV(HMODUL,NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
*
*-----------------------------------------------------------------------
*
*Purpose:
* Module-dependent driver for DONJON.
*
*Copyright:
* Copyright (C) 2007 Ecole Polytechnique de Montreal
*
*Author(s): 
* D. Sekki
*
*Parameters: input/output
* HMODUL  name of module to process.
* 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;
*         IENTRY=6 for HDF5 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.
*
*Parameters: output
* DONDRV  completion flag: =0 module exists; =1 does not exists.
*
*-----------------------------------------------------------------------
*
      USE GANLIB
*----
*  SUBROUTINE ARGUMENTS
*----
      CHARACTER HMODUL*(*),HENTRY(NENTRY)*12
      INTEGER IENTRY(NENTRY),JENTRY(NENTRY)
      TYPE(C_PTR) KENTRY(NENTRY)
*----
*  LOCAL VARIABLES
*----
      PARAMETER(IOUT=6)
      REAL TBEG,TEND
      DOUBLE PRECISION DMEMB,DMEMD
      CHARACTER DSR*72,NAM*72,COD*12
      LOGICAL :: DONMOD
*
      DONDRV=0
      DONMOD=.TRUE.
      CALL KDRCPU(TBEG)
      CALL KDRMEM(DMEMB)
*----
*  CALL MODULE AND PRINT CREDITS
*----
      IF(HMODUL.EQ.'NCR:')THEN
        COD='DRAGON'
        DSR='ACCESS MULTI-PARAMETER REACTOR COMPOSITION DATABASE'
        NAM='A. HEBERT'
        WRITE(IOUT,1000)HMODUL,COD,DSR,NAM
        CALL NCR(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
      ELSEIF(HMODUL.EQ.'CRE:')THEN
        COD='DONJON'
        DSR='ACCESS MONO-PARAMETER REACTOR COMPOSITION DATABASE'
        NAM='A. HEBERT, D. SEKKI'
        WRITE(IOUT,1000)HMODUL,COD,DSR,NAM
        CALL CRE(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
      ELSEIF(HMODUL.EQ.'USPLIT:')THEN
        COD='DONJON'
        DSR='LINK MATERIAL INDEX AND REACTOR GEOMETRY'
        NAM='J. KOCLAS, D. SEKKI'
        WRITE(IOUT,1000)HMODUL,COD,DSR,NAM
        CALL USPLIT(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
      ELSEIF(HMODUL.EQ.'MACINI:')THEN
        COD='DONJON'
        DSR='EXPAND MACROLIB OVER THE REACTOR GEOMETRY'
        NAM='J. KOCLAS, E. VARIN, D. SEKKI'
        WRITE(IOUT,1000)HMODUL,COD,DSR,NAM
        CALL MACINI(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
      ELSEIF(HMODUL.EQ.'RESINI:')THEN
        COD='DONJON'
        DSR='FUEL LATTICE GEOMETRY AND PROPERTIES'
        NAM='E. VARIN, D. SEKKI, R. CHAMBON'
        WRITE(IOUT,1000)HMODUL,COD,DSR,NAM
        CALL RESINI(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
      ELSEIF(HMODUL.EQ.'FLPOW:')THEN
        COD='DONJON'
        DSR='COMPUTE FLUXES AND POWERS'
        NAM='D. SEKKI'
        WRITE(IOUT,1000)HMODUL,COD,DSR,NAM
        CALL FLPOW(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
      ELSEIF(HMODUL.EQ.'DEVINI:')THEN
        COD='DONJON'
        DSR='MODELING OF ROD-DEVICES IN THE REACTOR CORE'
        NAM='D. SEKKI '
        WRITE(IOUT,1000)HMODUL,COD,DSR,NAM
        CALL DEVINI(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
      ELSEIF(HMODUL.EQ.'DSET:')THEN
        COD='DONJON'
        DSR='UPDATE DEVICES PARAMETERS'
        NAM='D. SEKKI'
        WRITE(IOUT,1000)HMODUL,COD,DSR,NAM
        CALL DSET(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
      ELSEIF(HMODUL.EQ.'MOVDEV:')THEN
        COD='DONJON'
        DSR='MOVE DEVICES IN THE REACTOR CORE'
        NAM='D. SEKKI'
        WRITE(IOUT,1000)HMODUL,COD,DSR,NAM
        CALL MOVDEV(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
      ELSEIF(HMODUL.EQ.'NEWMAC:')THEN
        COD='DONJON'
        DSR='UPDATE MACROLIB FOR DEVICES PROPERTIES'
        NAM='J. KOCLAS, D. SEKKI'
        WRITE(IOUT,1000)HMODUL,COD,DSR,NAM
        CALL NEWMAC(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
      ELSEIF(HMODUL.EQ.'DETINI:')THEN
        COD='DONJON'
        DSR='CONSTRUCT 2D AND 3D DETECTORS IN THE CORE'
        NAM='J. KOCLAS, E. VARIN, M. GUYOT'
        WRITE(IOUT,1000)HMODUL,COD,DSR,NAM
        CALL DETINI(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
      ELSEIF(HMODUL.EQ.'DETECT:')THEN
        COD='DONJON'
        DSR='COMPUTE DETECTORS READING'
        NAM='J. KOCLAS, M. GUYOT'
        WRITE(IOUT,1000)HMODUL,COD,DSR,NAM
        CALL DETECT(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
      ELSEIF(HMODUL.EQ.'TAVG:')THEN
        COD='DONJON'
        DSR='TIME-AVERAGE CALCULATION'
        NAM='D. SEKKI'
        WRITE(IOUT,1000)HMODUL,COD,DSR,NAM
        CALL TAVG(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
      ELSEIF(HMODUL.EQ.'TINST:')THEN
        COD='DONJON'
        DSR='INSTANTANEOUS CALCULATION'
        NAM='B. TOUEG'
        WRITE(IOUT,1000)HMODUL,COD,DSR,NAM
        CALL TINST(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
      ELSEIF(HMODUL.EQ.'CVR:')THEN
        COD='DONJON'
        DSR='UPDATE DATA FOR VOIDING SIMULATION'
        NAM='D. SEKKI'
        WRITE(IOUT,1000)HMODUL,COD,DSR,NAM
        CALL CVR(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
      ELSEIF(HMODUL.EQ.'LZC:')THEN
        COD='DONJON'
        DSR='MODELING OF LIQUID ZONE CONTROLLERS'
        NAM='D. SEKKI'
        WRITE(IOUT,1000)HMODUL,COD,DSR,NAM
        CALL LZC(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
      ELSEIF(HMODUL.EQ.'HST:')THEN
        COD='DONJON'
        DSR='HISTORY BASED CALCULATION SUPPORT'
        NAM='G. MARLEAU AND E. VARIN'
        WRITE(IOUT,1000)HMODUL,COD,DSR,NAM
        CALL HST(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
      ELSEIF(HMODUL.EQ.'XENON:')THEN
        COD='DONJON'
        DSR='COMPUTE THE XENON DISTRIBUTION'
        NAM='M. GUYOT'
        WRITE(IOUT,1000)HMODUL,COD,DSR,NAM
        CALL XENON(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
      ELSEIF(HMODUL.EQ.'AFM:')THEN
        COD='DONJON'
        DSR='MULTI-PARAMETER FEEDBACK MODEL'
        NAM='T. SISSAOUI'
        WRITE(IOUT,1000)HMODUL,COD,DSR,NAM
        CALL AFM(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
      ELSE IF(HMODUL.EQ.'NCR:') THEN
        COD='DONJON'
        DSR='ACCESS MULTI-PARAMETER REACTOR COMPOSITION DATABASE'
        NAM='A. HEBERT'
        WRITE(IOUT,1000)HMODUL,COD,DSR,NAM
        CALL NCR(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
      ELSE IF(HMODUL.EQ.'SCR:') THEN
        COD='DONJON'
        DSR='ACCESS MULTI-PARAMETER REACTOR SAPHYB DATABASE'
        NAM='A. HEBERT'
        WRITE(IOUT,1000)HMODUL,COD,DSR,NAM
        CALL SCR(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
#if defined(HDF5_LIB)
      ELSE IF(HMODUL.EQ.'ACR:') THEN
        COD='DONJON'
        DSR='ACCESS MULTI-PARAMETER REACTOR APEX DATABASE'
        NAM='A. HEBERT'
        WRITE(IOUT,1000)HMODUL,COD,DSR,NAM
        CALL ACR(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
      ELSE IF(HMODUL.EQ.'MCR:') THEN
        COD='DONJON'
        DSR='ACCESS MULTI-PARAMETER REACTOR MPO DATABASE'
        NAM='A. HEBERT'
        WRITE(IOUT,1000)HMODUL,COD,DSR,NAM
        CALL MCR(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
#endif /* defined(HDF5_LIB) */
      ELSE IF(HMODUL.EQ.'PCR:') THEN
        COD='DONJON'
        DSR='ACCESS MULTI-PARAMETER REACTOR PMAXS DATABASE'
        NAM='A. HEBERT'
        WRITE(IOUT,1000)HMODUL,COD,DSR,NAM
        CALL PCR(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
      ELSE IF(HMODUL.EQ.'T16CPO:') THEN
        COD='DONJON'
        DSR='INTERFACE FOR WIMS-AECL'
        NAM='G. MARLEAU'
        WRITE(IOUT,1000)HMODUL,COD,DSR,NAM
        CALL T16CPO(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
      ELSE IF(HMODUL.EQ.'THM:') THEN
        COD='DONJON'
        DSR='SIMPLIFIED THERMAL-HYDRAULICS CALCULATION'
        NAM='A. HEBERT'
        WRITE(IOUT,1000)HMODUL,COD,DSR,NAM
        CALL THM(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
      ELSE IF(HMODUL.EQ.'DLEAK:') THEN
        COD='DONJON'
        DSR='COMPUTE A DELTA MACROLIB RELATIVE TO LEAKAGE INFORMATION'
        NAM='A. HEBERT'
        WRITE(IOUT,1000)HMODUL,COD,DSR,NAM
        CALL DLEAK(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
      ELSE IF(HMODUL.EQ.'DSPH:') THEN
        COD='DONJON'
        DSR='COMPUTE A DELTA MACROLIB RELATIVE TO SPH FACTORS'
        NAM='A. HEBERT'
        WRITE(IOUT,1000)HMODUL,COD,DSR,NAM
        CALL DSPH(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
      ELSE IF(HMODUL.EQ.'DREF:') THEN
        COD='DONJON'
        DSR='SET THE GPT ADJOINT SOURCES FOR RMS REACTION RATE ERRORS'
        NAM='A. HEBERT'
        WRITE(IOUT,1000)HMODUL,COD,DSR,NAM
        CALL DREF(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
      ELSE IF(HMODUL.EQ.'GRAD:') THEN
        COD='DONJON'
        DSR='COMPUTE GRADIENTS OF SYSTEM CHARACTERISTICS'
        NAM='A. HEBERT'
        WRITE(IOUT,1000)HMODUL,COD,DSR,NAM
        CALL GRAD(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
      ELSE IF(HMODUL.EQ.'PLQ:') THEN
        COD='DONJON'
        DSR='LINEAR OPTIMIZATION PROBLEM WITH A QUADRATIC CONSTRAINT'
        NAM='A. HEBERT AND R. CHAMBON'
        WRITE(IOUT,1000)HMODUL,COD,DSR,NAM
        CALL PLQ(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
      ELSE IF(HMODUL.EQ.'LNSR:') THEN
        COD='DONJON'
        DSR='LINE OPTIMIZATION OF THE OBJECTIVE FUNCTION'
        NAM='A. HEBERT'
        WRITE(IOUT,1000)HMODUL,COD,DSR,NAM
        CALL LNSR(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
      ELSE IF(HMODUL.EQ.'SIM:') THEN
        COD='DONJON'
        DSR='PWR FUELLING SIMULATOR'
        NAM='A. HEBERT AND V. SALINO'
        WRITE(IOUT,1000)HMODUL,COD,DSR,NAM
        CALL SIM(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
      ELSE IF(HMODUL.EQ.'MCC:') THEN
        COD='DONJON'
        DSR='FUEL MAP MODIFICATION'
        NAM='M. CORDIEZ'
        WRITE(IOUT,1000)HMODUL,COD,DSR,NAM
        CALL MCC(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
      ELSE IF(HMODUL.EQ.'NAP:') THEN
        COD='DONJON'
        DSR='PIN POWER RECONSTRUCTION AND ENRICHED L_COMPO CONSTRUCTION'
        NAM='R. CHAMBON'
        WRITE(IOUT,1000)HMODUL,COD,DSR,NAM
        CALL NAP(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
      ELSE IF(HMODUL.EQ.'D2P:') THEN
        COD='DONJON'
        DSR='PMAXS INTERFACE FILE GENERATION'
        NAM='J. TAFOREAU'
        WRITE(IOUT,1000)HMODUL,COD,DSR,NAM
        CALL D2P(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
      ELSE IF(HMODUL.EQ.'ROD:') THEN
        COD='DONJON'
        DSR='CONTROL ROD INSERTION MANAGEMENT FOR PWR'
        NAM='G. TIXIER'
        WRITE(IOUT,1000)HMODUL,COD,DSR,NAM
        CALL ROD(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
      ELSE IF(HMODUL.EQ.'PKINI:') THEN
        COD='DONJON'
        DSR='POINT KINETIC INITIALIZATION MODULE'
        NAM='A. HEBERT'
        WRITE(IOUT,1000)HMODUL,COD,DSR,NAM
        CALL PKINI(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
      ELSE IF(HMODUL.EQ.'PKINS:') THEN
        COD='DONJON'
        DSR='POINT KINETIC SOLUTION AND GLOBAL FEEDBACK'
        NAM='A. HEBERT'
        WRITE(IOUT,1000)HMODUL,COD,DSR,NAM
        CALL PKINS(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
      ELSE IF(HMODUL.EQ.'IDET:') THEN
        COD='DONJON'
        DSR='DETECTOR INTEGRATED RESPONSE EVALUATION'
        NAM='A. HEBERT'
        WRITE(IOUT,1000)HMODUL,COD,DSR,NAM
        CALL IDET(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
      ELSE IF(HMODUL.EQ.'FPSPH:') THEN
        COD='DONJON'
        DSR='SINGLE SPH FACTOR FIXED POINT ITERATION'
        NAM='A. HEBERT'
        WRITE(IOUT,1000)HMODUL,COD,DSR,NAM
        CALL FPSPH(NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
      ELSE
        DONMOD=.FALSE.
        DONDRV=KDRDRV(HMODUL,NENTRY,HENTRY,IENTRY,JENTRY,KENTRY)
      ENDIF
      IF(DONMOD)THEN
        WRITE(IOUT,1001)HMODUL
        CALL KDRCPU(TEND)
        CALL KDRMEM(DMEMD)
        WRITE(IOUT,1002) HMODUL,(TEND-TBEG),REAL(DMEMD-DMEMB)
      ENDIF
      RETURN
*
 1000 FORMAT(/1X,15('~')/
     1 1X,'@BEGIN MODULE -> ',A12/
     2 1X,'@FROM CODE    -> ',A12/
     3 1X,'@DESCRIPTION  -> ',A72/
     4 1X,'@CREDITS      -> ',A72/
     5 1X,'@COPYRIGHTS   -> ECOLE POLYTECHNIQUE DE MONTREAL'/
     6 18X,'GNU LESSER GENERAL PUBLIC LICENSE'/1X,15('~')/)
 1001 FORMAT(1X,'@END MODULE -> ',A12)
 1002 FORMAT('-->>MODULE ',A12,': TIME SPENT=',F13.3,' MEMORY USAGE=',
     1 1P,E10.3)
      END