diff options
Diffstat (limited to 'Donjon/src/PCRDATA.f90')
| -rw-r--r-- | Donjon/src/PCRDATA.f90 | 276 |
1 files changed, 276 insertions, 0 deletions
diff --git a/Donjon/src/PCRDATA.f90 b/Donjon/src/PCRDATA.f90 new file mode 100644 index 0000000..d153429 --- /dev/null +++ b/Donjon/src/PCRDATA.f90 @@ -0,0 +1,276 @@ +MODULE PCRDATA +! +!----------------------------------------------------------------------- +! +!Purpose: +! Fortran module containing PMAXS file information. +! +!Copyright: +! Copyright (C) 2019 Ecole Polytechnique de Montreal +! +!Author(s): A. Hebert +! +!----------------------------------------------------------------------- +! + IMPLICIT NONE + INTEGER(4), PARAMETER :: Nallvar=12 + REAL(8) :: state_value(Nallvar) + + CHARACTER(2) :: all_var_nam(Nallvar) + DATA all_var_nam/'CR','DC','PC','TF','TC','IC','DM','PM','TM','IM','DN','BN'/ + INTEGER(4), PARAMETER :: svCR=1,svDC=2,svPC=3,svTF=4,svTC=5 + INTEGER(4), PARAMETER :: svIC=6,svDM=7,svPM=8,svTM=9,svIM=10 + INTEGER(4), PARAMETER :: svDN=11,svBN=12 + + REAL(8) :: Sref(Nallvar) + DATA Sref/0.0, 0.71, 600.0, 28.3, 580.0, 0.0, 0.71, 600.0, 580.0, 0.0, 0.0, 0.0 / + + LOGICAL :: validname + LOGICAL :: lHST(Nallvar), lSTT(Nallvar) + + CHARACTER(12) :: formng + CHARACTER(3) :: TIVname(4) + + INTEGER(4), PARAMETER :: xtr=1,xab=2,xnf=3,xkf=4,xxe=5,xsm=6,xfi=7 + INTEGER(4), PARAMETER :: xdcl=1,xdwr=2,xdbp=3,xdcr=4,xchi=1,BBET=1 + INTEGER(4) :: xchd,xinv, EBET,BLAM,ELAM,BDHB,EDHB,BDHL,EDHL + INTEGER(4) :: xlpk,xj1i,xj1s,xj1c + INTEGER(4) :: NXST,NLPF,iLPF,iXSTI + INTEGER(4) :: iTIV(4),ilpk,ij1c,iread_xs + + INTEGER(4) :: NGR,NDL,NDC,NAD,NCD + INTEGER(4) :: NGROUP,NDLAY,NDCAY,NADF,NZDF,NCDF,iups,Nset,NTDF + INTEGER(4) :: NHST,NBRA,NBCR,NBset,NRODS,NCOL,NROW,NPART,NROWA,NCOLA,NXSB + INTEGER(4) :: MHST,MBRA,MBCR,MBset,MRODS,MCOLA + INTEGER(4) :: N_Bran_struct,Nstat_var,ktf + INTEGER(4), DIMENSION(:), POINTER :: var_ind,NBR + REAL(8) :: iHMD,Dsat,ARWatR,ARByPa,ARConR,PITCH,XBE,YBE,minw,maxw,maxws,minws + REAL(8), DIMENSION(:,:), POINTER :: state + + LOGICAL :: ladf,lxes,lded,lj1f,lchi,lchd,linv,ldet,lyld,lcdf,lgff,lbet,lamb,ldec,lzdf + LOGICAL :: tcdf,tgff + LOGICAL :: padf,pxes,pded,pj1f,pchi,pchd,pvel,pdet,pyld,pcdf,pgff,pbet,pamb,pdec,pzdf + LOGICAL :: lcrp,lppm,lxesm,derivatives, outrange + + CHARACTER(80),DIMENSION(6) :: hcomment + + TYPE Branches_info + INTEGER(4) :: Nstat_var, ktf, NBRA + INTEGER(4), DIMENSION(:), POINTER :: var_ind !(Nstat_var) + INTEGER(4), DIMENSION(:), POINTER :: NBR !(Nstat_var) + Character(2), DIMENSION(:), POINTER :: state_nam !(NBRA) + REAL(8), DIMENSION(:,:), POINTER :: state !(Nstat_var,NBRA) + logical :: NOT_assigned + Character(2), DIMENSION(:), POINTER :: var_nam !(Nstat_var) + END TYPE Branches_info + + TYPE XSBLOCK_TYPE + REAL(8), DIMENSION(:,:), POINTER ::sig !(NGROUP,NXST) +! 1 2 3 4 5 6 7 +! xtr,xab,xnf,xkf,xfi,xxe,xsm + REAL(8), DIMENSION(:,:), POINTER ::sct,adf,cdf,gff,zdf + REAL(8), DIMENSION(:), POINTER ::LPF,det + REAL(8) :: kinf,B2,kinfB,kinfL +! Average assembly flux + REAL(8), DIMENSION(:), POINTER :: flux +! Axial surface flux, (g,bottom->top) + REAL(8), DIMENSION(:,:), POINTER :: zflx +! Radial surface flux, (g,W-S-E-N) if cart, if hex(g,NW-W-SW-SE-E-NE) + REAL(8), DIMENSION(:,:), POINTER :: rflx +! Axial current in, (g,bottom->top,i-o-n) + REAL(8), DIMENSION(:,:,:), POINTER :: zcur +! Radial surface flux, (g,W-S-E-N,i-o-n) if cart, if hex(g,NW-W-SW-SE-E-NE) + REAL(8), DIMENSION(:,:,:), POINTER :: rcur +! Groupwise yields + REAL(8), DIMENSION(:), POINTER :: yldI, yldXe, yldPm +! Xe, Sm, I, Pm Number Densities + REAL(8) :: NDXE,NDSM,NDI,NDPM + END TYPE XSBLOCK_TYPE + + TYPE BRANCH_WISE_TYPE + INTEGER(4) :: iBset + TYPE(XSBLOCK_TYPE),dimension(:),pointer:: XS(:) !(NBURN) + END TYPE BRANCH_WISE_TYPE + + TYPE PMAXS_WISE_TYPE + logical derivatives + INTEGER(4) :: NCOL,NRODS,NROW,NPART,NROWA,NCOLA + INTEGER(4) :: NHST,NBset + REAL(8), DIMENSION(:,:), POINTER :: history !(Nstat_var,NHST) + REAL(8), DIMENSION(:), POINTER :: invdiff !(NHST) + INTEGER(4), DIMENSION(:), POINTER :: base !(NHST) + REAL(8):: iHMD,Dsat,ARWatR,ARByPa,ARConR,PITCH,XBE,YBE + + TYPE(BRANCH_WISE_TYPE), DIMENSION(:,:), POINTER :: branch !(NBRA,NHST) + TYPE(HIST_TIV_TYPE), DIMENSION(:), POINTER :: TIVB !(NHST) + TYPE(Burnup_info),DIMENSION(:), POINTER :: Bset !(NBset) + END TYPE PMAXS_WISE_TYPE + + TYPE HIST_TIV_TYPE + INTEGER(4) :: iBset + TYPE(TH_INDEP_VAR),dimension(:),pointer:: TIV(:) !(NBURN) + END TYPE HIST_TIV_TYPE + + TYPE Burnup_info + INTEGER(4) :: NBURN + REAL(8),DIMENSION(:), POINTER :: burns !(NBURN) + end type Burnup_info + + TYPE TH_INDEP_VAR + REAL(8), DIMENSION(:,:),POINTER :: sig !(NGROUP,xinv) +! xchi,xchd,xinv, + REAL(8), DIMENSION(:),POINTER :: kinp !bet,lam,dhb,dhl + REAL(8) :: YLD(3) !YID,YXE,YPM + REAL(8) :: NDXE,NDSM,NDI,NDPM + REAL(8) :: POWER + REAL(8) :: DAYS + REAL(8) :: BURNUP + END TYPE TH_INDEP_VAR + + TYPE XSBLOCK_ITEM + INTEGER :: IBURN ! burnup step -- added by EPM + REAL(8) :: DELTA ! delta local variable -- added by EPM + TYPE(XSBLOCK_TYPE), POINTER :: XS + TYPE(TH_INDEP_VAR), POINTER :: TIV + END TYPE XSBLOCK_ITEM + + TYPE(PMAXS_WISE_TYPE),DIMENSION(:), POINTER :: PMAXS !(XS_F_NUM) + TYPE(PMAXS_WISE_TYPE),pointer:: PMAX + TYPE(Branches_info), DIMENSION(:), target,allocatable ::Bran_info + TYPE(Branches_info), POINTER ::bran_i + TYPE(XSBLOCK_TYPE), target,allocatable :: XSCR(:) + TYPE(XSBLOCK_TYPE), target :: XSND + TYPE(XSBLOCK_TYPE), pointer:: XS + TYPE(TH_INDEP_VAR), pointer:: TIV + +contains + +!--------------------------------------------------------------------- + SUBROUTINE AllocateXSBlock +!--------------------------------------------------------------------- + IMPLICIT NONE + + INTEGER(4) :: ireg + + IF (NADF .GT. 4) THEN + ireg = NADF + ELSE + ireg = 4 + END IF + + allocate(XS%sig(NGROUP,NXST)) + allocate(XS%sct(NGROUP,NGROUP)) + allocate(XS%flux(NGROUP)) + allocate(XS%rflx(NGROUP,ireg)) + allocate(XS%zflx(NGROUP,2)) + allocate(XS%rcur(NGROUP,ireg,3)) + allocate(XS%zcur(NGROUP,2,3)) + IF (lyld) THEN + allocate(XS%yldI(NGROUP)) + allocate(XS%yldXe(NGROUP)) + allocate(XS%yldPm(NGROUP)) + ELSE + allocate(XS%yldI(1)) + allocate(XS%yldXe(1)) + allocate(XS%yldPm(1)) + END IF + if(ladf)then + allocate(XS%adf(NGROUP,NADF)) + else + allocate(XS%adf(1,1)) + endif + if(lzdf)then + allocate(XS%ZDF(NGROUP,NZDF)) + NTDF = NADF + NZDF + else + allocate(XS%ZDF(1,1)) + NTDF = NADF + endif + if(NLPF .GT. 0)then + allocate(XS%LPF(NLPF)) + else + allocate(XS%LPF(1)) + endif + if(ldet)then + allocate(XS%det(NGROUP)) + else + allocate(XS%det(1)) + endif + if(lcdf)then + allocate(XS%cdf(NGROUP,NCDF)) + else + allocate(XS%cdf(1,1)) + endif + if(lgff.and.NRODS .GT. 0)then + allocate(XS%gff(NGROUP,NRODS)) + else + allocate(XS%gff(1,1)) + endif + + CALL Default_XS + END SUBROUTINE AllocateXSBlock + +!--------------------------------------------------------------------- + SUBROUTINE DeallocateXSBlock +!--------------------------------------------------------------------- + deallocate(XS%sig) + deallocate(XS%sct) + deallocate(XS%adf) + deallocate(XS%zdf) + deallocate(XS%cdf) + deallocate(XS%LPF) + deallocate(XS%det) + deallocate(XS%gff) + deallocate(XS%flux) + deallocate(XS%rflx) + deallocate(XS%zflx) + deallocate(XS%rcur) + deallocate(XS%zcur) + END SUBROUTINE DeallocateXSBlock + +!--------------------------------------------------------------------- + SUBROUTINE Clear_XS +!--------------------------------------------------------------------- + XS%sig=0 + XS%sct=0 + XS%adf=0 + XS%zdf=0 + XS%cdf=0 + XS%LPF=0 + XS%det=0 + XS%gff=0 + XS%flux=0 + XS%yldI=0 + XS%yldXe=0 + XS%yldPm=0 + XS%rflx=0 + XS%zflx=0 + XS%rcur=0 + XS%zcur=0 + END SUBROUTINE Clear_XS + +!--------------------------------------------------------------------- + SUBROUTINE Default_XS +!--------------------------------------------------------------------- + CALL Clear_XS + + XS%kinf = 0.0 + XS%kinfB = 1.0 + XS%kinfL = 1.0 + XS%B2 = 0.0 + + XS%ndxe = 0.0 + XS%ndsm = 0.0 + XS%ndi = 0.0 + XS%ndpm = 0.0 + + XS%adf = 1.0 + XS%zdf = 1.0 + XS%cdf = 1.0 + XS%gff = 1.0 + + XS%yldi = 0.0 + XS%yldxe = 0.0 + XS%yldpm = 0.0 + END SUBROUTINE Default_XS +END MODULE PCRDATA |
