From 7dfcc480ba1e19bd3232349fc733caef94034292 Mon Sep 17 00:00:00 2001 From: stainer_t Date: Mon, 8 Sep 2025 13:48:49 +0200 Subject: Initial commit from Polytechnique Montreal --- .../data/Equivalence_SPH_APEX_proc/SPHPicardRT.c2m | 96 ++++++++++++++++++++++ .../data/Equivalence_SPH_APEX_proc/SPHPicardSN.c2m | 96 ++++++++++++++++++++++ .../data/Equivalence_SPH_APEX_proc/SPH_RT_Proc.c2m | 70 ++++++++++++++++ .../data/Equivalence_SPH_APEX_proc/SPH_SN_Proc.c2m | 68 +++++++++++++++ PyGan/data/Equivalence_SPH_APEX_proc/Umzone5x5.c2m | 43 ++++++++++ PyGan/data/Equivalence_SPH_APEX_proc/assertS.c2m | 36 ++++++++ 6 files changed, 409 insertions(+) create mode 100644 PyGan/data/Equivalence_SPH_APEX_proc/SPHPicardRT.c2m create mode 100644 PyGan/data/Equivalence_SPH_APEX_proc/SPHPicardSN.c2m create mode 100644 PyGan/data/Equivalence_SPH_APEX_proc/SPH_RT_Proc.c2m create mode 100644 PyGan/data/Equivalence_SPH_APEX_proc/SPH_SN_Proc.c2m create mode 100644 PyGan/data/Equivalence_SPH_APEX_proc/Umzone5x5.c2m create mode 100644 PyGan/data/Equivalence_SPH_APEX_proc/assertS.c2m (limited to 'PyGan/data/Equivalence_SPH_APEX_proc') diff --git a/PyGan/data/Equivalence_SPH_APEX_proc/SPHPicardRT.c2m b/PyGan/data/Equivalence_SPH_APEX_proc/SPHPicardRT.c2m new file mode 100644 index 0000000..09f7cfd --- /dev/null +++ b/PyGan/data/Equivalence_SPH_APEX_proc/SPHPicardRT.c2m @@ -0,0 +1,96 @@ +**************************************************************** +* * +* Procedure : SPHPicardRT.c2m * +* Purpose : Compute SPH factors using a fixed point approach * +* Author : A. Hebert * +* * +* CALL : * +* Macro2 Optim := SPHPicardRT 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: * +* fmin : minimum acceptable correction factor * +* fmax : maximum acceptable correction factor * +* epsout : convergence criterion for outer iterations * +* IterEmax : maximum number of iterations * +* * +**************************************************************** +PARAMETER MACRO2 OPTIM MACRO1 MACROGEOM TRACK :: + ::: LINKED_LIST MACRO2 OPTIM MACRO1 MACROGEOM TRACK ; ; +MODULE TRIVAA: FLUD: GREP: OUT: FPSPH: MAC: ERROR: DELETE: DREF: END: ; +LINKED_LIST SYSTEM CALC EDIT GPTA ; +LOGICAL Conv ; +REAL Keff fmin fmax epsout ; +DOUBLE rmsval ; +INTEGER IterE IterEmax ; + :: >>fmin<< >>fmax<< >>epsout<< >>IterEmax<< ; + +!**************************************** +!**************************************** +!********** SPH ITERATIONS ********** +!**************************************** +!**************************************** + +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 2 ADI 3 EXTE 1.0E-7 200 ; + + 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 :: HREA 'NFTOT' ; + ENDIF ; + IF IterE 1 = THEN + OPTIM := FPSPH: EDIT MACRO1 :: EDIT 2 SPH PN + VAR-VAL-MIN <> + VAR-VAL-MAX <> + OUT-STEP-EPS <> OUT-CONV-TST >>Conv<< ; + ELSE + OPTIM := FPSPH: OPTIM EDIT MACRO1 :: EDIT 1 + VAR-VAL-MIN <> + VAR-VAL-MAX <> + OUT-CONV-TST >>Conv<< ; + ENDIF ; + GPTA OPTIM := DREF: OPTIM CALC TRACK EDIT MACRO1 :: + EDIT 1 NODERIV RMS >>rmsval<< ; + ECHO "outer iteration=" IterE "rmsval=" rmsval D_TO_R "Keff=" Keff ; + GPTA EDIT SYSTEM CALC := DELETE: GPTA EDIT SYSTEM CALC ; + MACRO2 := MACRO2 MACRO1 ; + MACRO2 := MAC: MACRO2 OPTIM ; + +UNTIL Conv IterE IterEmax > + ; +*---- +* VERIFICATION CALCULATION +*---- +SYSTEM := TRIVAA: MACRO2 TRACK :: EDIT 0 ; +CALC := FLUD: SYSTEM TRACK :: EDIT 2 ADI 3 EXTE 1.E-07 200 ; + +EDIT := OUT: CALC MACROGEOM MACRO2 TRACK :: EDIT 0 INTG MIX ; + +ECHO "Error statistics after SPH correction" ; +ERROR: MACRO1 EDIT :: HREA 'NFTOT' ; +END: ; diff --git a/PyGan/data/Equivalence_SPH_APEX_proc/SPHPicardSN.c2m b/PyGan/data/Equivalence_SPH_APEX_proc/SPHPicardSN.c2m new file mode 100644 index 0000000..056fef6 --- /dev/null +++ b/PyGan/data/Equivalence_SPH_APEX_proc/SPHPicardSN.c2m @@ -0,0 +1,96 @@ +**************************************************************** +* * +* Procedure : SPHPicardSN.c2m * +* Purpose : Compute SPH factors using a fixed point approach * +* Author : A. Hebert * +* * +* CALL : * +* Macro2 Optim := SPHPicardSN 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: * +* fmin : minimum acceptable correction factor * +* fmax : maximum acceptable correction factor * +* epsout : convergence criterion for outer iterations * +* IterEmax : maximum number of iterations * +* * +**************************************************************** +PARAMETER MACRO2 OPTIM MACRO1 MACROGEOM TRACK :: + ::: LINKED_LIST MACRO2 OPTIM MACRO1 MACROGEOM TRACK ; ; +MODULE ASM: FLU: GREP: OUT: FPSPH: MAC: ERROR: DELETE: DREF: END: ; +LINKED_LIST SYSTEM CALC EDIT GPTA ; +LOGICAL Conv ; +REAL Keff fmin fmax epsout ; +DOUBLE rmsval ; +INTEGER IterE IterEmax ; + :: >>fmin<< >>fmax<< >>epsout<< >>IterEmax<< ; + +!**************************************** +!**************************************** +!********** SPH ITERATIONS ********** +!**************************************** +!**************************************** + +MACRO2 := MACRO1 ; + +EVALUATE IterE := 0 ; +REPEAT + + EVALUATE IterE := IterE 1 + ; + ECHO "#------------------------------" ; + IF IterE 10 < THEN + ECHO "#-------------" IterE "--------------" ; + ELSE + ECHO "#------------" IterE "--------------" ; + ENDIF ; + ECHO "#------------------------------" ; + + SYSTEM := ASM: MACRO2 TRACK :: EDIT 0 ARM ; + CALC := FLU: MACRO2 TRACK SYSTEM :: EDIT 1 TYPE K B0 SIGS ; + + 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 :: HREA 'NFTOT' ; + ENDIF ; + IF IterE 1 = THEN + OPTIM := FPSPH: EDIT MACRO1 :: EDIT 2 SPH SN + VAR-VAL-MIN <> + VAR-VAL-MAX <> + OUT-STEP-EPS <> OUT-CONV-TST >>Conv<< ; + ELSE + OPTIM := FPSPH: OPTIM EDIT MACRO1 :: EDIT 1 + VAR-VAL-MIN <> + VAR-VAL-MAX <> + OUT-CONV-TST >>Conv<< ; + ENDIF ; + GPTA OPTIM := DREF: OPTIM CALC TRACK EDIT MACRO1 :: + EDIT 1 NODERIV RMS >>rmsval<< ; + ECHO "outer iteration=" IterE "rmsval=" rmsval D_TO_R "Keff=" Keff ; + GPTA EDIT SYSTEM CALC := DELETE: GPTA EDIT SYSTEM CALC ; + MACRO2 := MACRO2 MACRO1 ; + MACRO2 := MAC: MACRO2 OPTIM ; + +UNTIL Conv IterE IterEmax > + ; +*---- +* VERIFICATION CALCULATION +*---- +SYSTEM := ASM: MACRO2 TRACK :: EDIT 0 ARM ; +CALC := FLU: MACRO2 TRACK SYSTEM :: EDIT 1 TYPE K B0 SIGS ; + +EDIT := OUT: CALC MACROGEOM MACRO2 TRACK :: EDIT 0 INTG MIX ; + +ECHO "Error statistics after SPH correction" ; +ERROR: MACRO1 EDIT :: HREA 'NFTOT' ; +END: ; diff --git a/PyGan/data/Equivalence_SPH_APEX_proc/SPH_RT_Proc.c2m b/PyGan/data/Equivalence_SPH_APEX_proc/SPH_RT_Proc.c2m new file mode 100644 index 0000000..fcf1648 --- /dev/null +++ b/PyGan/data/Equivalence_SPH_APEX_proc/SPH_RT_Proc.c2m @@ -0,0 +1,70 @@ +**************************************************************** +* * +* Procedure : SPH_RT_Proc.c2m * +* Purpose : Perform a transport-diffusion SPH equivalence * +* Author : A. Hebert * +* * +* CALL : * +* SPH_RT_Proc Geom ; * +* * +* Input objects: * +* Geom : macro-geometry LCM object * +* ApexName : Apex file name * +* ncals : number of calculations in the Apex file * +* * +**************************************************************** +PARAMETER Geom :: + ::: LINKED_LIST Geom ; ; +STRING ApexName ; + :: >>ApexName<< ; +INTEGER ncals ; + :: >>ncals<< ; +MODULE SPH: TRIVAT: TRIVAA: FLUD: UTL: GREP: DELETE: END: ; +LINKED_LIST TRACK MACRO2 MACRO OPTIM SYSTEM FLUX ; +HDF5_FILE APEX_FILE :: FILE <> ; +INTEGER IterEmax := 1000 ; +REAL K_EFF_REF ; +PROCEDURE SPHPicardRT assertS ; +* +ECHO "SPH_SN_Proc: ApexName=" ApexName "ncals=" ncals ; +TRACK := TRIVAT: Geom :: + TITLE 'SIMPLE 5x5 FUEL ASSEMBLY' + EDIT 0 MAXR 3000 DUAL 3 1 ; + +*---- +* Perform fixed point SPH equivalence for each branch calculation +*---- +INTEGER ical := 0 ; +REPEAT + + EVALUATE ical := ical 1 + ; + ECHO "process branch=" ical "/" ncals ; + MACRO2 := SPH: APEX_FILE :: EDIT 1 STEP AT <> MACRO OFF LEAK ; + GREP: MACRO2 :: GETVAL 'K-EFFECTIVE' 1 >>K_EFF_REF<< ; + ECHO "ical=" ical "reference k-effective=" K_EFF_REF ; + + MACRO OPTIM := SPHPicardRT MACRO2 Geom TRACK + :: 0.0 10.0 1.0E-6 <> ; + ECHO "control variables at convergence for ical=" ical ; + UTL: OPTIM :: IMPR 'VAR-VALUE' * ; + MACRO2 := DELETE: MACRO2 ; + +*---- +* Write SPH factors on APEX file +*---- + APEX_FILE := SPH: APEX_FILE OPTIM :: EDIT 1 STEP AT <> + IDEM SPOP EQUI 'EQV_DIFF_RT2' ; + OPTIM := DELETE: OPTIM ; + +*---- +* Verification calculation +*---- + SYSTEM := TRIVAA: MACRO TRACK :: EDIT 0 ; + FLUX := FLUD: SYSTEM TRACK :: EDIT 2 ADI 3 EXTE 1.E-07 200 ; + assertS FLUX :: 'K-EFFECTIVE' 1 <> ; + + MACRO SYSTEM FLUX := DELETE: MACRO SYSTEM FLUX ; +UNTIL ical ncals = ; + +ECHO "Equivalence_SPH_RT_Proc completed" ; +END: ; diff --git a/PyGan/data/Equivalence_SPH_APEX_proc/SPH_SN_Proc.c2m b/PyGan/data/Equivalence_SPH_APEX_proc/SPH_SN_Proc.c2m new file mode 100644 index 0000000..967a0c7 --- /dev/null +++ b/PyGan/data/Equivalence_SPH_APEX_proc/SPH_SN_Proc.c2m @@ -0,0 +1,68 @@ +**************************************************************** +* * +* Procedure : SPH_SN_Proc.c2m * +* Purpose : Perform a transport-diffusion SPH equivalence * +* Author : A. Hebert * +* * +* CALL : * +* SPH_SN_Proc Geom ; * +* * +* Input objects: * +* Geom : macro-geometry LCM object * +* ApexName : Apex file name * +* ncals : number of calculations in the Apex file * +* * +**************************************************************** +PARAMETER Geom :: + ::: LINKED_LIST Geom ; ; +STRING ApexName ; + :: >>ApexName<< ; +INTEGER ncals ; + :: >>ncals<< ; +MODULE SPH: SNT: ASM: FLU: UTL: GREP: DELETE: END: ; +LINKED_LIST TRACK MACRO2 MACRO OPTIM SYSTEM FLUX ; +HDF5_FILE APEX_FILE :: FILE <> ; +INTEGER IterEmax := 1000 ; +REAL K_EFF_REF ; +PROCEDURE SPHPicardSN assertS ; +* +ECHO "SPH_SN_Proc: ApexName=" ApexName "ncals=" ncals ; +TRACK := SNT: Geom :: EDIT 1 SN 4 SCAT 1 QUAD 1 ; + +*---- +* Perform fixed point SPH equivalence for each branch calculation +*---- +INTEGER ical := 0 ; +REPEAT + + EVALUATE ical := ical 1 + ; + ECHO "process branch=" ical "/" ncals ; + MACRO2 := SPH: APEX_FILE :: EDIT 1 STEP AT <> MACRO OFF LEAK ; + GREP: MACRO2 :: GETVAL 'K-EFFECTIVE' 1 >>K_EFF_REF<< ; + ECHO "ical=" ical "reference k-effective=" K_EFF_REF ; + + MACRO OPTIM := SPHPicardSN MACRO2 Geom TRACK + :: 0.0 10.0 1.0E-6 <> ; + ECHO "control variables at convergence for ical=" ical ; + UTL: OPTIM :: IMPR 'VAR-VALUE' * ; + MACRO2 := DELETE: MACRO2 ; + +*---- +* Write SPH factors on APEX file +*---- + APEX_FILE := SPH: APEX_FILE OPTIM :: EDIT 1 STEP AT <> + IDEM SPOP EQUI 'EQV_DIFF_S3' ; + OPTIM := DELETE: OPTIM ; + +*---- +* Verification calculation +*---- + SYSTEM := ASM: MACRO TRACK :: EDIT 0 ARM ; + FLUX := FLU: MACRO TRACK SYSTEM :: EDIT 1 TYPE K B0 SIGS ; + assertS FLUX :: 'K-EFFECTIVE' 1 <> ; + + MACRO SYSTEM FLUX := DELETE: MACRO SYSTEM FLUX ; +UNTIL ical ncals = ; + +ECHO "Equivalence_SPH_SN_Proc completed" ; +END: ; diff --git a/PyGan/data/Equivalence_SPH_APEX_proc/Umzone5x5.c2m b/PyGan/data/Equivalence_SPH_APEX_proc/Umzone5x5.c2m new file mode 100644 index 0000000..c51598a --- /dev/null +++ b/PyGan/data/Equivalence_SPH_APEX_proc/Umzone5x5.c2m @@ -0,0 +1,43 @@ +**************************************************************** +* * +* Procedure : Umzone5x5.c2m * +* Purpose : Define the macro-geometry * +* Author : A. Hebert * +* * +* CALL : * +* Geom := Umzone5x5 ; * +* * +* Input object: * +* ApexName : Apex file name * +* * +* Output objects: * +* Geom : macro-geometry * +* ncals : number of calculations in the Apex file * +* * +**************************************************************** +PARAMETER Geom :: + ::: LINKED_LIST Geom ; ; +MODULE GEO: HUTL: END: ; +STRING ApexName ; + :: >>ApexName<< ; +HDF5_FILE UOX_5x5 :: FILE <> ; +INTEGER ncals ; +* +REAL side1 := 1.26 ; +REAL side2 := side1 1.26 + ; +REAL side3 := side2 1.26 + ; +REAL side4 := side3 1.26 + ; +REAL side5 := side4 1.26 + ; +Geom := GEO: :: CAR2D 5 5 (*ASSEMBLY 5 X 5*) + X- DIAG X+ REFL + Y- REFL Y+ DIAG + MESHX 0.0 <> <> <> <> <> + MIX 6 5 4 5 6 + 3 2 3 5 + 1 2 4 + 3 5 + 6 +; +HUTL: UOX_5x5 :: GREP 'NCALS' 1 >>ncals<< ; + :: <> ; +END: ; diff --git a/PyGan/data/Equivalence_SPH_APEX_proc/assertS.c2m b/PyGan/data/Equivalence_SPH_APEX_proc/assertS.c2m new file mode 100644 index 0000000..1b9c714 --- /dev/null +++ b/PyGan/data/Equivalence_SPH_APEX_proc/assertS.c2m @@ -0,0 +1,36 @@ +* +* Assert procedure for non-regression testing +* Recover a value from a real array +* Author: A. Hebert +* +PARAMETER LCMNAM :: ::: LINKED_LIST LCMNAM ; ; +CHARACTER KEY ; +INTEGER ISET IPOS ; +REAL REFVALUE ; +:: >>KEY<< >>IPOS<< >>REFVALUE<< ; +INTEGER ITYLCM ; +REAL VALUE DELTA ; +DOUBLE PRECISION DVALUE ; +MODULE GREP: ABORT: END: ; +* +GREP: LCMNAM :: TYPE <> >>ITYLCM<< ; +IF ITYLCM 2 = THEN + GREP: LCMNAM :: GETVAL <> <> >>VALUE<< ; +ELSEIF ITYLCM 4 = THEN + GREP: LCMNAM :: GETVAL <> <> >>DVALUE<< ; + EVALUATE VALUE := DVALUE D_TO_R ; +ELSE + PRINT "assertS: INVALID TYPE=" ITYLCM ; + ABORT: ; +ENDIF ; +EVALUATE DELTA := VALUE REFVALUE - REFVALUE / ABS ; +IF DELTA 1.0E-4 < THEN + PRINT "TEST SUCCESSFUL; DELTA=" DELTA ; +ELSE + PRINT "------------" ; + PRINT "TEST FAILURE" ; + PRINT "------------" ; + PRINT "REFERENCE=" REFVALUE " CALCULATED=" VALUE ; + ABORT: ; +ENDIF ; +END: ; -- cgit v1.2.3