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
|
*----
* Nom : Fessenheim.x2m
* Type : fichier DONJON
*----
* First start-up of Fessenheim-1, 2 and Bugey-2 PWRs, in hot zero power
* state
* Author : V. Salino (IRSN), 02/2021
*
* Source :
* 'Contribution a l'elaboration et a la qualification d'un schema de
* calcul pour la gestion des reacteurs PWR, a l'aide du systeme Neptune
* Suivi du reacteur Fessenheim 2', E. Kamha, Ph.D. Thesis, Universite
* Paris-Sud Centre d'Orsay, 1981.
* Link : https://inis.iaea.org/
* collection/NCLCollectionStore/_Public/18/076/18076909.pdf
* See also :
* - 'Incertitudes et ajustements de donnees nucleaires au moyen de
* methodes deterministes, probabilistes et de mesures effectuees sur
* des reacteurs a eau sous pression', V. Salino, Ph.D. Thesis, École
* Polytechnique de Montreal, 2022.
* Link : https://publications.polymtl.ca/10545/
* - https://github.com/IRSN/SalinoPhD
*----
* Definition STRUCTURES, MODULES et PROCEDURES
*----
SEQ_ASCII aREFL :: FILE './REFL.ascii' ;
SEQ_ASCII aUOX210 :: FILE './UOX210.ascii' ;
SEQ_ASCII aUOX310 :: FILE './UOX310.ascii' ;
SEQ_ASCII aUOX260_Py12 :: FILE './UOX260_Py12.ascii' ;
SEQ_ASCII aUOX260_Py16 :: FILE './UOX260_Py16.ascii' ;
SEQ_ASCII aUOX260_Py20 :: FILE './UOX260_Py20.ascii' ;
SEQ_ASCII aUOX310_Py12 :: FILE './UOX310_Py12.ascii' ;
SEQ_ASCII aUOX310_Py16 :: FILE './UOX310_Py16.ascii' ;
XSM_FILE REFL UOX210 UOX310 UOX260_Py12 UOX260_Py16 UOX260_Py20
UOX310_Py12 UOX310_Py16 ;
LINKED_LIST GeoRes Track System Flux Matex MacroTot Fmap MicroFuel
GeoCoeur Thermo List Idetec PowerARO ActivARO ;
MODULE TRIVAT: TRIVAA: FLUD: GREP: DELETE: END: FLPOW: RESINI: THM:
NSST: NSSF: ;
PROCEDURE InterpCP0 GetTechData GeoCoreCP0 ThermaExpans
DetFissChamb ;
PROCEDURE assertS ;
*----
* Retrieve cross sections from ASCII files
*----
REFL := aREFL ;
UOX210 := aUOX210 ;
UOX310 := aUOX310 ;
UOX260_Py12 := aUOX260_Py12 ;
UOX260_Py16 := aUOX260_Py16 ;
UOX260_Py20 := aUOX260_Py20 ;
UOX310_Py12 := aUOX310_Py12 ;
UOX310_Py16 := aUOX310_Py16 ;
*----
* Modelling parameters
*----
STRING Gestion := 'FSH' ; ! FSH=Fessenheim
REAL CB := 1325.0 ; ! ppm
*----
* Choice of reflector modelling :
* - TousPaliers
* - MargCpy
* - MargCpyAdjus
*----
STRING TypeRefl := "TousPaliers" ;
STRING CondLimite ;
*----
* If and only if TousPaliers is being used :
* Palier :
* - CP0_900
* MethodRefl :
* - Lefebvre-Leb
* - Koebke-a
*----
STRING Palier := "CP0_900" ;
STRING MethodRefl := "Lefebvre-Leb" ;
ECHO "TypeRefl =" TypeRefl ;
ECHO "Palier =" Palier ;
ECHO "MethodRefl =" MethodRefl ;
*----
* Geometry description
*----
REAL dx z1 z2 ;
GeoCoeur GeoRes Matex Fmap := GeoCoreCP0 :: >>dx<< >>z1<< >>z2<< ;
*----
* Variables for thermalhydraulics
*----
REAL CoreFlowRate CoreFlowByp ;
REAL Tinlet OpePressure dmod tfuel tclad ;
REAL Prel Ptot Pnom ; (* MWth *)
REAL NbAss NbFuelPin NbPinAssXY ;
REAL rTubeEx rCladFuel eCladFuel rFuel ;
List := GetTechData :: <<Gestion>> 'UOX' 0 'None' 'DEPLPARAMAVG' ;
GREP: List :: GETVAL 'dmod' 1 >>dmod<< ;
GREP: List :: GETVAL 'tmod' 1 >>Tinlet<< ;
GREP: List :: GETVAL 'tfuel' 1 >>tfuel<< ;
EVALUATE tclad := 0.12 tfuel * 0.88 Tinlet * + ;
List := DELETE: List ;
List := GetTechData :: <<Gestion>> 'UOX' 0 'None' 'GENERAL' ;
GREP: List :: GETVAL 'OpePressure' 1 >>OpePressure<< ;
GREP: List :: GETVAL 'CoreFlowRate' 1 >>CoreFlowRate<< ;
GREP: List :: GETVAL 'CoreFlowByp' 1 >>CoreFlowByp<< ;
GREP: List :: GETVAL 'PowMWth' 1 >>Pnom<< ;
GREP: List :: GETVAL 'NbAss' 1 >>NbAss<< ;
GREP: List :: GETVAL 'NbFuelPin' 1 >>NbFuelPin<< ;
GREP: List :: GETVAL 'NbPinAssXY' 1 >>NbPinAssXY<< ;
List := DELETE: List ;
List := GetTechData :: <<Gestion>> 'UOX' 0 'None' 'DISTANCES' ;
GREP: List :: GETVAL 'rTubeEx' 1 >>rTubeEx<< ;
GREP: List :: GETVAL 'rCladFuel' 1 >>rCladFuel<< ;
GREP: List :: GETVAL 'eCladFuel' 1 >>eCladFuel<< ;
GREP: List :: GETVAL 'rFuel' 1 >>rFuel<< ;
List := DELETE: List ;
REAL rCladFuelIn := rCladFuel eCladFuel - ;
REAL DUMMY_R0 := 0.0 ;
ThermaExpans :: <<rTubeEx>> "Zr4" <<Tinlet>> "Distance" 'TIH'
<<DUMMY_R0>> <<DUMMY_R0>>
>>rTubeEx<< ;
ThermaExpans :: <<rCladFuel>> "Zr4" <<tclad>> "Distance" 'TIH'
<<DUMMY_R0>> <<DUMMY_R0>>
>>rCladFuel<< ;
ThermaExpans :: <<rCladFuelIn>> "Zr4" <<tclad>> "Distance" 'TIH'
<<DUMMY_R0>> <<DUMMY_R0>>
>>rCladFuelIn<< ;
ThermaExpans :: <<rFuel>> "UO2" <<tfuel>> "Distance" 'TIH'
<<DUMMY_R0>> <<DUMMY_R0>>
>>rFuel<< ;
* The unit of GetTechData is centimeters, while THM expects meters.
EVALUATE rTubeEx := rTubeEx 100.0 / ;
EVALUATE rCladFuel := rCladFuel 100.0 / ;
EVALUATE rCladFuelIn := rCladFuelIn 100.0 / ;
EVALUATE rFuel := rFuel 100.0 / ;
REAL NbTube := NbPinAssXY 2.0 ** NbFuelPin - ;
REAL Tot_tub := rTubeEx 2.0 ** $Pi_R * NbTube * ; ! m2
REAL Tot_pin := rCladFuel 2.0 ** $Pi_R * NbFuelPin * ; ! m2
REAL sass := dx 100.0 / 2.0 ** ; ! m2
REAL asssect := sass Tot_tub - Tot_pin - ; ! m2
REAL coresect := NbAss asssect * ; ! m2
* The 2x2 meshing implies dividing the number of rods by the same
* amount, in order to correctly calculate the area available for the
* hydraulic flow.
EVALUATE NbFuelPin := NbFuelPin 4.0 / ;
EVALUATE NbTube := NbTube 4.0 / ;
* Convert flow rate from [kg/h] (from GetTechData) into [m3/h] (for
* THM). Also, remove the bypass flow.
EVALUATE CoreFlowRate := CoreFlowRate 1000.0 * ! [kg/h] to [g/h]
dmod / ! [g/h] to [cm3/h]
1.0E+6 / ! [cm3/g] to [m3/h]
1.0 CoreFlowByp - * ;
* Convert temperatures into Kelvin, for proper THM usage and proper
* cross section interpolation
EVALUATE Tinlet := Tinlet 273.15 + ;
EVALUATE tfuel := tfuel 273.15 + ;
*----
* Variables used for hot zero power physics testing
*----
Fmap := RESINI: Fmap :: SET-PARAM 'C-BORE' <<CB>>
SET-PARAM 'D-COOL' <<dmod>>
SET-PARAM 'T-FUEL' <<tfuel>> ;
MicroFuel MacroTot Matex Fmap := InterpCP0 Matex Fmap
REFL UOX210 UOX310 UOX260_Py12 UOX260_Py16 UOX260_Py20 UOX310_Py12
UOX310_Py16 :: <<CB>> <<TypeRefl>> <<Palier>> <<MethodRefl>> ;
STRING Solver := 'ANM' ;
*STRING Solver := 'FiniteElem' ;
IF Solver 'ANM' = THEN
Track := NSST: GeoRes ::
TITLE 'REP900 TESTCASE'
MAXR 1000000 ANM ;
Flux := NSSF: Track MacroTot ::
EDIT 2 NUPD 100 3 1.0E-6 EXTE 500 1.0E-5 LEAK quadratic ;
ELSEIF Solver 'FiniteElem' = THEN
Track := TRIVAT: GeoRes ::
MAXR 1000000 DUAL 2 3 ;
System := TRIVAA: MacroTot Track ;
Flux := FLUD: System Track ::
EDIT 2 ADI 4 EXTE 1.0E-6 ACCE 5 3 ;
System := DELETE: System ;
ENDIF ;
EVALUATE Prel := 1.0E-9 ; ! 0% PN
EVALUATE Ptot := Pnom Prel * ;
PowerARO Fmap := FLPOW: Fmap Flux Track Matex ::
EDIT 2 PTOT <<Ptot>> PRINT DISTR POWER ;
Thermo Fmap := THM: Fmap ::
EDIT 0
ASSMB <<NbFuelPin>> <<NbTube>>
CWSECT <<coresect>> <<CoreFlowRate>>
INLET <<OpePressure>> <<Tinlet>>
RADIUS <<rFuel>> <<rCladFuelIn>> <<rCladFuel>> <<rTubeEx>> ;
ActivARO := DetFissChamb Track Flux MicroFuel Fmap ::
<<dx>> <<z1>> <<z2>> ;
assertS Flux :: 'K-EFFECTIVE' 1 1.00567544 ;
assertS ActivARO :: 'RESPON' 5 32.38300 ;
ECHO "test Fessenheim.x2m completed" ;
END: ;
QUIT "LIST" .
|