summaryrefslogtreecommitdiff
path: root/Donjon/data/rep900_msap.x2m
blob: 0a19039d9da7c0cf5deee52cc9b8aff247939b40 (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
*----
*  Name          : rep900_msap.x2m
*  Type          : DONJON CLE2000 procedure
*
*  Local parameters:
*    densB1   boron density for the first calculation
*    densB2   boron density for the second calculation
*
*  Calculation options:
*    Splitx   Radial mesh-splitting of assemblies
*    Splitz   Axial mesh-splitting of assemblies
*    TypeCal  Boron concentration computation option: "critical" or
*             "fixed"
*
*----
*  STRUCTURES, MODULES and PROCEDURES definitions
*----
LINKED_LIST GeoCoeur Track Flux Sap L0 Reseau Matex
            Lib Macro2 Fmap ;
MODULE      TRIVAT: GREP: FIND0: UTL: DELETE: ABORT: END: ;

PROCEDURE   GetDim GeoCo SetFuelMap SetParam ThermoParam ;
PROCEDURE   assertS ;
SEQ_ASCII   _ASaphyb ;
REAL        DELTA REFVALUE ;
*----
*  Local Parameters
*----
REAL    densB1 := 2000.0 ;
REAL    densB2 := 1000.0 ;
*----
*  Calculation options
*----
INTEGER Splitx Splitz := 1 1        ;
STRING  TypeCal       := "critical" ;
REAL    powi := 2775.0 ;

REAL Rcomb1 Rcomb2 Rcomb3 Rcomb4 
     R_int_TG R_ext_TG R_int_TI R_ext_TI R_int_G R_ext_G 
     Cote CoteL
     RmodeN1 RmodeN2 
     R_ext_G2 R_ext_TGm R_ext_TIm
     N_U5_UOX N_U5_MOX
     N_Pu8 N_Pu9 N_Pu0 N_Pu1 N_Pu2 N_Am1
     densU_UOX densU_MOX densPu_MOX
     teneur1_Pu teneur2_Pu teneur3_Pu
     temp_comb temp_mode dens_mode
     temp_comb_0 temp_mode_0 dens_mode_0 ;

*----
*  Recover the Multicompo
*----
Sap := _ASaphyb ;
UTL: Sap :: DIR ;

REAL ORF IRC ORC IRCGT ORCGT ORAG ORAN 
     IRCA ORCA ORDET ORDETC Lame LPitch Height ;

REAL pbore_0 := 500. ; ! natural boron concentration in ppm

  GetDim ::
    >>Rcomb1<< >>Rcomb2<< >>Rcomb3<< >>Rcomb4<<
    >>R_int_TG<< >>R_ext_TG<< >>R_int_TI<< >>R_ext_TI<<
    >>R_int_G<< >>R_ext_G<< >>Cote<< >>Lame<< >>CoteL<<
    >>RmodeN1<< >>RmodeN2<< >>R_ext_G2<< >>R_ext_TGm<< >>R_ext_TIm<<
    >>N_U5_UOX<< >>N_U5_MOX<< >>N_Pu8<< >>N_Pu9<< >>N_Pu0<<
    >>N_Pu1<< >>N_Pu2<< >>N_Am1<< >>densU_UOX<< >>densU_MOX<<
    >>densPu_MOX<< >>teneur1_Pu<< >>teneur2_Pu<< >>teneur3_Pu<<
    >>temp_comb_0<< >>temp_mode_0<< >>dens_mode_0<< ;

EVALUATE temp_comb temp_mode dens_mode := 800.0 600.0 0.659 ;

EVALUATE
     ORF IRC ORC IRCGT ORCGT
     ORAG ORAN IRCA ORCA
     ORDET ORDETC
     Lame LPitch Height
     :=
     Rcomb4 R_int_TG R_ext_TG R_int_TI R_ext_TI
     R_int_TG R_ext_TG R_int_TI R_ext_TI
     R_int_TG R_ext_TG
     Lame Cote 10.0
     ;

REAL rPavX := 17.0 ; ! assemblage 17 x 17
INTEGER iPavX := 17 ; ! assemblage 17 x 17

REAL    dx   := rPavX LPitch * 2.0 Lame * + ;
INTEGER MaxR := iPavX iPavX * 33 * Splitx * Splitx * Splitz * ;
INTEGER Iter := 1 ;
REAL keff1 keff2 keffn ;
REAL Y1 Y2 ROOT YNEW ;
REAL densB ;
LOGICAL CONV ;

GeoCoeur Matex := GeoCo  ::
   <<Splitx>> <<Splitz>> <<MaxR>> <<dx>> ;

Track := TRIVAT: GeoCoeur ::
   EDIT 1 MAXR <<MaxR>> DUAL 2 3 ;

*--
* Fuel map definition
*--
Fmap Matex := SetFuelMap Matex :: <<dx>> ;

Fmap := SetParam Fmap :: <<densB1>> <<temp_comb_0>> <<temp_mode_0>>
        <<dens_mode_0>> ;

*--
* Calculation
*--
Fmap Matex Flux := ThermoParam Fmap Matex Sap Track
 :: <<powi>> <<densB1>> <<pbore_0>> <<temp_comb_0>> <<temp_mode_0>>
    <<dens_mode_0>> ;

GREP: Flux   ::
  GETVAL 'K-EFFECTIVE ' 1  >>keff1<<  ;

ECHO "densB1=" densB1 "K-effective 1 = " keff1   ;
IF Splitx Splitz * 1 = THEN
  assertS Flux :: 'K-EFFECTIVE' 1 0.9939350 ;
ELSEIF Splitx Splitz * 4 = THEN
  assertS Flux :: 'K-EFFECTIVE' 1 0.9940079 ;
ENDIF ;

IF TypeCal "critical" = THEN

  Flux DELETE: Flux ;

  Fmap Matex Flux := ThermoParam Fmap Matex Sap Track
   :: <<powi>> <<densB2>> <<pbore_0>> <<temp_comb_0>> <<temp_mode_0>>
      <<dens_mode_0>> ;

  GREP: Flux   ::
    GETVAL 'K-EFFECTIVE ' 1  >>keff2<<   ;
  ECHO "densB2=" densB2 "K-effective    2 = " keff2  ;
  IF Splitx Splitz * 1 = THEN
    assertS Flux :: 'K-EFFECTIVE' 1 1.024997 ;
  ELSEIF Splitx Splitz * 4 = THEN
    assertS Flux :: 'K-EFFECTIVE' 1 1.025040 ;
  ENDIF ;

  EVALUATE Y1 := 1.0 1.0 keff1 / - ;
  EVALUATE Y2 := 1.0 1.0 keff2 / - ;
  L0 := FIND0: :: ITMAX 20 TOL 1.0E-4
                  POINT X <<densB1>> Y <<Y1>>
                  POINT X <<densB2>> Y <<Y2>>
                  >>CONV<< >>ROOT<< ;
  REPEAT

    Flux DELETE: Flux ;

    EVALUATE densB := ROOT ;

    Fmap Matex Flux := ThermoParam Fmap Matex Sap Track
     :: <<powi>> <<densB>> <<pbore_0>> <<temp_comb_0>> <<temp_mode_0>>
        <<dens_mode_0>> ;

    GREP: Flux   ::
      GETVAL 'K-EFFECTIVE ' 1  >>keffn<<   ;
    ECHO "K-effective iter " Iter "et bore " ROOT " = " keffn   ;

    EVALUATE YNEW  := 1.0 1.0 keffn / - ;
    L0 := FIND0: L0 :: Y <<YNEW>>
                       >>CONV<< >>ROOT<< ;

    EVALUATE Iter := Iter 1 + ;

  UNTIL CONV ;
  ECHO "Zero is =" ROOT ;
  IF Splitx Splitz * 1 = THEN
    EVALUATE REFVALUE := 1.804303E+03 ;
  ELSEIF Splitx Splitz * 4 = THEN
    EVALUATE REFVALUE := 1.807026E+03 ;
  ENDIF ;
  EVALUATE DELTA := ROOT REFVALUE - REFVALUE / ABS ;
  IF DELTA 5.0E-4 < THEN
    ECHO "TEST SUCCESSFUL; DELTA=" DELTA ;
  ELSE
    ECHO "------------" ;
    ECHO "TEST FAILURE" ;
    ECHO "------------" ;
    ECHO "REFERENCE=" REFVALUE " CALCULATED=" ROOT ;
    ABORT: ;
  ENDIF ;

ENDIF ;

ECHO "test rep900_msap.x2m completed" ;
END: ;
QUIT "LIST" .