summaryrefslogtreecommitdiff
path: root/Donjon/data/rep1300_reflector_proc/reflectorOpt.c2m
blob: c66e21460b6738afe17f56e1270b145f1ba54142 (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
****************************************************************
*                                                              *
* Procedure :  reflectorOpt.c2m                                *
* Purpose   :  Compute optimal reflector parameters using      *
*              the OPTEX approach                              *
* Author    :  A. Hebert                                       *
*                                                              *
* CALL      :                                                  *
*  Macro2 Optim := reflectorOpt Macro1 Macrogeom Track         *
*                     :: (data) ;                              *
*                                                              *
*  Output object:                                              *
*    Macro2    : Corrected macrolib                            *
*    Optim     : L_OPTIMIZE object                             *
*                                                              *
*  Input objects:                                              *
*    Macro1    : Reference macrolib for the macro-geometry     *
*    Macrogeom : Macro-geometry                                *
*    Track     : Tracking of the macro-geometry                *
*                                                              *
*  Input data:                                                 *
*    mat1      : maximum mixture index in the core             *
*    mat2      : maximum mixture index in the core+reflector   *
*    fmin      : minimum acceptable correction factor          *
*    fmax      : maximum acceptable correction factor          *
*    epsout    : convergence criterion for outer iterations    *
*                                                              *
****************************************************************
PARAMETER  MACRO2 OPTIM MACRO1 MACROGEOM TRACK ::
  ::: LINKED_LIST MACRO2 OPTIM MACRO1 MACROGEOM TRACK ; ;
MODULE DLEAK: TRIVAA: FLUD: GREP: OUT: DREF: GPTFLU: DELETE:
       DELTA: GRAD: PLQ: MAC: ERROR: END: ;
LINKED_LIST DMACRO1 SYSTEM CALC EDIT DSYSTEM GPTD GPTA DCALCA ;
INTEGER LConv mat1p1 IterE nlf ;
REAL Keff rmsval ;
LOGICAL Conv ;
STRING htype ;
INTEGER IterEmax := 1000 ;
INTEGER mat1 mat2 ;
  :: >>mat1<< >>mat2<< ;
REAL fmin fmax epsout ;
  :: >>fmin<< >>fmax<< >>epsout<< ;

!****************************************
!****************************************
!*******   EXTERNAL ITERATIONS   ********
!****************************************
!****************************************

GREP: TRACK :: GETVAL 'STATE-VECTOR' 30 >>nlf<< ;
IF nlf 0 = THEN
   ECHO "Diffusion theory" ;
   EVALUATE htype := "DIFF" ;
ELSE
   ECHO "SPN theory" ;
   EVALUATE htype := "NTOT1" ;
ENDIF ;

EVALUATE mat1p1 := mat1 1 + ;
DMACRO1 OPTIM := DLEAK: MACRO1 ::
    EDIT 2
    TYPE <<htype>> DELTA FACTOR MIXMIN <<mat1p1>> MIXMAX <<mat2>> ;
     
MACRO2 := MACRO1 ;

EVALUATE IterE := 0 ;
REPEAT

  EVALUATE IterE := IterE 1 + ;
  ECHO "#------------------------------" ;
  IF IterE 10 < THEN
    ECHO "#-------------" IterE "--------------" ;
  ELSE
    ECHO "#------------" IterE "--------------" ;
  ENDIF ;
  ECHO "#------------------------------" ;

  SYSTEM := TRIVAA: MACRO2 TRACK :: EDIT 0 ;
  CALC := FLUD: SYSTEM TRACK ::
      EDIT 0 ADI 5 EXTE 300 1.0E-6 ACCE 5 3 ADJ ;
      
  GREP: CALC :: GETVAL 'K-EFFECTIVE ' 1 >>Keff<< ;

  EDIT := OUT: CALC MACROGEOM MACRO2 TRACK ::
      EDIT 0 INTG MIX ;
  IF IterE 1 = THEN
     ECHO "Error statistics before correction" ;
     ERROR: MACRO1 EDIT :: NREG <<mat1>> ;
  ENDIF ;
*----
* IMPLICIT SOLUTION.
* SOLUTION OF AN ADJOINT FIXED SOURCE EIGENVALUE PROBLEM.
*----
  GPTA OPTIM := DREF: OPTIM CALC TRACK EDIT MACRO1 ::
     EDIT 1 RMS >>rmsval<< ;
  DCALCA := GPTFLU: GPTA CALC SYSTEM TRACK ::
      EDIT 0 ADI 5 EXTE 300 1.0E-6 ACCE 5 3 IMPLICIT FROM-TO ALL ;
  ECHO "iter=" IterE "rmsval=" rmsval "Keff=" Keff ;
  EDIT := DELETE: EDIT ;
*----
* DIRECT SOURCE CALCULATION
*----
  DSYSTEM := TRIVAA: MACRO2 TRACK DMACRO1 :: EDIT 0 DERI ;
  GPTD := DELTA: CALC SYSTEM DSYSTEM TRACK :: EDIT 0 ;
  SYSTEM DSYSTEM GPTA := DELETE: SYSTEM DSYSTEM GPTA ;
*----
* IMPLICIT GRADIENT CALCULATION
*----
  OPTIM := GRAD: OPTIM DCALCA GPTD :: EDIT 2
       VAR-VAL-MIN ALL <<fmin>>
       VAR-VAL-MAX ALL <<fmax>>
  ;
  CALC DCALCA GPTD := DELETE: CALC DCALCA GPTD ;
*----
* COMPUTE NEW CONTROL VARIABLES BY SOLVING A QUASI-LINEAR PROBLEM
*----
  IF IterE 1 = THEN
    OPTIM := PLQ: OPTIM ::
       EDIT 1
       METHOD SIMPLEX
       STEP-REDUCT PARABOLIC
       OUT-STEP-LIM 0.1
       OUT-STEP-EPS <<epsout>>
       CST-QUAD-EPS <<epsout>>
       CALCUL-DX
       OUT-CONV-TST >>Conv<<
    ;
  ELSE
    OPTIM := PLQ: OPTIM ::
       EDIT 1
       CALCUL-DX
       OUT-CONV-TST >>Conv<<
    ;
  ENDIF ;
  GREP: OPTIM :: GETVAL STATE-VECTOR 4 >>LConv<< ; 
  ECHO "Convergence" Conv LConv ;

  IF LConv 1 <  THEN
    ECHO "Outer iteration --> no convergence" ;
  ENDIF ;
*----
* UPDATE MACROLIB WITH NEW CONTROL VARIABLES
*----
  MACRO2 := MACRO2 MACRO1 :: ERAS ;
  MACRO2 := MAC: MACRO2 OPTIM ;

UNTIL Conv IterE IterEmax > + ;
*----
* VERIFICATION CALCULATION
*----
SYSTEM := TRIVAA: MACRO2 TRACK :: EDIT 0 ;
CALC := FLUD: SYSTEM TRACK ::
      EDIT 0 ADI 5 EXTE 300 1.0E-6 ACCE 5 3 ;

EDIT := OUT: CALC MACROGEOM MACRO2 TRACK ::
      EDIT 0 INTG MIX ;

ECHO "Error statistics after correction" ;
ERROR: MACRO1 EDIT :: NREG <<mat1>> ;
END: ;