summaryrefslogtreecommitdiff
path: root/Donjon/src/XENCAL.f
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 /Donjon/src/XENCAL.f
Initial commit from Polytechnique Montreal
Diffstat (limited to 'Donjon/src/XENCAL.f')
-rw-r--r--Donjon/src/XENCAL.f116
1 files changed, 116 insertions, 0 deletions
diff --git a/Donjon/src/XENCAL.f b/Donjon/src/XENCAL.f
new file mode 100644
index 0000000..2ed0230
--- /dev/null
+++ b/Donjon/src/XENCAL.f
@@ -0,0 +1,116 @@
+*DECK XENCAL
+ SUBROUTINE XENCAL(IPLIB,IPPOW,NB,NCH,NGRP,NMIX,NBISO,XEN)
+*
+*-----------------------------------------------------------------------
+*
+*Purpose:
+* Compute the Xenon distribution according to the bundle flux
+*
+*Copyright:
+* Copyright (C) 2010 Ecole Polytechnique de Montreal
+*
+*Author(s):
+* M. Guyot
+*
+*Parameters: input/output
+* IPLIB adress of the L_LIBRARY
+* IPPOW adress of the L_POWER
+* NB number of fuel bundles per channel
+* NCH number of channels
+* NGRP number of energy groups
+* NMIX number of mixtures present in the library
+* NBISO number of isotopes
+* XEN xenon concentrations in each bundle
+*
+*-----------------------------------------------------------------------
+*
+ USE GANLIB
+*----
+* SUBROUTINE ARGUMENTS
+*----
+ TYPE(C_PTR) IPLIB,IPPOW
+ INTEGER NB,NCH,NGRP,NMIX
+ REAL XEN(NMIX)
+*----
+* LOCAL VARIABLES
+*----
+ INTEGER ICH,IB,IGRP,IBM
+ REAL TAUF(NMIX,NGRP),TAUX(NMIX,NGRP),XLAMBDA,GAMMAI,GAMMAX,CF,TF,
+ 1 TX
+ TYPE(C_PTR) JPLIB,KPLIB,LPLIB,MPLIB
+*----
+* ALLOCATABLE ARRAYS
+*----
+ INTEGER, ALLOCATABLE, DIMENSION(:) :: IMIX
+ REAL, ALLOCATABLE, DIMENSION(:) :: SIGX,SIGF
+ REAL, ALLOCATABLE, DIMENSION(:,:,:) :: FLUB
+ CHARACTER(LEN=12), ALLOCATABLE, DIMENSION(:) :: HNAMIS
+*----
+* SCRATCH STORAGE ALLOCATION
+* SIGX microscopic capture cross section of Xe-135
+* SIGF macroscopic fission cross section
+* FLUB bundle fluxes
+*----
+ ALLOCATE(SIGX(NGRP),SIGF(NMIX),FLUB(NCH,NB,NGRP))
+ ALLOCATE(HNAMIS(NBISO),IMIX(NBISO))
+*----
+* SET THE YIELD AND THE DECAY CONSTANTE FOR XENON
+*----
+ XLAMBDA = 2.09E-5
+ GAMMAI = 0.0631
+ GAMMAX = 0.0045
+ CF=1.0E-24
+*----
+* COMPUTE FISSION AND XENON REACTION RATES IN EACH BUNDLE
+*----
+ FLUB(:NCH,:NB,:NGRP)=0.0
+ TAUF(:NMIX,:NGRP)=0.0
+ TAUX(:NMIX,:NGRP)=0.0
+ CALL LCMGET(IPPOW,'FLUX-BUND',FLUB)
+ CALL LCMSIX(IPLIB,'MACROLIB',1)
+ JPLIB=LCMGID(IPLIB,'GROUP')
+ CALL LCMSIX(IPLIB,' ',2)
+ CALL LCMGTC(IPLIB,'ISOTOPESUSED',12,NBISO,HNAMIS)
+ CALL LCMGET(IPLIB,'ISOTOPESMIX',IMIX)
+ LPLIB=LCMGID(IPLIB,'ISOTOPESLIST')
+*
+ DO 10 IGRP=1,NGRP
+ KPLIB=LCMGIL(JPLIB,IGRP)
+ CALL LCMGET(KPLIB,'NFTOT',SIGF)
+ DO 20 ICH=1,NCH
+ DO 30 IB=1,NB
+ IBM=NCH*(IB-1)+ICH
+ ISO=0
+ DO JSO=1,NBISO
+ IF((HNAMIS(JSO).EQ.'Xe135').AND.(IMIX(JSO).EQ.IBM)) THEN
+ ISO=JSO
+ GO TO 35
+ ENDIF
+ ENDDO
+ CALL XABORT('XENCAL: UNABLE TO FIND ISOTOPE=Xe135.')
+ 35 MPLIB=LCMGIL(LPLIB,ISO)
+ CALL LCMGET(MPLIB,'NG',SIGX)
+ TAUX(IBM,IGRP)=TAUX(IBM,IGRP)+FLUB(ICH,IB,IGRP)*
+ + SIGX(IGRP)
+ TAUF(IBM,IGRP)=TAUF(IBM,IGRP)+FLUB(ICH,IB,IGRP)*
+ + SIGF(IBM)
+ 30 CONTINUE
+ 20 CONTINUE
+ 10 CONTINUE
+*
+ DO 40 IBM=1,NMIX
+ TF=0.0
+ TX=0.0
+ DO 50 IGRP=1,NGRP
+ TF=TF+TAUF(IBM,IGRP)
+ TX=TX+TAUX(IBM,IGRP)
+ 50 CONTINUE
+ XEN(IBM)=CF*(GAMMAX+GAMMAI)*TF/(XLAMBDA+TX*CF)
+ 40 CONTINUE
+*----
+* SCRATCH STORAGE DEALLOCATION
+*----
+ DEALLOCATE(IMIX,HNAMIS)
+ DEALLOCATE(FLUB,SIGF,SIGX)
+ RETURN
+ END