******************************************************************************** * * * Procedure : REFL_APEX.c2m * * Purpose : Perform a reflector nodal equivalence and produce an Apex file * * Author : A. Hebert * * * * CALL : * * ApexRefl := REFL_APEX Geom FVol Param :: <> <> * * <> <> <> <> * * <> <> <> <> ; * * * * Input objects: * * Geom : macro-geometry LCM object * * FVol : volume fraction LCM object * * Param : feeding assembly global parameter LCM object * * nameFeed: APEX fine group feeding assembly file name * * nameRefl: APEX coarse group reflector file name * * Palier : type of reflector ('BEAVRS','EPR','VVER', etc.) * * htype : type of equivalence ('DF-NEM','DF-ANM','DF-RT','DF-RT-SPN') * * nlf : order of SPN approximation (odd integer). Set to 1 for * * diffusion theory. * * LibType : type of cross-section library used for the reflector * * NuclData: name of the cross-section library used for the reflector as * * set in the .access script file * * OptSph : 'SPH'/'NOSP' transform DF into ADF/keep DF * * OptNoal : 'ALBE'/'NOAL' compute albedo/force right albedo to 0 * * OptSS : 'TONE'/'NOSS' do/don't activate self-shielding of Fe56 and Cr52 * * nbZones : number of zones in the reflector * * * * Output objects: * * ApexRefl : reflector APEX file * * * ******************************************************************************** PARAMETER ApexRefl Geom FVol Param :: ::: HDF5_FILE ApexRefl ; ::: LINKED_LIST Geom FVol Param ; ; STRING nameFeed nameRefl Palier htype ; :: >>nameFeed<< >>nameRefl<< >>Palier<< >>htype<< ; INTEGER nlf ; :: >>nlf<< ; STRING LibType NuclData OptSph OptNoal OptSS ; :: >>LibType<< >>NuclData<< >>OptSph<< >>OptNoal<< >>OptSS<< ; INTEGER nbZones ; :: >>nbZones<< ; PROCEDURE GetMolarMass MetalMix CreaDilut assertS ; LINKED_LIST DONNEES Geom_refl LibDilut MACRO LibFuel MolarMasses FeNat CrNat SnNat NiNat ZrNat TiNat SiNat BNat AgNat CdNat SNat GdNat Zirc4 Incon SS304 M5 KNat InNat AIC Gd2O3 Edition MulticoAPEX TRACK TRACK_refl SYSTEM FLUX TRKFIL MCompRefl GeomRefl MacrRefl MacrFuel ; HDF5_FILE ApexFeed :: FILE <> ; MODULE GEO: ACR: ASM: FLU: EDI: APX: DELETE: UTL: HUTL: END: ABORT: MAC: SNT: TONE: GREP: MSTR: BREF: ; INTEGER ilong nbParam ; STRING paramname1 paramname2 paramname3 ; REAL paramvalu1 paramvalu2 paramvalu3 ; *---- Raviart-Thomas options ------------------------ INTEGER ielem := 3 ; INTEGER icol := 3 ; *---- Parameters ----------------------------------- ECHO "...FVol LCM object:" ; UTL: FVol :: DUMP ; ECHO "...Param LCM object:" ; UTL: Param :: DUMP ; GREP: Param :: LENGTH 'PARAMNAME' >>nbParam<< ; ECHO "number of global parameters in feeding assembly=" nbParam ; ECHO "APEX fine group feeding assembly=" nameFeed ; ECHO "APEX coarse group reflector=" nameRefl ; IF nbParam 3 > THEN ECHO "REFL_APEX: number of global parameters in feeding assembly > 3" ; ABORT: ; ENDIF ; *---- General informations ------------------------- *------------------------------------------------------ ECHO "LibType=" LibType "NuclData=" NuclData ; *------------------------------------------------------- * Procedures: - Retrieve molar masses (GetMolarMasses) * - Create Metal Mixes (MetalMix) *---- 1) Molar Masses ---------------------------------- MolarMasses := GetMolarMass :: <> <> ; *---- 2) Metal Mixes ----------------------------------- FeNat CrNat SnNat NiNat BNat ZrNat TiNat SiNat KNat AgNat CdNat SNat InNat Zirc4 Incon SS304 M5 AIC GdNat Gd2O3 := MetalMix MolarMasses :: <> ; *-------------------------------------------------------------------- *------------------------- Compute LibFuel --------------------------s *-------------------------------------------------------------------- HUTL: ApexFeed :: DIR ; IF nbParam 0 = THEN LibFuel := ACR: ApexFeed :: EDIT 3 MICRO NMIX 1 APEX ApexFeed MIX 1 ENDMIX ; ELSEIF nbParam 1 = THEN GREP: Param :: STEP UP 'PARAMNAME' GETVAL 1 1 * >>paramname1<< ; GREP: Param :: GETVAL 'PARAMVALU' 1 >>paramvalu1<< ; ECHO "PARAMNAME(" paramname1 ")=" paramvalu1 ; LibFuel := ACR: ApexFeed :: EDIT 3 MICRO NMIX 1 APEX ApexFeed MIX 1 SET <> <> ENDMIX ; ELSEIF nbParam 2 = THEN GREP: Param :: STEP UP 'PARAMNAME' GETVAL 1 1 * >>paramname1<< ; GREP: Param :: GETVAL 'PARAMVALU' 1 >>paramvalu1<< ; GREP: Param :: STEP UP 'PARAMNAME' GETVAL 2 1 * >>paramname2<< ; GREP: Param :: GETVAL 'PARAMVALU' 2 >>paramvalu2<< ; ECHO "PARAMNAME(" paramname1 ")=" paramvalu1 ; ECHO "PARAMNAME(" paramname2 ")=" paramvalu2 ; LibFuel := ACR: ApexFeed :: EDIT 3 MICRO NMIX 1 APEX ApexFeed MIX 1 SET <> <> SET <> <> ENDMIX ; ELSEIF nbParam 3 = THEN GREP: Param :: STEP UP 'PARAMNAME' GETVAL 1 1 * >>paramname1<< ; GREP: Param :: GETVAL 'PARAMVALU' 1 >>paramvalu1<< ; GREP: Param :: STEP UP 'PARAMNAME' GETVAL 2 1 * >>paramname2<< ; GREP: Param :: GETVAL 'PARAMVALU' 2 >>paramvalu2<< ; GREP: Param :: STEP UP 'PARAMNAME' GETVAL 3 1 * >>paramname3<< ; GREP: Param :: GETVAL 'PARAMVALU' 3 >>paramvalu3<< ; ECHO "PARAMNAME(" paramname1 ")=" paramvalu1 ; ECHO "PARAMNAME(" paramname2 ")=" paramvalu2 ; ECHO "PARAMNAME(" paramname3 ")=" paramvalu3 ; LibFuel := ACR: ApexFeed :: EDIT 3 MICRO NMIX 1 APEX ApexFeed MIX 1 SET <> <> SET <> <> SET <> <> ENDMIX ; ELSE ECHO "REFL_APEX: invalid value of nbParam=" nbParam ; ABORT: ; ENDIF ; *-------------------------------------------------------------------- *-------------------Reflector Equivalence procedure------------------ *-------------------------------------------------------------------- ApexRefl := APX: :: EDIT 10 NOML reflector_apex PARA 'BoronPPM' VALE FLOT PARA 'Method' VALE CHAI PARA 'Palier' VALE CHAI MACR TOUT REAC TOTA N2N FISS CHI NUFI ENER LEAK DIFF SCAT ABSO ; ! CreaDilut data in each reflector zone REAL dMod TMil fvMod fvZr4 fvInc fvSS304 fvHe ; INTEGER premierMIX ; INTEGER iscat := nlf 1 + ; TRACK := SNT: Geom :: EDIT 1 MAXR 100000 SN 16 SCAT <> ; Geom_refl := GEO: Geom :: X+ REFL ; TRACK_refl := SNT: Geom_refl :: EDIT 1 MAXR 100000 SN 16 SCAT <> ; REAL dModBas := 0.753 ; ! Densite du moderateur en entree du coeur REAL TMilBas := 286.4 ; ! Temp du reflecteur bas (soit Tmod,entree) EVALUATE TMilBas := TMilBas 273.15 + ; ! Conversion en Kelvin ! Reflector equivalence variables REAL Keff ; REAL CB ; ! ppm INTEGER iPalier ; LINKED_LIST OUT_1 MACR_TRAC MACR_FLUX ; MODULE NSST: NSSF: TRIVAT: TRIVAA: FLUD: ; *-------------------------------------------------------------------- * Boron tabulation *-------------------------------------------------------------------- INTEGER iBoreMax := 5 ; DONNEES := UTL: :: CREA BoronPPM <> = 0.0 350.0 700.0 1000.0 1400.0 ; *-------------------------------------------------------------------- * Loop on Boron CB in reflector *-------------------------------------------------------------------- INTEGER iZone ; ECHO "$$$ Branch Boron loop" ; INTEGER IndexCB := 0 ; WHILE IndexCB iBoreMax < DO EVALUATE IndexCB := IndexCB 1 + ; GREP: DONNEES :: GETVAL 'BoronPPM' <> >>CB<< ; ECHO "Boron step: " IndexCB "/" iBoreMax " Boron=" CB " ppm Palier =" Palier ; EVALUATE dMod := dModBas ; EVALUATE TMil := TMilBas ; LibDilut := LibFuel ; EVALUATE iZone := 1 ; WHILE iZone nbZones <= DO ! Reflector mixtures are defined as .ge. 2 EVALUATE premierMIX := 1 iZone + ; ECHO "First MIX : " premierMIX ; ! Recover volumic fractions in the reflector GREP: FVol :: LENGTH 'H2O' >>ilong<< ; IF ilong 0 > THEN GREP: FVol :: GETVAL 'H2O' <> >>fvMod<< ; ELSE EVALUATE fvMod := 0.0 ; ENDIF ; GREP: FVol :: LENGTH 'Zr4' >>ilong<< ; IF ilong 0 > THEN GREP: FVol :: GETVAL 'Zr4' <> >>fvZr4<< ; ELSE EVALUATE fvZr4 := 0.0 ; ENDIF ; GREP: FVol :: LENGTH 'Inc' >>ilong<< ; IF ilong 0 > THEN GREP: FVol :: GETVAL 'Inc' <> >>fvInc<< ; ELSE EVALUATE fvInc := 0.0 ; ENDIF ; GREP: FVol :: LENGTH 'SS' >>ilong<< ; IF ilong 0 > THEN GREP: FVol :: GETVAL 'SS' <> >>fvSS304<< ; ELSE EVALUATE fvSS304 := 0.0 ; ENDIF ; GREP: FVol :: LENGTH 'He' >>ilong<< ; IF ilong 0 > THEN GREP: FVol :: GETVAL 'He' <> >>fvHe<< ; ELSE EVALUATE fvHe := 0.0 ; ENDIF ; ECHO "[Refl]" " Volume fraction : " iZone ; ECHO "- H2O : " fvMod " ;" ; ECHO "- Zr4 : " fvZr4 " ;" ; ECHO "- Inc : " fvInc " ;" ; ECHO "- SS304 : " fvSS304 " ;" ; ECHO "- He : " fvHe "." ; ! Define MIX 1 in reflector macrolib LibDilut := CreaDilut LibDilut MolarMasses BNat Zirc4 Incon SS304 :: <> <> <> <> <> <> <> <> <> <> <> ; EVALUATE iZone := iZone 1 + ; ENDWHILE ; !---------------------------------------------------------- ! Resonance self-shielding of Fe56 and Cr52 in reflector !---------------------------------------------------------- IF OptSS "TONE" = THEN LibDilut := TONE: LibDilut TRACK_refl :: EDIT 1 GRMIN 7 SPH ; ENDIF ; !---------------------------------------------------------- ! Extract a macrolib from microlib !---------------------------------------------------------- MACRO := LibDilut :: STEP UP MACROLIB ; LibDilut := DELETE: LibDilut ; !---------------------------------------------------------- ! SN flux calculation in reflector !---------------------------------------------------------- SYSTEM := ASM: MACRO TRACK :: ARM ; FLUX := FLU: SYSTEM MACRO TRACK :: EDIT 0 TYPE K P1 HETE ; GREP: FLUX :: GETVAL 'K-EFFECTIVE' 1 >>Keff<< ; ECHO "SN Keff=" Keff ; OUT_1 := EDI: MACRO TRACK FLUX Geom :: EDIT 3 UPS MERGE MIX 1 2 3 3 3 3 4 0 COND 0.625 PNW_SP GOLVER SAVE ; SYSTEM FLUX MACRO := DELETE: SYSTEM FLUX MACRO ; !---------------------------------------------------------- ! Reflector equivalence procedure !---------------------------------------------------------- ECHO "htype=" htype ; ECHO "OptSph=" OptSph ; ECHO "OptNoal=" OptNoal ; IF htype 'DF-RT' = THEN GeomRefl MacrRefl := BREF: Geom OUT_1 :: EDIT 2 MIX 1 3 GAP 2 4 MODEL DF-RT <> <> NGET 1.0 1.0 SPH <> ; ELSEIF htype 'DF-RT-SPN' = THEN GeomRefl MacrRefl := BREF: Geom OUT_1 :: EDIT 2 MIX 1 3 GAP 2 4 MODEL DF-RT <> <> SPN <> NGET 1.0 1.0 SPH <> ; ELSE GeomRefl MacrRefl := BREF: Geom OUT_1 :: EDIT 2 MIX 1 3 GAP 2 4 HYPE 2 MODEL <> NGET 1.0 1.0 <> <> ; ENDIF ; !---------------------------------------------------------- ! Verification calculations !---------------------------------------------------------- ECHO "Macro-geometry used in verification calculation:" ; UTL: GeomRefl :: DUMP ; IF htype 'DF-NEM' = htype 'ERM-NEM' = + THEN MACR_TRAC := NSST: GeomRefl :: EDIT 2 TITLE 'alpha1.txt' NEM HYPE 2 ; ELSEIF htype 'DF-ANM' = htype 'ERM-ANM' = + THEN MACR_TRAC := NSST: GeomRefl :: EDIT 2 TITLE 'alpha1.txt' ANM ; ELSEIF htype 'DF-RT' = THEN MACR_TRAC := TRIVAT: GeomRefl :: TITLE "alpha.txt" DUAL <> <> ; ELSEIF htype 'DF-RT-SPN' = THEN MACR_TRAC := TRIVAT: GeomRefl :: TITLE "alpha.txt" DUAL <> <> SPN <> ; ELSE ECHO "REFL_APEX: invalid htype=" htype ; ABORT: ; ENDIF ; MacrFuel := OUT_1 :: STEP UP 'REF-CASE0001' STEP UP MACROLIB ; MACRO := MacrRefl ; MACRO := MAC: MACRO MacrFuel :: MIX 1 1 OLDL ; ! Recover fuel data for specific CASE IF htype 'DF-RT' = htype 'DF-RT-SPN' = + THEN SYSTEM := TRIVAA: MACRO MACR_TRAC ; MACR_FLUX := FLUD: SYSTEM MACR_TRAC :: EDIT 1 ; SYSTEM := DELETE: SYSTEM ; ELSE MACR_FLUX := NSSF: MACR_TRAC MACRO :: EDIT 1 ; ENDIF ; ECHO "...IndexCB=" IndexCB ; assertS MACR_FLUX :: 'K-EFFECTIVE' 1 <> ; MACRO MacrFuel OUT_1 MACR_TRAC MACR_FLUX := DELETE: MACRO MacrFuel OUT_1 MACR_TRAC MACR_FLUX ; !---------------------------------------------------------- ! APEX reflector creation !---------------------------------------------------------- IF OptSph 'SPH' = THEN Edition := EDI: MacrRefl :: EDIT 1 SAVE ; ELSE Edition := EDI: MacrRefl :: EDIT 1 ADFM SAVE ; ENDIF ; GeomRefl MacrRefl := DELETE: GeomRefl MacrRefl ; ApexRefl := APX: ApexRefl Edition :: EDIT 1 BoronPPM <> Method <> Palier <> ; Edition := DELETE: Edition ; ENDWHILE ; ! Loop over IndexCB LibFuel := DELETE: LibFuel ; END: ; QUIT "LIST" .