summaryrefslogtreecommitdiff
path: root/Dragon/data/rep900_mco_proc/CalcFlux.c2m
blob: eed3d79f3478f17f2edfabaf0026b915a15d565c (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
*DECK CalcFlux
*----
*  Name          : CalcFlux.c2m
*  Type          : DRAGON procedure
*  Use           : Two-level flux calculation using the extended
*                  Le Tellier scheme.
*  Author        : A. Hebert, based on a procedure from R. Vallerent
*
*  Procedure called as: 
*
*  LIBRARY2 FLUX1 FLUX2 BURN164 LIBEQ := CalcFlux LIBRARY2 FLUX1
*    FLUX2 BURN164 LIBEQ LIBRARY TRACKSS TRACKN1 TRACKN2 TRKFILN2
*    :: (data) ;
*
*  Input data   :
*    LIBRARY    : Microlib with subgroups
*    LIBRARY2   : Self-shielded microlib
*    TRACKSS    : Tracking of the self-shielding geometry
*    TRACKN1    : Tracking of the level 1 geometry
*    TRACKN2    : Tracking of the level 2 geometry
*    TRKFILN2   : Sequential tracking file of the level 2 geometry
*    FLUX1      : Multigroup flux of the first level
*    FLUX2      : Multigroup flux of the second level
*    BURN164    : Burnup object of level 2
*  Output data  :
*    LIBRARY2   : Self-shielded microlib
*    FLUX1      : Multigroup flux of the first level
*    FLUX2      : Multigroup flux of the second level
*    BURN164    : Burnup object of level 2
*    LIBEQ      : 26-group microlib
*  Parameters   :
*    istep      : Burnup step index corresponding to the calculation
*    Fuel       : Type of fuel ("MOX" or "UOX")
*    NbRegions  : Number of regions (32 for MOX, 20 or 32 for UOX)
*    BUend      : Burnup corresponding to the calculation
*    BUnextSS   : Burnup corresponding to the next self-shielding
*                 calculation
*    Fuelpwr    : Fuel power in MW/tonne

PARAMETER LIBRARY2 FLUX1 FLUX2 BURN164 LIBEQ LIBRARY TRACKSS TRACKN1
      TRACKN2 TRKFILN2 ::
      EDIT 1 
          ::: LINKED_LIST LIBRARY2 FLUX1 FLUX2 BURN164 LIBEQ LIBRARY
      TRACKSS TRACKN1 TRACKN2 ;
          ::: SEQ_BINARY TRKFILN2 ;
   ;
*                                                                      ;
*----
*  Modules used in this procedure
*----
MODULE LIB: ASM: FLU: EDI: EVO: GREP: ABORT: DELETE: END: ;
PROCEDURE Autop1 Autop2 ConcLIBEQ MultLIBEQ_20 MultLIBEQ_32 ;
LINKED_LIST EDITION SYS ;
REAL B2 Kinf1 Kinf2 Keff2 Tend ;

STRING Fuel ;
INTEGER istep NbRegions ;
REAL BUend BUnextSS Fuelpwr ;
   :: >>istep<< >>Fuel<< >>NbRegions<< >>BUend<< >>BUnextSS<<
      >>Fuelpwr<< ;

  EVALUATE Tend := BUend Fuelpwr / ;
  ECHO "-----------------------------------------------------------" ;
  ECHO "Two-level flux calculation at step=" istep ;
  ECHO "BURNUP_sortie = " BUend "Next SS = " BUnextSS ;
  IF BUend BUnextSS - ABS 1E-5 < THEN
    ECHO "Perform a self-shielding calculation" ;
    ECHO "-----------------------------------------------------------" ;
    IF istep 1 = THEN
      LIBRARY2 := Autop1 LIBRARY TRACKSS :: <<Fuel>> <<NbRegions>> ;
    ELSE
      LIBRARY2 := Autop2 LIBRARY2 LIBRARY TRACKSS
                  :: <<Fuel>> <<NbRegions>> ;
    ENDIF ;
  ELSE
    ECHO "No self-shielding calculation" ;
    ECHO "-----------------------------------------------------------" ;
  ENDIF ;
************************************************************************
* BEGIN FLUX CALCULATION                                               *
************************************************************************
  SYS := ASM: LIBRARY2 TRACKN1 ::
    EDIT 0 ARM ;

  IF istep 1 = THEN
    FLUX1 := FLU: SYS LIBRARY2 TRACKN1
             :: EDIT 0 TYPE B B1 SIGS ;
  ELSE
    FLUX1 := FLU: FLUX1 SYS LIBRARY2 TRACKN1
             :: EDIT 0 TYPE B B1 SIGS ;
  ENDIF ;

  GREP: FLUX1 :: GETVAL 'B2  B1HOM   ' 1 1 1 >>B2<< ;
  ECHO "B2-1 = " B2 " at BU = " BUend ;

  GREP: FLUX1 :: GETVAL 'K-INFINITY  ' 1 1 1 >>Kinf1<< ;
  ECHO "K-inf1_sortie is " Kinf1 " at BU = " BUend ;

*----
*  26 groups energy condensation
*----

  EDITION := EDI: FLUX1 LIBRARY2 TRACKN1 ::
    EDIT 0
    MICR ALL
    MERG MIX
    COND  10  14  18  26  33  40  49  56  65  74  86 196  227
         230 233 238 241 244 247 254 259 263 267 272 277 
    SAVE ON COND26
  ;

  LIBEQ := EDITION ::
    STEP UP COND26
  ;

  SYS := DELETE: SYS ;

*----
*  Second level flux calculation (MOC)
*----

* added by remi(

  IF NbRegions 20 = THEN
    LIBEQ := MultLIBEQ_20 LIBEQ ;
  ELSEIF NbRegions 32 = THEN
    LIBEQ := MultLIBEQ_32 LIBEQ ;
  ENDIF ;

  IF istep 1 > THEN
    LIBEQ := ConcLIBEQ LIBEQ BURN164 :: <<istep>> ;
  ENDIF ;

  LIBEQ := LIB: LIBEQ :: EDIT 0 MACR MIXS ;
* )added by remi

  SYS := ASM: LIBEQ TRACKN2 TRKFILN2 ::
    EDIT 0 ARM ;

  IF istep 1 = THEN
    FLUX2 := FLU: SYS LIBEQ TRACKN2 TRKFILN2 ::
      EDIT 0
      TYPE K B1 PNL BUCK <<B2>>
      THER 5 5E-5 EXTE 30 1E-5 UNKT 1E-4 ;
  ELSE
    FLUX2 := FLU: FLUX2 SYS LIBEQ TRACKN2 TRKFILN2 ::
      EDIT 0
      TYPE K B1 PNL BUCK <<B2>>
      THER 5 5E-5 EXTE 30 1E-5 UNKT 1E-4 ;
  ENDIF ;

  GREP: FLUX2 :: GETVAL 'K-INFINITY  ' 1 1 1 >>Kinf2<< ;
  ECHO "K-inf2_sortie is " Kinf2 " at BU = " BUend ;

  GREP: FLUX2 :: GETVAL 'K-EFFECTIVE ' 1 1 1 >>Keff2<< ;
  ECHO "K-eff2_sortie is " Keff2 " at BU = " BUend ;

  GREP: FLUX2 :: GETVAL 'B2  B1HOM   ' 1 1 1 >>B2<< ;
  ECHO "B2-2 = " B2 " at BU = " BUend ;

  SYS EDITION := DELETE: SYS EDITION ;
************************************************************************
* END FLUX CALCULATION                                                 *
************************************************************************

IF istep 1 = THEN
  BURN164 LIBEQ := EVO: LIBEQ FLUX2 TRACKN2 ::
    EDIT 0
    SAVE <<Tend>> DAY POWR <<Fuelpwr>>
  ;
ELSE
  BURN164 LIBEQ := EVO: BURN164 LIBEQ FLUX2 TRACKN2 ::
    EDIT 0
    SAVE <<Tend>> DAY POWR <<Fuelpwr>>
  ;
ENDIF ;

END: ;
QUIT .