summaryrefslogtreecommitdiff
path: root/Donjon/src/ACRLIB.f
diff options
context:
space:
mode:
Diffstat (limited to 'Donjon/src/ACRLIB.f')
-rw-r--r--Donjon/src/ACRLIB.f899
1 files changed, 899 insertions, 0 deletions
diff --git a/Donjon/src/ACRLIB.f b/Donjon/src/ACRLIB.f
new file mode 100644
index 0000000..cc2cf8e
--- /dev/null
+++ b/Donjon/src/ACRLIB.f
@@ -0,0 +1,899 @@
+*DECK ACRLIB
+ SUBROUTINE ACRLIB(MAXNIS,MAXISO,IPLIB,IPAPX,IACCS,NMIX,NGRP,IMPX,
+ 1 HEQUI,NCAL,ITER,MY1,MY2,MD1,MD2,TERP,NISO,LISO,HISO,CONC,ITODO,
+ 2 MIXC,LRES,LPURE,LTOTAL,ILUPS,B2,LFROM,VTOT,YLDS,DECAYC)
+*
+*-----------------------------------------------------------------------
+*
+*Purpose:
+* Build the Microlib by scanning the NCAL elementary calculations in
+* a Apex file and weighting them with TERP factors.
+*
+*Copyright:
+* Copyright (C) 2021 Ecole Polytechnique de Montreal
+*
+*Author(s):
+* A. Hebert
+*
+*Parameters: input
+* MAXNIS maximum value of NISO(I) in user data.
+* MAXISO maximum allocated space for output Microlib TOC information.
+* IPLIB address of the output Microlib LCM object.
+* IPAPX pointer to the Apex file.
+* IACCS =0 Microlib is created; =1 ... is updated.
+* NMIX maximum number of material mixtures in the Microlib.
+* NGRP number of energy groups.
+* IMPX print parameter (equal to zero for no print).
+* HEQUI keyword of SPH-factor set to be recovered.
+* NCAL number of elementary calculations in the Apex file.
+* ITER completion flag (=0: compute the macrolib).
+* MY1 number of fissile isotopes including macroscopic sets.
+* MY2 number of fission fragment.
+* MD1 number of types of radioactive decay reactions.
+* MD2 number of particularized isotopes including macro.
+* TERP interpolation factors.
+* NISO number of user-selected isotopes.
+* LISO type of treatment (=.true.: ALL; =.false.: ONLY).
+* HISO name of the user-selected isotopes.
+* CONC user-defined number density of the user-selected isotopes. A
+* value of -99.99 is set to indicate that the Apex file value is
+* used.
+* ITODO non-depletion mask (=1 to force a user-selected isotope to be
+* non-depleting)
+* MIXC mixture index in the Apex file corresponding to each Microlib
+* mixture. Equal to zero if a Microlib mixture is not updated.
+* LRES =.true. if the interpolation is done without updating isotopic
+* densities
+* LPURE =.true. if the interpolation is a pure linear interpolation
+* with TERP factors.
+* LTOTAL =.true. to use the mac/TOTAL macroscopic set.
+* ILUPS up-scattering removing flag (=1 to remove up-scattering from
+* output cross-sections).
+* B2 buckling
+* LFROM macroregion flag (=.true. if 'xs n' groups are set).
+* VTOT volume of updated core.
+* YLDS fission yields.
+* DECAYC radioactive decay constants.
+*
+*-----------------------------------------------------------------------
+*
+ USE GANLIB
+ USE hdf5_wrap
+ IMPLICIT NONE
+*----
+* SUBROUTINE ARGUMENTS
+*----
+ TYPE(C_PTR) IPLIB,IPAPX
+ INTEGER MAXNIS,MAXISO,IACCS,NMIX,NGRP,IMPX,NCAL,ITER,MY1,MY2,MD1,
+ 1 MD2,NISO(NMIX),ITODO(NMIX,MAXNIS),MIXC(NMIX),ILUPS
+ REAL TERP(NCAL,NMIX),CONC(NMIX,MAXNIS),B2
+ DOUBLE PRECISION VTOT,YLDS(MY1,MY2),DECAYC(MD1,MD2)
+ LOGICAL LISO(NMIX),LRES,LPURE,LTOTAL,LFROM
+ CHARACTER(LEN=80) HEQUI
+ CHARACTER(LEN=8) HISO(NMIX,MD2)
+*----
+* LOCAL VARIABLES
+*----
+ INTEGER, PARAMETER::IOUT=6
+ INTEGER, PARAMETER::MAXMAC=2
+ INTEGER, PARAMETER::MAXREA=50
+ INTEGER, PARAMETER::NSTATE=40
+ INTEGER, PARAMETER::MAXFRD=4
+ TYPE(C_PTR) JPLIB,KPLIB
+ REAL B2APEX, FACT0, WEIGHT
+ INTEGER I, I0, K, IBM, IBMOLD, ICAL, ID1, IED2, IFISS, IGR,
+ & ILONG, IMAC, IOF, IPRC, IREA, IREAF, IRES, ISO, ITRANC, ITSTMP,
+ & ITYLCM, IY1, IY2, JSO, KSO, KSO1, LMY1, LSO, MAXMIX, NBISO,
+ & NBISO1, NBISO2, NBISO2I, NBS1, NCALS, NED2, NL, NLAM, NBMAC,
+ & NMIL, NPAR, NPRC, NREA, NSURFD, NISOF, NISOP, NISOS, NISOTS,
+ & NVP, RANK, NBYTE, TYPE, ISURF, DIMSR(5)
+ CHARACTER RECNAM*80,TEXT8*8, TEXT12*12,HSMG*131,HVECT2(MAXREA)*8,
+ 1 HRESID*8,HHAD(MAXFRD)*16
+ INTEGER ISTATE(NSTATE),INAME(2),IHRES(2)
+ REAL TMPDAY(3)
+ LOGICAL LUSER,LSTRD
+*----
+* ALLOCATABLE ARRAYS
+*----
+ INTEGER, ALLOCATABLE, DIMENSION(:) :: IMIX2,ITOTM,IRESM,ISONA,
+ 1 ISOMI,ITOD2,ISTY1,ISTY2,IPIFI,IMICR,ITOD1,JJSO,IPYMIX,DIMS_APX
+ INTEGER, ALLOCATABLE, DIMENSION(:,:) :: HUSE2,HNAM2
+ REAL, ALLOCATABLE, DIMENSION(:) :: DENS2,DENS3,VOL2,VOLMI2,SPH,
+ 1 ENER,XVOLM,CONCE,TAUXFI,NWT0,FLUXS,DENIS,GAR1,GAR2,LAMB,BETAR,
+ 2 INVELS,BETARB,INVELSB
+ REAL, ALLOCATABLE, DIMENSION(:,:) :: ADF,DENS1,FACT,DECAY2,
+ 1 CHIRS,CHIRSB
+ REAL, ALLOCATABLE, DIMENSION(:,:,:) :: XS,SIGS,DENS0,FLUX,ADF2,
+ 1 YLDS2
+ REAL, ALLOCATABLE, DIMENSION(:,:,:,:) :: SS2D
+ DOUBLE PRECISION, ALLOCATABLE, DIMENSION(:,:) :: YLDSM
+ LOGICAL, ALLOCATABLE, DIMENSION(:) :: LXS,MASK,MASKL
+ CHARACTER(LEN=8), ALLOCATABLE, DIMENSION(:) :: HADF,HNOMIS,NOMISO,
+ 1 NOMMAC,HPYNAM
+ CHARACTER(LEN=12), ALLOCATABLE, DIMENSION(:) :: NOMREA
+*----
+* RECOVER APEX FILE CHARACTERISTICS
+*----
+ I=0
+ CALL APXTOC(IPAPX,0,NLAM,NREA,NBISO,NBMAC,NMIL,NPAR,NVP,NISOF,
+ 1 NISOP,NISOS,NCALS,I,NISOTS,NSURFD,NPRC)
+ IF(NGRP.NE.I) CALL XABORT('ACRLIB: INVALID VALUE OF NGRP.')
+ IF(NREA.GT.MAXREA) CALL XABORT('ACRLIB: MAXREA OVERFLOW')
+ IF(NBMAC.GT.MAXMAC) CALL XABORT('ACRLIB: MAXMAC OVERFLOW')
+*----
+* SCRATCH STORAGE ALLOCATION
+*----
+ ALLOCATE(IMIX2(MAXISO),ITOD2(MAXISO),ISTY1(MAXISO),ISTY2(MAXISO),
+ 1 HUSE2(3,MAXISO),HNAM2(3,MAXISO))
+ ALLOCATE(DENS2(MAXISO),DENS3(MAXISO),VOL2(MAXISO),VOLMI2(NMIX),
+ 1 FLUX(NMIX,NGRP,2),SPH(NGRP))
+ ALLOCATE(HADF(NSURFD),ADF2(NMIX,NGRP,NSURFD))
+*----
+* MICROLIB INITIALIZATION
+*----
+ VOLMI2(:NMIX)=0.0
+ DENS2(:MAXISO)=0.0
+ VOL2(:MAXISO)=0.0
+ IMIX2(:MAXISO)=0
+ ITOD2(:MAXISO)=0
+ ISTY2(:MAXISO)=0
+ IF(NSURFD.GT.0) ADF2(:NMIX,:NGRP,:NSURFD)=0.0
+ IF(IACCS.EQ.0) THEN
+ IF(LRES) CALL XABORT('ACRLIB: RES OPTION IS INVALID.')
+ NBISO2=0
+ NED2=0
+ TEXT12='L_LIBRARY'
+ CALL LCMPTC(IPLIB,'SIGNATURE',12,TEXT12)
+ ELSE
+ CALL LCMGET(IPLIB,'STATE-VECTOR',ISTATE)
+ IF(ISTATE(1).NE.NMIX) CALL XABORT('ACRLIB: INVALID NUMBER OF '
+ 1 //'MATERIAL MIXTURES IN THE MICROLIB.')
+ IF(ISTATE(3).NE.NGRP) CALL XABORT('ACRLIB: INVALID NUMBER OF '
+ 1 //'ENERGY GROUPS IN THE MICROLIB.')
+ NBISO2=ISTATE(2)
+ IF(NBISO2.GT.MAXISO) CALL XABORT('ACRLIB: MAXISO OVERFLOW(1).')
+ NED2=ISTATE(13)
+ IF(NED2.GT.MAXREA) CALL XABORT('ACRLIB: MAXREA OVERFLOW.')
+ CALL LCMLEN(IPLIB,'MIXTURESVOL',ILONG,ITYLCM)
+ IF(ILONG.GT.0) THEN
+ CALL LCMGET(IPLIB,'MIXTURESVOL',VOLMI2)
+ ELSE
+ VOLMI2(:NMIX)=0.0
+ ENDIF
+ CALL LCMGET(IPLIB,'ISOTOPESUSED',HUSE2)
+ CALL LCMGET(IPLIB,'ISOTOPERNAME',HNAM2)
+ CALL LCMGET(IPLIB,'ISOTOPESDENS',DENS2)
+ CALL LCMGET(IPLIB,'ISOTOPESVOL',VOL2)
+ CALL LCMGET(IPLIB,'ISOTOPESMIX',IMIX2)
+ CALL LCMGET(IPLIB,'ISOTOPESTODO',ITOD2)
+ CALL LCMGET(IPLIB,'ISOTOPESTYPE',ISTY2)
+ IF(NED2.GT.0) CALL LCMGTC(IPLIB,'ADDXSNAME-P0',8,NED2,HVECT2)
+ IF(NSURFD.GT.0) THEN
+ CALL LCMSIX(IPLIB,'MACROLIB',1)
+ CALL LCMLEN(IPLIB,'ADF',ILONG,ITYLCM)
+ IF(ILONG.EQ.0) THEN
+ CALL LCMLIB(IPLIB)
+ CALL XABORT('ACRLIB: UNABLE TO FIND DIRECTORY ADF.')
+ ENDIF
+ CALL LCMSIX(IPLIB,'ADF',1)
+ CALL LCMGTC(IPLIB,'HADF',8,NSURFD,HADF)
+ DO I=1,NSURFD
+ CALL LCMGET(IPLIB,HADF(I),ADF2(1,1,I))
+ ENDDO
+ CALL LCMSIX(IPLIB,' ',2)
+ CALL LCMSIX(IPLIB,' ',2)
+ ENDIF
+ ENDIF
+*----
+* RECOVER INFORMATION FROM physconst GROUP.
+*----
+ IF(hdf5_group_exists(IPAPX,"/physconst/")) THEN
+ CALL hdf5_read_data(IPAPX,"/physconst/ENRGS",ENER)
+ ELSE IF(hdf5_group_exists(IPAPX,"/physco001/")) THEN
+ CALL hdf5_read_data(IPAPX,"/physco001/ENRGS",ENER)
+ ELSE
+ CALL XABORT('ACRLIB: GROUP physconst NOT FOUND IN HDF5 FILE.')
+ ENDIF
+ DO IGR=1,NGRP+1
+ ENER(IGR)=ENER(IGR)/1.0E-6
+ ENDDO
+ CALL LCMPUT(IPLIB,'ENERGY',NGRP+1,2,ENER)
+ DO IGR=1,NGRP
+ ENER(IGR)=LOG(ENER(IGR)/ENER(IGR+1))
+ ENDDO
+ CALL LCMPUT(IPLIB,'DELTAU',NGRP,2,ENER)
+ DEALLOCATE(ENER)
+*----
+* RECOVER INFORMATION FROM explicit GROUP.
+*----
+ ALLOCATE(ITOTM(NMIL),IRESM(NMIL))
+ ITOTM(:)=0
+ IRESM(:)=0
+ IREAF=0
+ IF(NREA.GT.0) THEN
+ IF(hdf5_group_exists(IPAPX,"/explicit/")) THEN
+ CALL hdf5_read_data(IPAPX,"/explicit/REANAME",NOMREA)
+ ELSE IF(hdf5_group_exists(IPAPX,"/expli001/")) THEN
+ CALL hdf5_read_data(IPAPX,"/expli001/REANAME",NOMREA)
+ ELSE
+ CALL XABORT('ACRLIB: GROUP explicit NOT FOUND IN HDF5 FILE.')
+ ENDIF
+ IF(IMPX.GT.1) THEN
+ WRITE(IOUT,'(29H ACRLIB: Available reactions:/(1X,10A13))')
+ 1 (NOMREA(I),I=1,NREA)
+ ENDIF
+ DO IREA=1,NREA
+ IF(NOMREA(IREA).EQ.'NUFI') THEN
+ IREAF=IREA
+ EXIT
+ ENDIF
+ ENDDO
+ ENDIF
+ IF(NBISO.GT.0) THEN
+ IF(hdf5_group_exists(IPAPX,"/explicit/")) THEN
+ CALL hdf5_read_data(IPAPX,"/explicit/ISONAME",NOMISO)
+ ELSE IF(hdf5_group_exists(IPAPX,"/expli001/")) THEN
+ CALL hdf5_read_data(IPAPX,"/expli001/ISONAME",NOMISO)
+ ELSE
+ CALL XABORT('ACRLIB: GROUP explicit NOT FOUND IN HDF5 FILE.')
+ ENDIF
+ ENDIF
+ IF(LTOTAL.AND.(NBMAC.EQ.0)) CALL XABORT('ACRLIB: NBMAC=0.')
+ IF(NBMAC.GT.0) THEN
+ IF(hdf5_group_exists(IPAPX,"/explicit/")) THEN
+ CALL hdf5_read_data(IPAPX,"/explicit/MACNAME",NOMMAC)
+ ELSE IF(hdf5_group_exists(IPAPX,"/expli001/")) THEN
+ CALL hdf5_read_data(IPAPX,"/expli001/MACNAME",NOMMAC)
+ ELSE
+ CALL XABORT('ACRLIB: GROUP explicit NOT FOUND IN HDF5 FILE.')
+ ENDIF
+ DO I=1,NBMAC
+ IF(NOMMAC(I).EQ.'TOTAL') ITOTM(:)=I
+ IF(NOMMAC(I).EQ.'RESIDUAL') IRESM(:)=I
+ ENDDO
+ NBISO1=NBISO+NBMAC
+ ALLOCATE(HNOMIS(NBISO1))
+ IF(NBISO.GT.0) HNOMIS(:NBISO)=NOMISO(:NBISO)
+ IF(LTOTAL) THEN
+ ! use the mac/TOTAL macroscopic set
+ HNOMIS(:NBISO)=' '
+ DO I=1,NBMAC
+ IF(NOMMAC(I).EQ.'TOTAL') THEN
+ HNOMIS(NBISO+I)='*MAC*RES'
+ ELSE IF(NOMMAC(I).EQ.'RESIDUAL') THEN
+ HNOMIS(NBISO+I)=' '
+ ENDIF
+ ENDDO
+ ELSE
+ ! use the mac/RESIDUAL macroscopic set
+ DO I=1,NBMAC
+ IF(NOMMAC(I).EQ.'TOTAL') THEN
+ HNOMIS(NBISO+I)=' '
+ ELSE IF(NOMMAC(I).EQ.'RESIDUAL') THEN
+ HNOMIS(NBISO+I)='*MAC*RES'
+ ENDIF
+ ENDDO
+ ENDIF
+ ELSE
+ NBISO1=NBISO
+ ALLOCATE(HNOMIS(NBISO1))
+ IF(NBISO.GT.0) HNOMIS(:NBISO)=NOMISO(:NBISO)
+ ENDIF
+*----
+* RECOVER VOLUMES.
+*----
+ ALLOCATE(XVOLM(NMIL))
+ RECNAM='calc 1/xs/'
+ DO IBMOLD=1,NMIL
+ IF(LFROM) WRITE(RECNAM,'(4Hcalc,I8,3H/xs,I8,1H/)') ICAL,IBMOLD
+ CALL hdf5_info(IPAPX,TRIM(RECNAM)//"MEDIA_VOLUME",RANK,
+ 1 TYPE,NBYTE,DIMSR)
+ IF(TYPE.EQ.99) THEN
+ XVOLM(IBMOLD)=1.0
+ WRITE(IOUT,'(44H ACRLIB: WARNING -- Record MEDIA_VOLUME is m,
+ 1 42Hissing in the Apex file. Volume set to 1.0)')
+ ELSE
+ CALL hdf5_read_data(IPAPX,TRIM(RECNAM)//"MEDIA_VOLUME",
+ 1 XVOLM(IBMOLD))
+ ENDIF
+ ENDDO
+*----
+* FIND SCATTERING ANISOTROPY.
+*----
+ CALL hdf5_info(IPAPX,TRIM(RECNAM)//"mac/TOTAL/DIFF",RANK,
+ 1 TYPE,NBYTE,DIMSR)
+ IF(TYPE.EQ.99) CALL XABORT('ACRLIB: MISSING SCATTERING INFO.')
+ NL=DIMSR(2)
+ IF(IMPX.GT.1) THEN
+ WRITE(IOUT,'(36H ACRLIB: number of Legendre orders =,I4)') NL
+ ENDIF
+*----
+* LOOP OVER APEX MIXTURES TO COMPUTE DENS0(NMIL,NCAL,NBISO1)
+*----
+ ALLOCATE(DENS0(NMIL,NCAL,NBISO1))
+ DENS0(:NMIL,:NCAL,:NBISO1)=0.0
+ DO 30 IBMOLD=1,NMIL
+ DO ICAL=1,NCAL
+ DO IBM=1,NMIX
+ IF((TERP(ICAL,IBM).NE.0.0).AND.(MIXC(IBM).EQ.IBMOLD)) GO TO 10
+ ENDDO
+ CYCLE
+ 10 WRITE(RECNAM,'(4Hcalc,I8,4H/xs/)') ICAL
+ IF(LFROM) WRITE(RECNAM,'(4Hcalc,I8,3H/xs,I8,1H/)') ICAL,IBMOLD
+ IF(NBISO.GT.0) THEN
+ CALL hdf5_read_data(IPAPX,TRIM(RECNAM)//"mic/CONC",CONCE)
+ DO 20 ISO=1,NBISO
+ DENS0(IBMOLD,ICAL,ISO)=CONCE(ISO)
+ 20 CONTINUE
+ ENDIF
+ ENDDO
+ 30 CONTINUE
+ IF(NBISO.GT.0) DEALLOCATE(CONCE)
+*----
+* LOOP OVER MICROLIB MIXTURES
+*----
+ YLDS(:MY1,:MY2)=0.0D0
+ DECAYC(:MD1,:MD2)=0.0D0
+ VTOT=0.0D0
+ DO 40 IBM=1,NMIX
+ IBMOLD=MIXC(IBM)
+ IF(IBMOLD.NE.0) VTOT=VTOT+XVOLM(IBMOLD)
+ 40 CONTINUE
+ ALLOCATE(JJSO(NBISO+NBMAC),YLDSM(MY1,MY2),ITOD1(NBISO1))
+ ALLOCATE(TAUXFI(NBISO+NBMAC),NWT0(NGRP),
+ 1 SIGS(NGRP,NL,NBISO+NBMAC),SS2D(NGRP,NGRP,NL,NBISO+NBMAC),
+ 2 XS(NGRP,NREA,NBISO+NBMAC))
+ ALLOCATE(LXS(NREA))
+ ALLOCATE(CHIRS(NGRP,NPRC),BETAR(NPRC),INVELS(NGRP))
+ CHIRS(:NGRP,:NPRC)=0.0
+ BETAR(:NPRC)=0.0
+ INVELS(:NGRP)=0.0
+ ALLOCATE(BETARB(NPRC),INVELSB(NGRP))
+ ALLOCATE(DENS1(NBISO1,NCAL),FACT(NBISO1,NCAL))
+ JPLIB=LCMLID(IPLIB,'ISOTOPESLIST',(NBISO+NBMAC)*NMIX)
+*
+ DO 180 IBM=1,NMIX
+ IBMOLD=MIXC(IBM)
+ IF(IBMOLD.EQ.0) GO TO 180
+ IF(NISO(IBM).GT.MAXNIS) CALL XABORT('ACRLIB: MAXNIS OVERFLOW.')
+ VOLMI2(IBM)=XVOLM(IBMOLD)
+ IMAC=ITOTM(IBMOLD)
+ IRES=IRESM(IBMOLD)
+*----
+* RECOVER ITOD1(NBISO1) INDICES.
+*----
+ ITOD1(:NBISO1)=0
+ DO 50 ISO=1,NBISO1 ! Apex file isotope
+ DO KSO=1,NISO(IBM) ! user-selected isotope
+ IF(NOMISO(ISO).EQ.HISO(IBM,KSO)) THEN
+ ITOD1(ISO)=ITODO(IBM,KSO)
+ GO TO 50
+ ENDIF
+ ENDDO
+ 50 CONTINUE
+*----
+* COMPUTE THE NUMBER DENSITIES OF EACH ELEMENTARY CALCULATION.
+*----
+ DENS1(:NBISO1,:NCAL)=0.0
+ DENS3(:NBISO1)=0.0
+ DO ICAL=1,NCAL
+ WEIGHT=TERP(ICAL,IBM)
+ IF(WEIGHT.EQ.0.0) CYCLE
+ DO ISO=1,NBISO
+ LUSER=.FALSE.
+ KSO1=0
+ DO KSO=1,NISO(IBM) ! user-selected isotope
+ IF(NOMISO(ISO).EQ.HISO(IBM,KSO)) THEN
+ KSO1=KSO
+ LUSER=(CONC(IBM,KSO1).NE.-99.99)
+ GO TO 60
+ ENDIF
+ ENDDO
+ 60 IF(LUSER) THEN
+ DENS1(ISO,ICAL)=CONC(IBM,KSO1)
+ CYCLE
+ ENDIF
+ IF(.NOT.LISO(IBM)) CYCLE
+ DENS1(ISO,ICAL)=DENS0(IBMOLD,ICAL,ISO)
+ ENDDO
+ IF((NBISO.NE.0).AND.(.NOT.LTOTAL)) THEN
+ DENS1(NBISO+IRES,ICAL)=1.0
+ ELSE IF(IMAC.NE.0) THEN
+ DENS1(NBISO+IMAC,ICAL)=1.0
+ ENDIF
+ DO ISO=1,NBISO1
+ DENS3(ISO)=DENS3(ISO)+WEIGHT*DENS1(ISO,ICAL)
+ ENDDO
+ ENDDO
+ FACT(:NBISO1,:NCAL)=1.0
+ IF(.NOT.LPURE) THEN
+ DO ICAL=1,NCAL
+ IF(TERP(ICAL,IBM).EQ.0.0) CYCLE
+ DO ISO=1,NBISO1
+ IF(DENS3(ISO).GT.DENS1(ISO,ICAL)*1.0E-9) THEN
+ FACT(ISO,ICAL)=DENS1(ISO,ICAL)/DENS3(ISO)
+ ENDIF
+ ENDDO
+ ENDDO
+ ENDIF
+*----
+* INITIALIZE WORKING ARRAYS.
+*----
+ TAUXFI(:NBISO1)=0.0
+ NWT0(:NGRP)=0.0
+ SIGS(:NGRP,:NL,:NBISO1)=0.0
+ SS2D(:NGRP,:NGRP,:NL,:NBISO1)=0.0
+ XS(:NGRP,:NREA,:NBISO1)=0.0
+ LXS(:NREA)=.FALSE.
+ YLDSM(:MY1,:MY2)=0.0D0
+*----
+* MAIN LOOP OVER ELEMENTARY CALCULATIONS
+*----
+ TEXT12='*MAC*RES'
+ READ(TEXT12,'(2A4)') IHRES(1),IHRES(2)
+ LSTRD=.FALSE.
+ B2APEX=B2
+ DO 80 ICAL=1,NCAL
+ WEIGHT=TERP(ICAL,IBM)
+ IF(WEIGHT.EQ.0.0) GO TO 80
+*----
+* RECOVER INFORMATION FROM caldir GROUP.
+*----
+ WRITE(RECNAM,'(4Hcalc,I8,10H/kinetics/)') ICAL
+ CALL hdf5_info(IPAPX,TRIM(RECNAM)//"LAMBDA",RANK,TYPE,NBYTE,DIMSR)
+ NPRC=0
+ IF(TYPE.NE.99) THEN
+ NPRC=DIMSR(1)
+ CALL hdf5_read_data(IPAPX,TRIM(RECNAM)//"LAMBDA",LAMB)
+ CALL hdf5_read_data(IPAPX,TRIM(RECNAM)//"CHIDA",CHIRSB)
+ CALL hdf5_read_data(IPAPX,TRIM(RECNAM)//"BETADA",BETARB)
+ CALL hdf5_read_data(IPAPX,TRIM(RECNAM)//"INVELA",INVELSB)
+ ENDIF
+*----
+* SELECT APEX MIXTURE IBMOLD.
+*----
+ WRITE(RECNAM,'(4Hcalc,I8,4H/xs/)') ICAL
+ IF(LFROM) WRITE(RECNAM,'(4Hcalc,I8,3H/xs,I8,1H/)') ICAL,IBMOLD
+ IF(HEQUI.NE.' ') THEN
+ CALL hdf5_read_data(IPAPX,TRIM(RECNAM)//"MEDIA_SPH/"//HEQUI,SPH)
+ ELSE
+ SPH(:NGRP)=1.0
+ ENDIF
+ CALL hdf5_read_data(IPAPX,TRIM(RECNAM)//"FLUX",FLUXS)
+ DO I=1,NGRP
+ FLUXS(I)=FLUXS(I)/XVOLM(IBMOLD)
+ NWT0(I)=NWT0(I)+WEIGHT*FLUXS(I)/SPH(I)
+ ENDDO
+ IF((NBISO.NE.0).AND.(.NOT.LTOTAL)) THEN
+ DO ISO=1,NBISO
+ FACT0=FACT(ISO,ICAL)
+ CALL ACRSX2(IPAPX,RECNAM,NREA,NGRP,NISOF,NISOP,NL,ISO,
+ 1 NOMREA,B2APEX,FACT0,WEIGHT,SPH,FLUXS,IREAF,LPURE,LXS,
+ 2 XS(1,1,ISO),SIGS(1,1,ISO),SS2D(1,1,1,ISO),TAUXFI(ISO))
+ ENDDO
+ IF(IRES.NE.0) THEN
+ FACT0=1.0
+ CALL ACRSX2(IPAPX,RECNAM,NREA,NGRP,NISOF,NISOP,NL,-2,NOMREA,
+ 1 B2APEX,FACT0,WEIGHT,SPH,FLUXS,IREAF,LPURE,LXS,XS(1,1,NBISO+1),
+ 2 SIGS(1,1,NBISO+1),SS2D(1,1,1,NBISO+1),TAUXFI(NBISO+IRES))
+ ENDIF
+ ELSE IF(IMAC.NE.0) THEN
+ FACT0=1.0
+ CALL ACRSX2(IPAPX,RECNAM,NREA,NGRP,NISOF,NISOP,NL,-1,NOMREA,
+ 1 B2APEX,FACT0,WEIGHT,SPH,FLUXS,IREAF,LPURE,LXS,XS(1,1,NBISO+1),
+ 2 SIGS(1,1,NBISO+1),SS2D(1,1,1,NBISO+1),TAUXFI(NBISO+IMAC))
+ ELSE
+ CALL XABORT('ACRLIB: NO MACROSCOPIC SET.')
+ ENDIF
+ DEALLOCATE(FLUXS)
+*
+ IF(NPRC.GT.0) THEN
+ DO IGR=1,NGRP
+ INVELS(IGR)=INVELS(IGR)+SPH(IGR)*WEIGHT*INVELSB(IGR)
+ DO IPRC=1,NPRC
+ CHIRS(IGR,IPRC)=CHIRS(IGR,IPRC)+WEIGHT*CHIRSB(IGR,IPRC)
+ ENDDO
+ ENDDO
+ DO IPRC=1,NPRC
+ BETAR(IPRC)=BETAR(IPRC)+WEIGHT*BETARB(IPRC)
+ ENDDO
+ ENDIF
+*----
+* COMPUTE DEPLETION CHAIN DATA
+*----
+ IF(NISOF*NISOP.GT.0) THEN
+ IF(hdf5_group_exists(IPAPX,"/physconst/")) THEN
+ CALL hdf5_read_data(IPAPX,"/physconst/FYIELDS",YLDS2)
+ ELSE IF(hdf5_group_exists(IPAPX,"/physco001/")) THEN
+ CALL hdf5_read_data(IPAPX,"/physco001/FYIELDS",YLDS2)
+ ELSE
+ CALL XABORT('ACRLIB: GROUP physconst NOT FOUND IN HDF5 FILE.')
+ ENDIF
+ DO IY2=1,NISOP
+ DO IY1=1,NISOF
+ YLDSM(IY1,IY2)=YLDSM(IY1,IY2)+WEIGHT*YLDS2(IY1,IY2,1)
+ YLDS(IY1,IY2)=YLDS(IY1,IY2)+WEIGHT*YLDS2(IY1,IY2,1)*
+ > VOLMI2(IBM)/VTOT
+ ENDDO
+ ENDDO
+ DEALLOCATE(YLDS2)
+ ENDIF
+ IF((MD1*MD2.GT.0).AND.(NBISO.GT.0)) THEN
+ IF(hdf5_group_exists(IPAPX,"/physconst/")) THEN
+ CALL hdf5_read_data(IPAPX,"/physconst/DECAYC",DECAY2)
+ ELSE IF(hdf5_group_exists(IPAPX,"/physco001/")) THEN
+ CALL hdf5_read_data(IPAPX,"/physco001/DECAYC",DECAY2)
+ ELSE
+ CALL XABORT('ACRLIB: GROUP physconst NOT FOUND IN HDF5 FILE.')
+ ENDIF
+ DO ISO=1,NBISO
+ DO ID1=1,NLAM
+ DECAYC(ID1,ISO)=DECAYC(ID1,ISO)+WEIGHT*DECAY2(ID1,ISO)*
+ > VOLMI2(IBM)/VTOT
+ ENDDO
+ ENDDO
+ DEALLOCATE(DECAY2)
+ ENDIF
+ 80 CONTINUE ! end of loop over elementary calculations.
+*----
+* IDENTIFY SPECIAL FLUX EDITS
+*----
+ DO IREA=1,NREA
+ IF(NOMREA(IREA).EQ.'ABSO') THEN
+ DO 90 IED2=1,NED2
+ IF(HVECT2(IED2).EQ.'ABSO') GO TO 100
+ 90 CONTINUE
+ NED2=NED2+1
+ IF(NED2.GT.MAXREA) CALL XABORT('ACRLIB: MAXREA OVERFLOW(1).')
+ HVECT2(NED2)='ABSO'
+ ELSE IF(NOMREA(IREA).EQ.'FISS') THEN
+ DO 95 IED2=1,NED2
+ IF(HVECT2(IED2).EQ.'NFTOT') GO TO 100
+ 95 CONTINUE
+ NED2=NED2+1
+ IF(NED2.GT.MAXREA) CALL XABORT('ACRLIB: MAXREA OVERFLOW(2).')
+ HVECT2(NED2)='NFTOT'
+ ENDIF
+ 100 CONTINUE
+ ENDDO
+*----
+* SET FLAG LSTRD
+*----
+ LSTRD=.TRUE.
+ DO IREA=1,NREA
+ IF(NOMREA(IREA).EQ.'LEAK') THEN
+ IF(LXS(IREA).AND.(B2APEX.NE.0.0)) LSTRD=.FALSE.
+ EXIT
+ ENDIF
+ ENDDO
+*----
+* SAVE CROSS SECTIONS IN MICROLIB FOR MIXTURE IBM
+*----
+ ISTY1(:NBISO1)=0
+ JJSO(:NBISO1)=0
+ NBISO2I=NBISO2
+ IF((NBISO.NE.0).AND.(.NOT.LTOTAL)) THEN
+ HRESID=' '
+ DO ISO=1,NBISO
+ READ(HNOMIS(ISO),'(2A4)') INAME(:2)
+ CALL SCRFND(MAXISO,NBISO2I,NBISO2,INAME,IBM,HRESID,HUSE2,
+ 1 HNAM2,IMIX2,JJSO(ISO))
+ KPLIB=LCMDIL(JPLIB,JJSO(ISO)) ! step up isot JJSO(ISO)
+ CALL ACRISO(KPLIB,NREA,NGRP,NL,NPRC,NOMREA,NWT0,XS(1,1,ISO),
+ 1 SIGS(1,1,ISO),SS2D(1,1,1,ISO),TAUXFI(ISO),LXS,LAMB,CHIRS,
+ 2 BETAR,INVELS,INAME,LSTRD,LPURE,ILUPS,ITRANC,IFISS)
+ IF(MY1*MY2.GT.0) CALL ACRNDF(IMPX,NBISO+NBMAC,ISO,IBM,HNOMIS,
+ 1 IPAPX,KPLIB,MY1,MY2,YLDSM,ISTY1(ISO))
+ ENDDO
+ IF(IRES.NE.0) THEN
+ HRESID=NOMMAC(IRES)
+ CALL SCRFND(MAXISO,NBISO2I,NBISO2,IHRES,IBM,HRESID,HUSE2,
+ 1 HNAM2,IMIX2,JJSO(NBISO+IRES))
+ KPLIB=LCMDIL(JPLIB,JJSO(NBISO+IRES)) ! step up isot JJSO(NBISO+IRES)
+ CALL ACRISO(KPLIB,NREA,NGRP,NL,NPRC,NOMREA,NWT0,
+ 1 XS(1,1,NBISO+1),SIGS(1,1,NBISO+1),SS2D(1,1,1,NBISO+1),
+ 2 TAUXFI(NBISO+IRES),LXS,LAMB,CHIRS,BETAR,INVELS,IHRES,
+ 3 LSTRD,LPURE,ILUPS,ITRANC,IFISS)
+ IF(MY1*MY2.GT.0) CALL ACRNDF(IMPX,NBISO+NBMAC,NBISO+IRES,
+ 1 IBM,HNOMIS,IPAPX,KPLIB,MY1,MY2,YLDSM,ISTY1(NBISO+IRES))
+ ENDIF
+ DEALLOCATE(NOMMAC)
+ ELSE IF(IMAC.NE.0) THEN
+ HRESID=NOMMAC(IMAC)
+ CALL SCRFND(MAXISO,NBISO2I,NBISO2,IHRES,IBM,HRESID,HUSE2,HNAM2,
+ 1 IMIX2,JJSO(NBISO+IMAC))
+ KPLIB=LCMDIL(JPLIB,JJSO(NBISO+IMAC)) ! step up isot JJSO(NBISO+IMAC)
+ CALL ACRISO(KPLIB,NREA,NGRP,NL,NPRC,NOMREA,NWT0,XS(1,1,NBISO+1),
+ 1 SIGS(1,1,NBISO+1),SS2D(1,1,1,NBISO+1),TAUXFI(NBISO+IMAC),LXS,
+ 2 LAMB,CHIRS,BETAR,INVELS,IHRES,LSTRD,LPURE,ILUPS,ITRANC,IFISS)
+ DEALLOCATE(NOMMAC)
+ ENDIF
+*----
+* SET NUMBER DENSITIES AND VOLUMES IN OUTPUT MICROLIB
+*----
+ IF(LRES) THEN
+* -- Number densities are left unchanged except if they are
+* -- listed in HISO array.
+ DO 110 KSO=1,NISO(IBM) ! user-selected isotope
+ DO JSO=1,NBISO2 ! microlib isotope
+ IF(IMIX2(JSO).NE.IBM) CYCLE
+ WRITE(TEXT8,'(2A4)') HUSE2(1,JSO),HUSE2(2,JSO)
+ IF(HISO(IBM,KSO).EQ.TEXT8) THEN
+ ITOD2(JSO)=ITODO(IBM,KSO)
+ IF(CONC(IBM,KSO).EQ.-99.99) THEN
+* -- Only number densities of isotopes set with "MICR" and
+* -- "*" keywords are interpolated
+ DENS2(JSO)=0.0
+ DO ISO=1,NBISO1 ! Apex file isotope
+ IF(JJSO(ISO).EQ.JSO) DENS2(JSO)=DENS2(JSO)+DENS3(ISO)
+ ENDDO
+ ELSE IF(CONC(IBM,KSO).NE.-99.99) THEN
+* -- Number densities of isotopes set with "MICR" and
+* -- fixed value are forced to this value
+ DENS2(JSO)=CONC(IBM,KSO)
+ ENDIF
+ GO TO 110
+ ENDIF
+ ENDDO
+ WRITE(HSMG,'(31HACRLIB: UNABLE TO FIND ISOTOPE ,A8,6H IN MI,
+ 1 5HXTURE,I8,1H.)') HISO(IBM,KSO),IBM
+ CALL XABORT(HSMG)
+ 110 CONTINUE
+ ELSE
+* -- Number densities are interpolated or not according to
+* -- ALL/ONLY option
+ DO JSO=1,NBISO2 ! microlib isotope
+ WRITE(TEXT8,'(2A4)') HUSE2(1,JSO),HUSE2(2,JSO)
+ IF(IBM.EQ.IMIX2(JSO)) THEN
+ DO ISO=1,NBISO1 ! Apex file isotope
+ IF(HNOMIS(ISO).EQ.TEXT8) THEN
+ DENS2(JSO)=0.0
+ VOL2(JSO)=0.0
+ CYCLE
+ ENDIF
+ ENDDO
+ ENDIF
+ ENDDO
+ DO 130 ISO=1,NBISO1 ! Apex file isotope
+ IF(.NOT.LISO(IBM)) THEN
+* --ONLY option
+ DO KSO=1,NISO(IBM) ! user-selected isotope
+ IF(HNOMIS(ISO).EQ.HISO(IBM,KSO)) GO TO 120
+ ENDDO
+ GO TO 130
+ ENDIF
+ 120 JSO=JJSO(ISO)
+ IF(JSO.GT.0) THEN
+ ITOD2(JSO)=ITOD1(ISO)
+ ISTY2(JSO)=ISTY1(ISO)
+ DENS2(JSO)=DENS2(JSO)+DENS3(ISO)
+ VOL2(JSO)=VOL2(JSO)+XVOLM(IBMOLD)
+ ENDIF
+ 130 CONTINUE
+ ENDIF
+*----
+* SET PIFI INFORMATION
+*----
+ ALLOCATE(IMICR(NBISO1))
+ IMICR(:NBISO1)=0
+ NBS1=0
+ DO 140 JSO=1,NBISO2 ! microlib isotope
+ IF(IMIX2(JSO).EQ.IBM) THEN
+ NBS1=NBS1+1
+ IF(NBS1.GT.NBISO1) CALL XABORT('ACRLIB: NBISO1 OVERFLOW.')
+ IMICR(NBS1)=JSO
+ ENDIF
+ 140 CONTINUE
+ DO 170 ISO=1,NBS1 ! Apex file isotope
+ JSO=IMICR(ISO)
+ KPLIB=LCMDIL(JPLIB,JSO) ! step up isot JSO
+ CALL LCMLEN(KPLIB,'PYIELD',LMY1,ITYLCM)
+ IF(LMY1.GT.0) THEN
+ ALLOCATE(HPYNAM(LMY1),IPYMIX(LMY1),IPIFI(LMY1))
+ IPIFI(:LMY1)=0
+ CALL LCMGTC(KPLIB,'PYNAM',8,LMY1,HPYNAM)
+ CALL LCMGET(KPLIB,'PYMIX',IPYMIX)
+ DO 160 IY1=1,LMY1
+ IF(HPYNAM(IY1).NE.' ') THEN
+ DO 150 KSO=1,NBS1
+ LSO=IMICR(KSO)
+ WRITE(TEXT8,'(2A4)') HUSE2(:2,LSO)
+ IF((HPYNAM(IY1).EQ.TEXT8).AND.(IPYMIX(IY1).EQ.IMIX2(LSO)))
+ 1 THEN
+ IPIFI(IY1)=LSO
+ GO TO 160
+ ENDIF
+ 150 CONTINUE
+ IF(IPIFI(IY1).EQ.0) THEN
+ WRITE(HSMG,'(40HACRLIB: FAILURE TO FIND FISSILE ISOTOPE ,
+ 1 A12,25H AMONG MICROLIB ISOTOPES.)') HPYNAM(IY1)
+ CALL XABORT(HSMG)
+ ENDIF
+ ENDIF
+ 160 CONTINUE
+ CALL LCMPUT(KPLIB,'PIFI',LMY1,1,IPIFI)
+ DEALLOCATE(IPIFI,IPYMIX,HPYNAM)
+ ENDIF
+ 170 CONTINUE
+ DEALLOCATE(IMICR)
+ 180 CONTINUE ! end of loop over microlib mixtures.
+*----
+* RELEASE MEMORY
+*----
+ DEALLOCATE(FACT,DENS1)
+ IF(NPRC.GT.0) DEALLOCATE(INVELSB,BETARB,CHIRSB,INVELS,BETAR,
+ 1 CHIRS,LAMB)
+ DEALLOCATE(LXS,XS,SS2D,SIGS,NWT0,TAUXFI)
+ DEALLOCATE(ITOD1,YLDSM)
+ IF(NBISO.GT.0) DEALLOCATE(NOMISO)
+ DEALLOCATE(JJSO,DENS0,XVOLM,HNOMIS,IRESM,ITOTM)
+*----
+* MICROLIB FINALIZATION
+*----
+ IF(.NOT.LRES) THEN
+ ISTATE(:NSTATE)=0
+ ISTATE(1)=NMIX
+ ISTATE(2)=NBISO2
+ ISTATE(3)=NGRP
+ ISTATE(4)=NL
+ ISTATE(5)=ITRANC
+ ISTATE(7)=1
+ IF(ITER.EQ.3) ISTATE(12)=NMIX
+ ISTATE(13)=NED2
+ ISTATE(14)=NMIX
+ ISTATE(18)=1
+ ISTATE(19)=NPRC
+ ISTATE(20)=MY1
+ ISTATE(22)=MAXISO/NMIX
+ IF(NSURFD.GT.0) ISTATE(24)=3 ! ADF/CPDF information
+ IF(NBISO2.EQ.0) CALL XABORT('ACRLIB: NBISO2=0.')
+ CALL LCMPUT(IPLIB,'STATE-VECTOR',NSTATE,1,ISTATE)
+ CALL LCMPUT(IPLIB,'MIXTURESVOL',NMIX,2,VOLMI2)
+ CALL LCMPUT(IPLIB,'ISOTOPESUSED',3*NBISO2,3,HUSE2)
+ CALL LCMPUT(IPLIB,'ISOTOPERNAME',3*NBISO2,3,HNAM2)
+ CALL LCMPUT(IPLIB,'ISOTOPESDENS',NBISO2,2,DENS2)
+ CALL LCMPUT(IPLIB,'ISOTOPESMIX',NBISO2,1,IMIX2)
+ CALL LCMPUT(IPLIB,'ISOTOPESVOL',NBISO2,2,VOL2)
+ IF(NED2.GT.0) CALL LCMPTC(IPLIB,'ADDXSNAME-P0',8,NED2,HVECT2)
+ CALL LCMPUT(IPLIB,'ISOTOPESTODO',NBISO2,1,ITOD2)
+ CALL LCMPUT(IPLIB,'ISOTOPESTYPE',NBISO2,1,ISTY2)
+ ELSE IF(LRES.AND.(NBISO.GT.0)) THEN
+ CALL LCMPUT(IPLIB,'ISOTOPESDENS',NBISO2,2,DENS2)
+ CALL LCMPUT(IPLIB,'ISOTOPESVOL',NBISO2,2,VOL2)
+ ENDIF
+ IF(IMPX.GT.5) CALL LCMLIB(IPLIB)
+ IACCS=1
+*----
+* COMPUTE THE MACROSCOPIC X-SECTIONS
+*----
+ IF((ITER.NE.0).AND.(ITER.NE.3)) GO TO 280
+ CALL LCMGET(IPLIB,'STATE-VECTOR',ISTATE)
+ MAXMIX=ISTATE(1)
+ IF(MAXMIX.NE.NMIX) CALL XABORT('ACRLIB: INVALID NMIX.')
+ NBISO=ISTATE(2)
+ ALLOCATE(MASK(MAXMIX),MASKL(NGRP))
+ ALLOCATE(ISONA(3*NBISO),ISOMI(NBISO),DENIS(NBISO))
+ CALL LCMGET(IPLIB,'ISOTOPESUSED',ISONA)
+ CALL LCMGET(IPLIB,'ISOTOPESMIX',ISOMI)
+ CALL LCMGET(IPLIB,'ISOTOPESDENS',DENIS)
+ MASK(:MAXMIX)=.TRUE.
+ MASKL(:NGRP)=.TRUE.
+ ITSTMP=0
+ TMPDAY(1)=0.0
+ TMPDAY(2)=0.0
+ TMPDAY(3)=0.0
+ CALL LCMLEN(IPLIB,'MACROLIB',ILONG,ITYLCM)
+ IF(ILONG.NE.0) CALL LCMDEL(IPLIB,'MACROLIB')
+ CALL LIBMIX(IPLIB,MAXMIX,NGRP,NBISO,ISONA,ISOMI,DENIS,MASK,MASKL,
+ 1 ITSTMP,TMPDAY)
+ DEALLOCATE(MASKL,MASK)
+ DEALLOCATE(DENIS,ISOMI,ISONA)
+ IF(NSURFD.GT.0) THEN
+ CALL LCMSIX(IPLIB,'MACROLIB',1)
+ CALL LCMGET(IPLIB,'STATE-VECTOR',ISTATE)
+ ISTATE(12)=3 ! ADF information
+ CALL LCMPUT(IPLIB,'STATE-VECTOR',NSTATE,1,ISTATE)
+ CALL LCMSIX(IPLIB,' ',2)
+ ENDIF
+*----
+* INCLUDE LEAKAGE IN THE MACROLIB (USED ONLY FOR NON-REGRESSION TESTS)
+*----
+ IF(B2.NE.0.0) THEN
+ IF(IMPX.GT.0) WRITE(IOUT,'(/31H ACRLIB: INCLUDE LEAKAGE IN THE,
+ 1 14H MACROLIB (B2=,1P,E12.5,2H).)') B2
+ CALL LCMSIX(IPLIB,'MACROLIB',1)
+ JPLIB=LCMGID(IPLIB,'GROUP')
+ ALLOCATE(GAR1(NMIX),GAR2(NMIX))
+ DO 270 IGR=1,NGRP
+ KPLIB=LCMGIL(JPLIB,IGR)
+ CALL LCMGET(KPLIB,'NTOT0',GAR1)
+ CALL LCMGET(KPLIB,'DIFF',GAR2)
+ DO 260 IBM=1,NMIX
+ IF(MIXC(IBM).NE.0) GAR1(IBM)=GAR1(IBM)+B2*GAR2(IBM)
+ 260 CONTINUE
+ CALL LCMPUT(KPLIB,'NTOT0',NMIX,2,GAR1)
+ 270 CONTINUE
+ DEALLOCATE(GAR2,GAR1)
+ CALL LCMSIX(IPLIB,' ',2)
+ ENDIF
+*----
+* PROCESS ADF INFORMATION
+*----
+ 280 IF(NSURFD.GT.0) THEN
+ DO 285 IBM=1,NMIX ! mixtures in Macrolib
+ IF(MIXC(IBM).NE.0) ADF2(IBM,:NGRP,:NSURFD)=0.0
+ 285 CONTINUE
+ DO 300 ICAL=1,NCAL
+ DO 290 IBM=1,NMIX ! mixtures in Macrolib
+ IBMOLD=MIXC(IBM)
+ IF(IBMOLD.EQ.0) GO TO 290
+ WEIGHT=TERP(ICAL,IBM)
+ IF(WEIGHT.EQ.0.0) GO TO 290
+ WRITE(RECNAM,'(4Hcalc,I8,15H/miscellaneous/)') ICAL
+ K=0
+ CALL hdf5_info(IPAPX,TRIM(RECNAM)//"ADF",RANK,TYPE,NBYTE,DIMSR)
+ IF(TYPE.NE.99) THEN
+ HHAD(K+1)='ADF'
+ K=K+1
+ ENDIF
+ CALL hdf5_info(IPAPX,TRIM(RECNAM)//"CPDF",RANK,TYPE,NBYTE,DIMSR)
+ IF(TYPE.NE.99) THEN
+ HHAD(K+1)='CPDF'
+ K=K+1
+ ENDIF
+ CALL hdf5_info(IPAPX,TRIM(RECNAM)//"INTERNAL_ADF",RANK,TYPE,
+ 1 NBYTE,DIMSR)
+ IF(TYPE.NE.99) THEN
+ HHAD(K+1)='INTERNAL_ADF'
+ K=K+1
+ ENDIF
+ CALL hdf5_info(IPAPX,TRIM(RECNAM)//"INTERNAL_CPDF",RANK,TYPE,
+ 1 NBYTE,DIMSR)
+ IF(TYPE.NE.99) THEN
+ HHAD(K+1)='INTERNAL_CPDF'
+ K=K+1
+ ENDIF
+ IF(4*K.NE.NSURFD) CALL XABORT('ACRLIB: INVALID ADF COUNT.')
+ DO I=1,K
+ CALL hdf5_get_shape(IPAPX,TRIM(RECNAM)//HHAD(I),DIMS_APX)
+ ISURF=DIMS_APX(1)
+ DEALLOCATE(DIMS_APX)
+ CALL hdf5_read_data(IPAPX,TRIM(RECNAM)//HHAD(I),ADF)
+ DO I0=1,ISURF
+ IF(HHAD(I).EQ.'ADF') THEN
+ WRITE(TEXT8,'(3HADF,I1)') I0
+ ELSE IF(HHAD(I).EQ.'CPDF') THEN
+ WRITE(TEXT8,'(4HCPDF,I1)') I0
+ ELSE IF(HHAD(I).EQ.'INTERNAL_ADF') THEN
+ WRITE(TEXT8,'(6HIN_ADF,I1)') I0
+ ELSE IF(HHAD(I).EQ.'INTERNAL_CPDF') THEN
+ WRITE(TEXT8,'(7HIN_CPDF,I1)') I0
+ ENDIF
+ IOF=(I-1)*ISURF+I0
+ HADF(IOF)=TEXT8
+ DO IGR=1,NGRP
+ ADF2(IBM,IGR,IOF)=ADF2(IBM,IGR,IOF)+WEIGHT*ADF(I0,IGR)
+ ENDDO
+ ENDDO
+ DEALLOCATE(ADF)
+ ENDDO
+ 290 CONTINUE
+ 300 CONTINUE
+ CALL LCMSIX(IPLIB,'MACROLIB',1)
+ CALL LCMSIX(IPLIB,'ADF',1)
+ CALL LCMPUT(IPLIB,'NTYPE',1,1,NSURFD)
+ CALL LCMPTC(IPLIB,'HADF',8,NSURFD,HADF)
+ DO I=1,NSURFD
+ CALL LCMPUT(IPLIB,HADF(I),NMIX*NGRP,2,ADF2(1,1,I))
+ ENDDO
+ CALL LCMSIX(IPLIB,' ',2)
+ CALL LCMSIX(IPLIB,' ',2)
+ ENDIF
+*----
+* SCRATCH STORAGE DEALLOCATION
+*----
+ DEALLOCATE(ADF2,HADF)
+ DEALLOCATE(SPH,FLUX,VOLMI2,VOL2,DENS3,DENS2)
+ DEALLOCATE(HNAM2,HUSE2,ISTY2,ISTY1,ITOD2,IMIX2)
+ RETURN
+ END