summaryrefslogtreecommitdiff
path: root/PyGan/data/Equivalence_SPH_APEX_proc
diff options
context:
space:
mode:
authorstainer_t <thomas.stainer@oecd-nea.org>2025-09-08 13:48:49 +0200
committerstainer_t <thomas.stainer@oecd-nea.org>2025-09-08 13:48:49 +0200
commit7dfcc480ba1e19bd3232349fc733caef94034292 (patch)
tree03ee104eb8846d5cc1a981d267687a729185d3f3 /PyGan/data/Equivalence_SPH_APEX_proc
Initial commit from Polytechnique Montreal
Diffstat (limited to 'PyGan/data/Equivalence_SPH_APEX_proc')
-rw-r--r--PyGan/data/Equivalence_SPH_APEX_proc/SPHPicardRT.c2m96
-rw-r--r--PyGan/data/Equivalence_SPH_APEX_proc/SPHPicardSN.c2m96
-rw-r--r--PyGan/data/Equivalence_SPH_APEX_proc/SPH_RT_Proc.c2m70
-rw-r--r--PyGan/data/Equivalence_SPH_APEX_proc/SPH_SN_Proc.c2m68
-rw-r--r--PyGan/data/Equivalence_SPH_APEX_proc/Umzone5x5.c2m43
-rw-r--r--PyGan/data/Equivalence_SPH_APEX_proc/assertS.c2m36
6 files changed, 409 insertions, 0 deletions
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 <<fmin>>
+ VAR-VAL-MAX <<fmax>>
+ OUT-STEP-EPS <<epsout>> OUT-CONV-TST >>Conv<< ;
+ ELSE
+ OPTIM := FPSPH: OPTIM EDIT MACRO1 :: EDIT 1
+ VAR-VAL-MIN <<fmin>>
+ VAR-VAL-MAX <<fmax>>
+ 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 <<fmin>>
+ VAR-VAL-MAX <<fmax>>
+ OUT-STEP-EPS <<epsout>> OUT-CONV-TST >>Conv<< ;
+ ELSE
+ OPTIM := FPSPH: OPTIM EDIT MACRO1 :: EDIT 1
+ VAR-VAL-MIN <<fmin>>
+ VAR-VAL-MAX <<fmax>>
+ 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 <<ApexName>> ;
+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 <<ical>> 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 <<IterEmax>> ;
+ 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 <<ical>>
+ 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 <<K_EFF_REF>> ;
+
+ 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 <<ApexName>> ;
+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 <<ical>> 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 <<IterEmax>> ;
+ 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 <<ical>>
+ 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 <<K_EFF_REF>> ;
+
+ 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 <<ApexName>> ;
+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 <<side1>> <<side2>> <<side3>> <<side4>> <<side5>>
+ MIX 6 5 4 5 6
+ 3 2 3 5
+ 1 2 4
+ 3 5
+ 6
+;
+HUTL: UOX_5x5 :: GREP 'NCALS' 1 >>ncals<< ;
+ :: <<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 <<KEY>> >>ITYLCM<< ;
+IF ITYLCM 2 = THEN
+ GREP: LCMNAM :: GETVAL <<KEY>> <<IPOS>> >>VALUE<< ;
+ELSEIF ITYLCM 4 = THEN
+ GREP: LCMNAM :: GETVAL <<KEY>> <<IPOS>> >>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: ;