diff options
Diffstat (limited to 'Donjon/src/D2PRFL.f')
| -rw-r--r-- | Donjon/src/D2PRFL.f | 262 |
1 files changed, 262 insertions, 0 deletions
diff --git a/Donjon/src/D2PRFL.f b/Donjon/src/D2PRFL.f new file mode 100644 index 0000000..d9d6429 --- /dev/null +++ b/Donjon/src/D2PRFL.f @@ -0,0 +1,262 @@ +*DECK D2PRFL + SUBROUTINE D2PRFL( IPDAT, IPMIC , IPRINT, NBU, NGP, NBMIX, + > NANI, NVAR, STAIDX, LADF, NADF, NTYPE) +* +*----------------------------------------------------------------------- +* +*Purpose: +* Recover macroscopic and microscopic cross sections from a microlib +* object and write cross sections for one branch at a fixed burnup point +* in the INFO data block. +* WARNING: 04/2014 The information recovered by this routine is exactly +* the same than GET_MACROLIB_XS but is used for reflector case, in this +* case the following reactions are set to zero : +* DET(IGR) = 0 +* SFI(IGR) = 0 +* KAPPA_FI(IGR)= 0 +* FLUX(IGR) = 0 +* VELINV(IGR) = 0 +* CHI_SPEC(IGR) = 0 +* X_NU_FI(IGR) = 0 +* KAPPA_FI(IGR) = 0 +* XENG(IGR)=0 +* SMNG(IGR)=0 +* NB : for reflector case, the upscattering is fixed to zero +* +*Author(s): +* J. Taforeau +* +*Parameters: input +* IPDAT address of info data block +* IPMIC address of the microlib object +* NBU number of burnup points +* NBMIX number of mixturess +* NGP number of energy groups +* NANI number of anisotropy +* NVAR number of state variables +* STAIDX table of states index order +* NADF number of ADF to be recovered +* NTYPE number of adf type +* LADF flag for adf +* +*Parameters: +* +*----------------------------------------------------------------------- +* + USE GANLIB +*---- +* SUBROUTINE ARGUMENTS +*---- + TYPE(C_PTR) IPDAT,IPMIC + INTEGER STAIDX(NVAR) + INTEGER NBU,NVAR,NBMIX,NGP,NANI,NADF,NTYPE + LOGICAL LADF +*---- +* LOCAL VARIABLES +*---- + TYPE(C_PTR) JPMIC,KPMIC,IPTH,KPTH + INTEGER NSCAT,MIX + INTEGER IJJ(NBMIX),NJJ(NBMIX),IPOS(NBMIX) + REAL GAR2(NGP,NGP,NBMIX,NANI),GAR3(NBMIX*NGP) + REAL XSECT(NGP,NBMIX) ! TOTAL CROSS SECTIONS + REAL KAPPA_FI(NGP) ! KAPPA FISSION CROSS SECTIONS + REAL X_NU_FI(NGP) ! NU SIGMA FISSION CROSS SECTIONS + REAL XTR(NGP) ! TRANSPORT CROSS SECTIONS + REAL DIFF(NGP,NBMIX) ! DIFFUSION COEFF + REAL SCAT(NGP,NBMIX) ! SCATTERING CROSS SECTIONS + REAL DET(NGP) ! DETECTOR CROSS SECTIONS + REAL SFI(NGP) ! FISSION CROSS SECTIONS + REAL ABSORPTION(NGP) ! ABSORPTION CROSS SECTIONS + REAL SCAT_MAT(NGP*NGP) ! SCATTERING MATRIX + REAL SCAT_TMP(NGP,NGP,NBMIX,NANI) ! TEMPORARY SCATTERING MATRIX + REAL FLUX(NGP) + REAL VELINV(NGP) + REAL XENG(NGP) + REAL CHI_SPEC(NGP),VOLUME(NBMIX) + REAL SMNG(NGP),FLXHET(NGP*NBMIX),FLXHOM(NGP,NBMIX) + REAL FLXL(NGP),FLXR(NGP),CURL(NGP),CURR(NGP) + REAL ADF(NADF,NGP) + CHARACTER CM*2,ADF_T*3 + CHARACTER*8 ADFD(NADF),HADF(NTYPE),HFLX(2),HCUR(2) + IF(IPRINT > 0) THEN + WRITE(6,*) + WRITE(6,*) "****** RECOVER REFLECTOR CROSS SECTIONS ******" + ENDIF + CALL LCMSIX(IPDAT,' ',0) + CALL LCMSIX(IPDAT,'SAPHYB_INFO',1) + IF(LADF) THEN + ADF_T=" " + CALL LCMGTC(IPDAT,'ADF_TYPE',3,ADF_T) + IF ((ADF_T.NE.'DRA').AND.(ADF_T.NE.'GEN')) THEN + WRITE(6,*)'@D2PRFL:',ADF_T,'ADF NOT SUPPORTED ', + > 'WITH REFL CALCULATION' + CALL XABORT('') + ENDIF + IF ((ADF_T.EQ.'DRA')) THEN + CALL LCMGTC(IPDAT,'HADF',8,NADF,ADFD) + ELSE IF ((ADF_T.EQ.'GEN')) THEN + CALL LCMGTC(IPDAT,'HFLX',8,2,HFLX) + CALL LCMGTC(IPDAT,'HCUR',8,2,HCUR) + ENDIF + + ENDIF + + CALL LCMGET(IPDAT,'MIX',MIX) + CALL LCMSIX(IPDAT,' ',0) + CALL LCMSIX(IPMIC,' ',0) + CALL LCMSIX(IPMIC,'MACROLIB',1) + CALL LCMGET(IPMIC,'VOLUME',VOLUME) + + IF (LADF) THEN + CALL LCMSIX(IPMIC,'ADF',1) + CALL LCMGTC(IPMIC,'HADF',8,NTYPE,HADF) + ITYPE=1 + IF ((ADF_T.EQ.'DRA')) THEN + DO ITYPE=1,NTYPE + CALL LCMGET(IPMIC,HADF(ITYPE),FLXHET) + DO I=1,NADF + IF(HADF(ITYPE).EQ.ADFD(I))THEN + DO IGR=1, NGP + ADF(I,IGR)= FLXHET((IGR-1)*NBMIX+MIX) + ENDDO + ENDIF + ENDDO + ENDDO + ELSE IF ((ADF_T.EQ.'GEN')) THEN + DO ITYPE=1,NTYPE + CALL LCMGET(IPMIC,HADF(ITYPE),FLXHET) + IF(HADF(ITYPE).EQ.HFLX(1))THEN + FLXL(:)=FLXHET + ENDIF + IF (HADF(ITYPE).EQ.HFLX(2))THEN + FLXR(:)=FLXHET + ENDIF + IF (HADF(ITYPE).EQ.HCUR(1))THEN + CURL(:)=FLXHET + ENDIF + IF (HADF(ITYPE).EQ.HCUR(2))THEN + CURR(:)=FLXHET + ENDIF + ENDDO + ENDIF + CALL LCMSIX(IPMIC,'',2) + + ENDIF + + JPMIC=LCMGID(IPMIC,'GROUP') + + ! RECOVER CROSS SECTIONS INFORMATION + DO IGR=1,NGP + WRITE(6,'(/28H PROCESS ENERGY GROUP NUMBER,I4)') IGR + KPMIC=LCMGIL(JPMIC,IGR) + CALL LCMLEN(KPMIC,'NTOT0',ILONG,ITYLCM) + + IF(ILONG.NE.NBMIX) THEN + CALL XABORT('D2P: MORE THAN ONE MIXTURE IN SAPHYB') + ENDIF + CALL LCMGET(KPMIC,'FLUX-INTG',FLXHOM(IGR,1:NBMIX)) + CALL LCMGET(KPMIC,'NTOT0',XSECT(IGR,1:NBMIX)) + CALL LCMGET(KPMIC,'SIGS00',SCAT(IGR,1:NBMIX)) + CALL LCMGET(KPMIC,'DIFF',DIFF(IGR,1:NBMIX)) + ABSORPTION(IGR)=XSECT(IGR,MIX)-SCAT(IGR,MIX) + IF (LADF) ADF(:,IGR)= VOLUME * ADF(:,IGR) / FLXHOM(IGR,MIX) + DET(IGR) = 0 + SFI(IGR) = 0 + KAPPA_FI(IGR)= 0 + FLUX(IGR) = 0 + VELINV(IGR) = 0 + CHI_SPEC(IGR) = 0 + X_NU_FI(IGR) = 0 + KAPPA_FI(IGR) = 0 + XENG(IGR)=0 + SMNG(IGR)=0 + XTR(IGR)=1/(3*DIFF(IGR,MIX)) + + GAR2(:NGP,:NGP,:NBMIX,:NANI)=0.0 + DO IL=1,NANI + WRITE(CM,'(I2.2)') IL-1 + LENGTH=1 + IF(IL.GT.1) CALL LCMLEN(KPMIC,'SCAT'//CM,LENGTH,ITYLCM) + IF(LENGTH.GT.0) THEN + CALL LCMGET(KPMIC,'SCAT'//CM,GAR3) + CALL LCMGET(KPMIC,'NJJS'//CM,NJJ) + CALL LCMGET(KPMIC,'IJJS'//CM,IJJ) + CALL LCMGET(KPMIC,'IPOS'//CM,IPOS) + DO IMIL=1,NBMIX + IPOSDE=IPOS(IMIL) + DO JGR=IJJ(IMIL),IJJ(IMIL)-NJJ(IMIL)+1,-1 + GAR2(IGR,JGR,IMIL,IL)=GAR3(IPOSDE) ! IGR <-- JGR + SCAT_TMP(IGR,JGR,IMIL,IL)=GAR2(IGR,JGR,IMIL,IL) + IPOSDE=IPOSDE+1 + ENDDO + ENDDO + ENDIF + ENDDO + ENDDO + + NSCAT=1 + DO J=1, NGP + DO I=1, NGP + SCAT_MAT(NSCAT)=SCAT_TMP(I,J,MIX,1) ! I <-- J + IF(NSCAT==3) SCAT_MAT(NSCAT)=0 + NSCAT=NSCAT+1 + ENDDO + ENDDO + + CALL LCMSIX(IPDAT,' ',0) + CALL LCMSIX(IPDAT,'BRANCH_INFO',1) + IF(STAIDX(NVAR)==1) THEN + IPTH=LCMLID(IPDAT,'CROSS_SECT',NBU) + ELSE + IPTH=LCMGID(IPDAT,'CROSS_SECT') + ENDIF + + KPTH=LCMDIL(IPTH,STAIDX(NVAR)) + CALL LCMSIX(KPTH,'MICROLIB_XS',1) + + CALL LCMPUT(KPTH,'XENG',NGP,2,XENG) + CALL LCMPUT(KPTH,'SMNG',NGP,2,SMNG) + + CALL LCMSIX(KPTH,' ',2) + CALL LCMSIX(KPTH,'MACROLIB_XS',1) + + CALL LCMPUT(KPTH,'XTR',NGP,2,XTR) + CALL LCMPUT(KPTH,'ABSORPTION',NGP,2,ABSORPTION) + CALL LCMPUT(KPTH,'X_NU_FI',NGP,2,X_NU_FI) + CALL LCMPUT(KPTH,'KAPPA_FI',NGP,2,KAPPA_FI) + CALL LCMPUT(KPTH,'SFI',NGP,2,SFI) + CALL LCMPUT(KPTH,'DET',NGP,2,DET) + CALL LCMPUT(KPTH,'SCAT',NGP*NGP,2,SCAT_MAT) + IF (LADF) THEN + IF (ADF_T.EQ.'DRA') THEN + CALL LCMPUT(KPTH,'ADF',NADF*NGP,2,ADF) + ELSE IF (ADF_T.EQ.'GEN') THEN + CALL LCMPUT(KPTH,'FLXL',NGP,2,FLXL) + CALL LCMPUT(KPTH,'FLXR',NGP,2,FLXR) + CALL LCMPUT(KPTH,'CURL',NGP,2,CURL) + CALL LCMPUT(KPTH,'CURR',NGP,2,CURR) + ENDIF + ENDIF + IF(IPRINT>1) THEN + WRITE(6,*) + WRITE(6,*) "**** MACROSCOPIC cross sections (1:NGP) ****" + WRITE(6,*) "TOTALE :",XSECT(:,MIX) + WRITE(6,*) "DIFFUSION :",DIFF(:,MIX) + WRITE(6,*) "TRANSPORT :",XTR + WRITE(6,*) "ABSORPTION :",ABSORPTION + WRITE(6,*) "NU FISSION :",X_NU_FI + WRITE(6,*) "KAPPA FISSION :",KAPPA_FI + WRITE(6,*) "DETECTOR :",DET + WRITE(6,*) "SCATTERING (g to g') :",SCAT_MAT + IF (LADF) THEN + IF (ADF_T.EQ.'DRA') THEN + WRITE(6,*) "ADF([N/E/W/S]||[W/E]) :",ADF + ELSE IF (ADF_T.EQ.'GEN') THEN + WRITE(6,*) "WEST FLUX BOUNDARY :",FLXL + WRITE(6,*) "EST FLUX BOUNDARY :",FLXR + WRITE(6,*) "WEST CURRENT BOUNDARY :",CURL + WRITE(6,*) "EST CURRENT BOUNDARY :",CURR + ENDIF + ENDIF + ENDIF + END |
