**************************************************************** * * * 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 <> DELTA FACTOR MIXMIN <> MIXMAX <> ; 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 <> ; 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 <> VAR-VAL-MAX ALL <> ; 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 <> CST-QUAD-EPS <> 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 <> ; END: ;