summaryrefslogtreecommitdiff
path: root/Dragon/src/AUTIT2.f
diff options
context:
space:
mode:
Diffstat (limited to 'Dragon/src/AUTIT2.f')
-rw-r--r--Dragon/src/AUTIT2.f241
1 files changed, 241 insertions, 0 deletions
diff --git a/Dragon/src/AUTIT2.f b/Dragon/src/AUTIT2.f
new file mode 100644
index 0000000..f8a45cc
--- /dev/null
+++ b/Dragon/src/AUTIT2.f
@@ -0,0 +1,241 @@
+*DECK AUTIT2
+ SUBROUTINE AUTIT2(IPTRK,IFTRAK,IPSYS,MAXTRA,KNORM,NUN,LBIN,NREG,
+ 1 NBMIX,NBISO,MAT,VOL,KEYFLX,NIRES,IAPT,CDOOR,LEAKSW,TITR,IMPX,
+ 2 CONC,SIGS,SIGT,SIGS1,DIL,PRI,UUU,DELI,ITRANC,NEXT,III,FUNKNO)
+*
+*-----------------------------------------------------------------------
+*
+*Purpose:
+* Solution of the multigroup neutron flux for a non-pij method.
+*
+*Copyright:
+* Copyright (C) 2023 Ecole Polytechnique de Montreal
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU Lesser General Public
+* License as published by the Free Software Foundation; either
+* version 2.1 of the License, or (at your option) any later version
+*
+*Author(s): A. Hebert
+*
+*Parameters: input
+* IPTRK pointer to the tracking (L_TRACK signature).
+* IFTRAK file unit number used to store the tracks.
+* IPSYS pointer to the system LCM object.
+* MAXTRA maximum number of elements in vector PRI.
+* KNORM type of cp normalization.
+* NUN number of unknowns in a single energy group.
+* LBIN number of energy groups.
+* NREG number of regions.
+* NBMIX number of mixtures in the internal library.
+* NBISO number of distinct isotopes.
+* MAT index-number of the mixture type assigned to each volume.
+* VOL volumes.
+* KEYFLX position of average fluxes in the unknown vector.
+* NIRES number of correlated resonant isotopes.
+* IAPT resonant isotope index associated with isotope I. Mixed
+* moderator if IAPT(I)=NIRES+1. Out-of-fuel isotope if
+* IAPT(I)=0.
+* CDOOR name of the geometry/solution operator.
+* LEAKSW leakage flag (LEAKSW=.true. if neutron leakage through
+* external boundary is present).
+* TITR title.
+* IMPX print flag (equal to zero for no print).
+* CONC number densities of each isotope in each mixture.
+* SIGS P0 scattering microscopic x-s.
+* SIGT total microscopic x-s.
+* SIGS1 P1 scattering microscopic x-s.
+* DIL microscopic dilution cross section of each isotope.
+* PRI info to rebuild the SCAT matrix.
+* UUU lethargy limits of the groups.
+* DELI elementary lethargy width.
+* ITRANC type of transport correction.
+* NEXT used in subroutine LIBECT.
+* III offset in PRI array.
+*
+*Parameters: output
+* FUNKNO neutron flux per unit lethargy.
+*
+*-----------------------------------------------------------------------
+*
+ USE GANLIB
+ USE DOORS_MOD
+*----
+* SUBROUTINE ARGUMENTS
+*----
+ TYPE(C_PTR) IPTRK,IPSYS
+ INTEGER IFTRAK,MAXTRA,KNORM,NUN,LBIN,NREG,NBMIX,NBISO,MAT(NREG),
+ 1 NIRES,IAPT(NBISO),KEYFLX(NREG),IMPX,ITRANC,NEXT(NBISO),
+ 2 III(NBISO+1)
+ REAL VOL(NREG),CONC(NBMIX,NBISO),SIGS(LBIN,NBISO),
+ 1 SIGT(LBIN,NBISO),SIGS1(LBIN,NBISO),DIL(NBISO),PRI(MAXTRA),
+ 2 UUU(LBIN+1),DELI,FUNKNO(NUN,LBIN)
+ LOGICAL LEAKSW
+ CHARACTER CDOOR*12,TITR*72
+*----
+* LOCAL VARIABLES
+*----
+ INTEGER, PARAMETER :: NGEFF=1
+ TYPE(C_PTR) JPSYS,KPSYS,KPSOU1(NGEFF),KPSOU2(NGEFF)
+ INTEGER NGIND(NGEFF),NBS2(NGEFF)
+ CHARACTER HSMG*131
+ LOGICAL LSOUR
+*----
+* ALLOCATABLE ARRAYS
+*----
+ INTEGER, ALLOCATABLE, DIMENSION(:) :: NLET,NPSYS
+ REAL, ALLOCATABLE, DIMENSION(:) :: DEL,SIGG,SIGTOT,SIGWIN,STIS,
+ 1 SUNKNO
+ REAL, ALLOCATABLE, DIMENSION(:,:) :: STR
+*----
+* SCRATCH STORAGE ALLOCATION
+*----
+ ALLOCATE(NLET(NBMIX),NPSYS(LBIN))
+ ALLOCATE(DEL(LBIN),SIGG(0:NBMIX),SIGTOT(0:NBMIX),SIGWIN(0:NBMIX),
+ 1 STR(LBIN,NBMIX),STIS(LBIN),SUNKNO(NUN))
+*
+ JPSYS=LCMLID(IPSYS,'GROUP',LBIN)
+ DO 10 LLL=1,LBIN
+ DEL(LLL)=UUU(LLL+1)-UUU(LLL)
+ 10 CONTINUE
+ DO 60 LLL=1,LBIN
+ NPSYS(LLL)=LLL
+*----
+* COMPUTE THE TOTAL SCATTERING CROSS SECTIONS.
+*----
+ SIGTOT(0)=0.0
+ DO 20 M=1,NBMIX
+ SIGTOT(M)=0.0
+ DO 15 K=1,NBISO
+ IF(ITRANC.NE.0) SIGTOT(M)=SIGTOT(M)-CONC(M,K)*SIGS1(LLL,K)
+ SIGTOT(M)=SIGTOT(M)+CONC(M,K)*(DIL(K)+SIGT(LLL,K))
+ 15 CONTINUE
+ 20 CONTINUE
+ IF(IMPX.GE.9) THEN
+ WRITE (6,'(//45H AUTIT2: TOTAL MACROSCOPIC CROSS SECTIONS IN ,
+ 1 5HGROUP,I5,1H:/)') LLL
+ WRITE (6,'(1X,1P,10E13.5)') (SIGTOT(MAT(NRE)),NRE=1,NREG)
+ ENDIF
+*----
+* COMPUTE THE P0 WITHIN-GROUP SCATTERING CROSS SECTIONS.
+*----
+ SIGWIN(0:NBMIX)=0.0
+ DO 50 K=1,NBISO
+ IF((IAPT(K).GT.0).AND.(IAPT(K).LE.NIRES)) THEN
+ CALL LIBECT(MAXTRA,LLL,PRI,UUU(2),DELI,DEL,NEXT(K),III(K),MML,
+ 1 STIS)
+ DO 30 M=1,NBMIX
+ SIGWIN(M)=SIGWIN(M)+CONC(M,K)*STIS(1)*SIGS(LLL,K)
+ 30 CONTINUE
+ ENDIF
+ IF(ITRANC.NE.0) THEN
+ DO 40 M=1,NBMIX
+ SIGWIN(M)=SIGWIN(M)-CONC(M,K)*SIGS1(LLL,K)
+ 40 CONTINUE
+ ENDIF
+ 50 CONTINUE
+ IF(IMPX.GE.10) THEN
+ WRITE (6,'(//45H P0 WITHIN-GROUP SCATTERING MACROSCOPIC CROSS,
+ 1 18H SECTIONS IN GROUP,I5,1H:/)') LLL
+ WRITE (6,'(1X,1P,10E13.5)') (SIGWIN(MAT(NRE)),NRE=1,NREG)
+ ENDIF
+*
+ KPSYS=LCMDIL(JPSYS,LLL)
+ CALL LCMPUT(KPSYS,'DRAGON-TXSC',NBMIX+1,2,SIGTOT(0))
+ CALL LCMPUT(KPSYS,'DRAGON-S0XSC',NBMIX+1,2,SIGWIN(0))
+ 60 CONTINUE
+*----
+* COMPUTE THE GROUPWISE RESPONSE MATRICES.
+*----
+ NANI=1
+ NW=0
+ NALBP=0
+ ISTRM=1
+ CALL DOORAV (CDOOR,JPSYS,NPSYS,IPTRK,IFTRAK,IMPX,LBIN,NREG,
+ > NBMIX,NANI,NW,MAT,VOL,KNORM,LEAKSW,TITR,NALBP,ISTRM)
+*----
+* COMPUTE THE ELASTIC SLOWING-DOWN SOURCE.
+*----
+ DO 160 LLL=1,LBIN
+ DO M=1,NBMIX
+ NLET(M)=1
+ STR(:LBIN,M)=0.0
+ ENDDO
+ DO 90 K=1,NBISO
+ IF((IAPT(K).GT.0).AND.(IAPT(K).LE.NIRES)) THEN
+ CALL LIBECT(MAXTRA,LLL,PRI,UUU(2),DELI,DEL,NEXT(K),III(K),MML,
+ 1 STIS)
+ DO 80 M=1,NBMIX
+ AUX=CONC(M,K)
+ IF(AUX.EQ.0.) GOTO 80
+ NLET(M)=MAX(NLET(M),MML)
+ DO 70 MM=1,MML
+ LLJ=LLL-MM+1
+ STR(MM,M)=STR(MM,M)+AUX*STIS(MM)*SIGS(LLJ,K)*DEL(LLJ)/DEL(LLL)
+ 70 CONTINUE
+ 80 CONTINUE
+ ENDIF
+ 90 CONTINUE
+*----
+* DILUTION SOURCE.
+*----
+ SIGG(0:NBMIX)=0.0
+ DO 110 IBM=1,NBMIX
+ DO 100 K=1,NBISO
+ IF((IAPT(K).EQ.0).OR.(IAPT(K).EQ.NIRES+1)) THEN
+ SIGG(IBM)=SIGG(IBM)+CONC(IBM,K)*SIGS(LLL,K)
+ ELSE
+ SIGG(IBM)=SIGG(IBM)+CONC(IBM,K)*DIL(K)
+ ENDIF
+ 100 CONTINUE
+ 110 CONTINUE
+ SUNKNO(:NUN)=0.0
+ CALL DOORS(CDOOR,IPTRK,NBMIX,0,NUN,SIGG,SUNKNO)
+*----
+* SCATTERING SOURCE.
+*----
+ DO 130 MM=2,LLL
+ SIGG(0:NBMIX)=0.0
+ LSOUR=.FALSE.
+ DO 120 IBM=1,NBMIX
+ IF(MM.LE.NLET(IBM)) THEN
+ LSOUR=.TRUE.
+ SIGG(IBM)=STR(MM,IBM)
+ ENDIF
+ 120 CONTINUE
+ IF(LSOUR) CALL DOORS(CDOOR,IPTRK,NBMIX,0,NUN,SIGG,SUNKNO,
+ > FUNKNO(1,LLL-MM+1))
+ 130 CONTINUE
+ IF(IMPX.GE.8) WRITE(6,'(7H GROUP=,I5,7H S=,2X,1P,9D12.4/
+ 1 (21X,9D12.4))') LLL,(SUNKNO(KEYFLX(NRE)),NRE=1,NREG)
+*----
+* FLUX SOLUTION.
+*----
+ IDIR=0
+ NGIND(1)=LLL
+ NBS2(1)=0
+ KPSOU1(1)=C_NULL_PTR
+ KPSOU2(1)=C_NULL_PTR
+ IMPX2=MAX(0,IMPX-5)
+ KPSYS=LCMDIL(JPSYS,LLL)
+ IF(CDOOR.EQ.'SYBIL') THEN
+ CALL SYBILF(KPSYS,IPTRK,IFTRAK,IMPX2,NGEFF,NGIND,IDIR,NREG,
+ 1 NUN,MAT,VOL,FUNKNO(1,LLL),SUNKNO,TITR)
+ ELSE IF(CDOOR.EQ.'SN') THEN
+ CALL SNF(KPSYS,IPTRK,IFTRAK,IMPX2,NGEFF,NGIND,IDIR,NREG,
+ 1 NBMIX,NUN,MAT,VOL,KEYFLX,FUNKNO(1,LLL),SUNKNO,TITR,
+ 2 NBS2,KPSOU1,KPSOU2)
+ ELSE
+ WRITE(HSMG,'(13HAUTIT2: DOOR ,A,20H IS NOT IMPLEMENTED.)')
+ 1 TRIM(CDOOR)
+ CALL XABORT(HSMG)
+ ENDIF
+ IF(IMPX.GE.8) WRITE(6,'(7H GROUP=,I5,7H FLUX=,2X,1P,9E12.4/
+ 1 (21X,9E12.4))') LLL,(FUNKNO(KEYFLX(NRE),LLL),NRE=1,NREG)
+ 160 CONTINUE
+*----
+* SCRATCH STORAGE DEALLOCATION
+*----
+ DEALLOCATE(SUNKNO,STIS,STR,SIGWIN,SIGTOT,SIGG,DEL)
+ DEALLOCATE(NPSYS,NLET)
+ RETURN
+ END