diff options
| author | stainer_t <thomas.stainer@oecd-nea.org> | 2025-09-08 13:48:49 +0200 |
|---|---|---|
| committer | stainer_t <thomas.stainer@oecd-nea.org> | 2025-09-08 13:48:49 +0200 |
| commit | 7dfcc480ba1e19bd3232349fc733caef94034292 (patch) | |
| tree | 03ee104eb8846d5cc1a981d267687a729185d3f3 /Dragon/src/LIBEAR.f | |
Initial commit from Polytechnique Montreal
Diffstat (limited to 'Dragon/src/LIBEAR.f')
| -rw-r--r-- | Dragon/src/LIBEAR.f | 580 |
1 files changed, 580 insertions, 0 deletions
diff --git a/Dragon/src/LIBEAR.f b/Dragon/src/LIBEAR.f new file mode 100644 index 0000000..8b7746c --- /dev/null +++ b/Dragon/src/LIBEAR.f @@ -0,0 +1,580 @@ +*DECK LIBEAR + SUBROUTINE LIBEAR(CFILNA,MAXR,NEL,NMDEPL,ITNAM,ITZEA,KPAX,BPAX) +* +*----------------------------------------------------------------------- +* +*Purpose: +* Read depletion data on an APOLIB-2 formatted library. +* +*Copyright: +* Copyright (C) 2002 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 +* CFILNA APOLIB-2 file name. +* MAXR number of reaction types. +* NEL number of isotopes on library. +* NMDEPL names of reactions: +* NMDEPL(1)='DECAY'; NMDEPL(2)='NFTOT'; +* NMDEPL(3)='NG' ; NMDEPL(4)='N2N'; +* etc. +* +*Parameters: output +* ITNAM reactive isotope names in chain. +* ITZEA 6-digit nuclide identifier: +* atomic number z*10000 (digits) + mass number a*10 + +* energy state (0 = ground state, 1 = first state, etc.). +* KPAX complete reaction type matrix. +* BPAX complete branching ratio matrix. +* +*----------------------------------------------------------------------- +* +*---- +* INPUT FORMAT +*---- +* LIB: APLIB2 FIL: CFILNA CHAIN +* [[ hnamson +* [ FROM [[ { DECAY | reaction } yield hnampar ]] ] +* ]] +* ENDCHAIN +* + USE GANLIB +*---- +* SUBROUTINE ARGUMENTS +*---- + CHARACTER CFILNA*(*),NMDEPL(MAXR)*8 + INTEGER MAXR,NEL,ITNAM(3,NEL),ITZEA(NEL),KPAX(NEL+MAXR,NEL) + REAL BPAX(NEL+MAXR,NEL) +* + EXTERNAL LIBA21 + INTEGER ISFICH(3),NITCA(5) + PARAMETER (IOUT=6) + CHARACTER TEXT20*20,NOMOBJ*20,TEXT8*8,TEXT12*12,TYPOBJ*8,TYPSEG*8, + > HNISOR*20,HITNAM*20,HSMG*131,TEXT16*16 + LOGICAL LPHEAD,LPCONS,LPNUMF,LTEST,LPFIX + DOUBLE PRECISION DBLINP +*---- +* SCRATCH STORAGE ALLOCATION +*---- + INTEGER, ALLOCATABLE, DIMENSION(:) :: VINTE,NOMOB,KDS,LGS,ITCARO, + 1 NOM,IA,IZ,NFG,IZSECT,ISECTT,IKEEP + REAL, ALLOCATABLE, DIMENSION(:) :: GAMMA + TYPE(C_PTR) ICHDIM_PTR,ICHTYP_PTR,ICHDKL_PTR,TSEGM_PTR + INTEGER, POINTER, DIMENSION(:) :: ICHDIM,ICHTYP,ICHDKL,ITSEGM + REAL, POINTER, DIMENSION(:) :: RTSEGM +* + INTEGER TKCARO(31) + SAVE TKCARO + DATA TKCARO / + & 0, 1, 2, 3, 4, 5, 6, 30, 7, -8, + & 9, -10, 11, -12, 13, -14, 15, 16, -17, 18, + & -19, 20, -21, 22, 23, -24, 25, -26, 27, -28, + & 29 / +*---- +* OPEN AND PROBE THE APOLIB-2 FILE. +*---- + CALL AEXTPA(CFILNA,ISFICH) + IADRES=ISFICH(1) + NBOBJ=ISFICH(2) + LBLOC=ISFICH(3) + IUNIT=KDROPN(CFILNA,2,4,LBLOC) + IF(IUNIT.LE.0) THEN + TEXT12=CFILNA + CALL XABORT('LIBEAR: APOLLO-2 LIBRARY '//TEXT12//' CANNOT B'// + 1 'E OPENED') + ENDIF +*---- +* INDEX THE APOLIB-2 FILE. +*---- + ALLOCATE(VINTE(2*NBOBJ)) + CALL AEXDIR(IUNIT,LBLOC,VINTE,IADRES,2*NBOBJ) + IDKNO=1-TKCARO(14) + IDKTY=1-TKCARO(21) + IDKDS=1-TKCARO(10) + IDKTS=1-TKCARO(23) + IDKNS=TKCARO(2)+1 + IDKLS=TKCARO(8) +* + NSEGM=0 + NMGY=0 + NISOT=0 + ALLOCATE(NOMOB(5*(NBOBJ-3)),KDS(NBOBJ-3),LGS(NBOBJ-3)) + LPHEAD=.FALSE. + LPCONS=.FALSE. + LPNUMF=.FALSE. + DO 80 IOBJ=3,NBOBJ + IDKOBJ=VINTE(2*IOBJ-1) + LGSEG=VINTE(2*IOBJ)+1 + ALLOCATE(ITCARO(LGSEG)) + CALL AEXDIR(IUNIT,LBLOC,ITCARO,IDKOBJ,LGSEG) + IDK=ITCARO(IDKNO) + CALL AEXCPC(IDK,20,ITCARO(1),NOMOBJ) + IDK=ITCARO(IDKTY) + CALL AEXCPC(IDK,8,ITCARO(1),TYPOBJ) + JDKDS=ITCARO(IDKDS) + JDKTS=ITCARO(IDKTS) + NS=ITCARO(IDKNS) + IF(TYPOBJ.EQ.'APOLIB') THEN + DO 70 IS=1,NS + IDK=JDKTS+8*(IS-1) + CALL AEXCPC(IDK,8,ITCARO(1),TYPSEG) + LTESTS=ITCARO(IDKLS+IS) + IF(LTESTS.LE.0) GO TO 70 + JDKS=ITCARO(JDKDS+IS) + CALL AEXTRT(LIBA21,TYPSEG,NBRTYP,ICHDIM_PTR,ICHTYP_PTR, + 1 ICHDKL_PTR) + CALL C_F_POINTER(ICHDIM_PTR,ICHDIM,(/ NBRTYP /)) + CALL C_F_POINTER(ICHTYP_PTR,ICHTYP,(/ NBRTYP /)) + CALL C_F_POINTER(ICHDKL_PTR,ICHDKL,(/ NBRTYP /)) + TSEGM_PTR=LCMARA(LTESTS+1) + CALL C_F_POINTER(TSEGM_PTR,ITSEGM,(/ LTESTS+1 /)) + CALL C_F_POINTER(TSEGM_PTR,RTSEGM,(/ LTESTS+1 /)) + CALL AEXDIR(IUNIT,LBLOC,ITSEGM,JDKS,LTESTS+1) + IF(TYPSEG.EQ.'PHEAD') THEN + LPHEAD=.TRUE. + CALL AEXGNV(3,ITSEGM,ICHDIM,ICHTYP, + 1 ICHDKL,IDK,NV) + IF(NV.EQ.0) THEN + TEXT12=CFILNA + CALL XABORT('LIBEAR: NO ISOTOPES PRESENT ON APOLIB-2 '// + 1 'FILE NAMED: '//TEXT12) + ENDIF + NISOT=NV/20 + IF(NISOT.NE.NEL) CALL XABORT('LIBEAR: INVALID NEL.') + ALLOCATE(NOM(5*NISOT)) + DO 20 ISO=1,NISOT + ISO2=(ISO-1)*5+1 + CALL AEXCPC(0,20,ITSEGM(IDK+ISO2-1),HNISOR) + CALL LCMCAR(HNISOR,.TRUE.,NOM(ISO2)) + READ(HNISOR,'(3A4)') (ITNAM(II,ISO),II=1,3) + 20 CONTINUE + ELSE IF(TYPSEG.EQ.'PCONST') THEN + LPCONS=.TRUE. + CALL AEXGNV(1,ITSEGM,ICHDIM,ICHTYP,ICHDKL,IDK,NV) + ALLOCATE(IA(NV)) + DO 30 I=1,NV + IA(I)=ITSEGM(IDK+I-1) + 30 CONTINUE + CALL AEXGNV(3,ITSEGM,ICHDIM,ICHTYP,ICHDKL,IDK,NV) + ALLOCATE(IZ(NV)) + DO 40 I=1,NV + IZ(I)=ITSEGM(IDK+I-1) + 40 CONTINUE + CALL AEXGNV(5,ITSEGM,ICHDIM,ICHTYP,ICHDKL,IDK,NV) + ALLOCATE(NFG(NV)) + DO 50 I=1,NV + NFG(I)=ITSEGM(IDK+I-1) + 50 CONTINUE + ELSE IF(TYPSEG.EQ.'PNUMF') THEN + LPNUMF=.TRUE. + CALL AEXGNV(1,ITSEGM,ICHDIM,ICHTYP,ICHDKL,IDK,NBFISS) + NBFISS=NBFISS/7 + CALL AEXGNV(4,ITSEGM,ICHDIM,ICHTYP,ICHDKL,IDK,NBPF) + NBPF=NBPF/7 + CALL AEXGNV(7,ITSEGM,ICHDIM,ICHTYP,ICHDKL,IDK,NV) + ALLOCATE(GAMMA(NV)) + DO 60 I=1,NV + GAMMA(I)=RTSEGM(IDK+I-1) + 60 CONTINUE + NMGY=NV/(NBFISS*NBPF) + ENDIF + CALL LCMDRD(TSEGM_PTR) + CALL LCMDRD(ICHDIM_PTR) + CALL LCMDRD(ICHTYP_PTR) + CALL LCMDRD(ICHDKL_PTR) + 70 CONTINUE + ELSE IF(TYPOBJ.EQ.'APOLIBE') THEN + NSEGM=NSEGM+1 + ISO2=(NSEGM-1)*5+1 + CALL LCMCAR(NOMOBJ,.TRUE.,NOMOB(ISO2)) + KDS(NSEGM)=IDKOBJ + LGS(NSEGM)=LGSEG + ELSE + CALL XABORT('LIBEAR: WEIRD SEGMENT TYPE: '//TYPOBJ//' (1).') + ENDIF + DEALLOCATE(ITCARO) + 80 CONTINUE + IF(.NOT.LPHEAD) CALL XABORT('LIBEAR: PHEAD SEGMENT NOT FOUND.') + IF(.NOT.LPCONS) CALL XABORT('LIBEAR: PCONST SEGMENT NOT FOUND.') + IF(.NOT.LPNUMF) CALL XABORT('LIBEAR: PNUMF SEGMENT NOT FOUND.') + DEALLOCATE(VINTE) +*---- +* SET THE CORRESPONDANCE BETWEEN THE APOLIB AND THE LIST OF ISOTOPES. +*---- + KISEG2=0 + DO 260 ISO=1,NISOT + ISO2=(ISO-1)*5+1 + CALL LCMCAR(TEXT16,.FALSE.,NOM(ISO2)) + TEXT20='ISOTOP'//TEXT16(:14) + CALL LCMCAR(TEXT20,.TRUE.,NITCA(1)) + DO 90 ISEG=1,NSEGM + ISEG2=(ISEG-1)*5+1 + IF(NITCA(1).EQ.NOMOB(ISEG2)) THEN + IF(NITCA(2).EQ.NOMOB(ISEG2+1)) THEN + IF(NITCA(3).EQ.NOMOB(ISEG2+2)) THEN + IF(NITCA(4).EQ.NOMOB(ISEG2+3)) THEN + IF(NITCA(5).EQ.NOMOB(ISEG2+4)) THEN + KISEG2=ISEG + GO TO 100 + ENDIF + ENDIF + ENDIF + ENDIF + ENDIF + 90 CONTINUE + WRITE (HSMG,500) HNISOR,CFILNA + CALL XABORT(HSMG) + 100 KISEG3=0 + TEXT20='PHYSIQ'//TEXT16(:14) + CALL LCMCAR(TEXT20,.TRUE.,NITCA(1)) + DO 110 ISEG=1,NSEGM + ISEG2=(ISEG-1)*5+1 + IF(NITCA(1).EQ.NOMOB(ISEG2)) THEN + IF(NITCA(2).EQ.NOMOB(ISEG2+1)) THEN + IF(NITCA(3).EQ.NOMOB(ISEG2+2)) THEN + IF(NITCA(4).EQ.NOMOB(ISEG2+3)) THEN + IF(NITCA(5).EQ.NOMOB(ISEG2+4)) THEN + KISEG3=ISEG + GO TO 120 + ENDIF + ENDIF + ENDIF + ENDIF + ENDIF + 110 CONTINUE +*---- +* ACTIVATION OF CORRESPONDING 'ISOTOP'//NAME SEGMENT. +*---- + 120 IDKOBJ=KDS(KISEG2) + LGSEG=LGS(KISEG2) + ALLOCATE(ITCARO(LGSEG)) + CALL AEXDIR(IUNIT,LBLOC,ITCARO,IDKOBJ,LGSEG) + IDK=ITCARO(IDKNO) + CALL AEXCPC(IDK,20,ITCARO(1),NOMOBJ) + IDK=ITCARO(IDKTY) + CALL AEXCPC(IDK,8,ITCARO(1),TYPOBJ) + JDKDS=ITCARO(IDKDS) + JDKTS=ITCARO(IDKTS) + NS=ITCARO(IDKNS) + NSETOT=0 + NPHY=0 +*---- +* RECOVER THE INFINITE DILUTION CROSS SECTION NUMEROTATION. +*---- + LPFIX=.FALSE. + DO 160 IS=1,NS + IDK=JDKTS+8*(IS-1) + CALL AEXCPC(IDK,8,ITCARO(1),TYPSEG) + LTESTS=ITCARO(IDKLS+IS) + IF(LTESTS.LE.0) GO TO 160 + JDKS=ITCARO(JDKDS+IS) + CALL AEXTRT(LIBA21,TYPSEG,NBRTYP,ICHDIM_PTR,ICHTYP_PTR,ICHDKL_PTR) + CALL C_F_POINTER(ICHDIM_PTR,ICHDIM,(/ NBRTYP /)) + CALL C_F_POINTER(ICHTYP_PTR,ICHTYP,(/ NBRTYP /)) + CALL C_F_POINTER(ICHDKL_PTR,ICHDKL,(/ NBRTYP /)) + TSEGM_PTR=LCMARA(LTESTS+1) + CALL C_F_POINTER(TSEGM_PTR,ITSEGM,(/ LTESTS+1 /)) + CALL C_F_POINTER(TSEGM_PTR,RTSEGM,(/ LTESTS+1 /)) + CALL AEXDIR(IUNIT,LBLOC,ITSEGM,JDKS,LTESTS+1) + IF(TYPSEG.EQ.'PFIX') THEN + LPFIX=.TRUE. +* NG ENERGY. + CALL AEXGNV(11,ITSEGM,ICHDIM,ICHTYP,ICHDKL,IDK,NV) + IF(NV.NE.0) THEN + IF(RTSEGM(IDK).NE.0.0) THEN + KPAX(NEL+3,ISO)=1 + BPAX(NEL+3,ISO)=RTSEGM(IDK) + ENDIF + ENDIF +* AVAILABLE CROSS SECTION TYPES. + CALL AEXGNV(12,ITSEGM,ICHDIM,ICHTYP,ICHDKL,IDK,NSECTT) + ALLOCATE(IZSECT(NSECTT)) + NSETOT=0 + NPHY=MAX(0,NSECTT-5) + DO 130 I=1,NSECTT + IZSECT(I)=ITSEGM(IDK+I-1) + IF((IZSECT(I).NE.0).AND.(I.LE.5)) NSETOT=NSETOT+1 + 130 CONTINUE +* FISSION ENERGIES. + CALL AEXGNV(20,ITSEGM,ICHDIM,ICHTYP,ICHDKL,IDK,NMGEF) + IF(NMGEF.NE.0) THEN + IF(RTSEGM(IDK+NMGEF-1).NE.0.0) THEN + KPAX(NEL+2,ISO)=1 + BPAX(NEL+2,ISO)=RTSEGM(IDK+NMGEF-1) + ENDIF + ENDIF +* RADIOACTIVE DECAY CONSTANTS. + CALL AEXGNV(22,ITSEGM,ICHDIM,ICHTYP,ICHDKL,IDK,NCHANN) + SUM=0.0 + DO 140 I=1,NCHANN + SUM=SUM+RTSEGM(IDK+I-1) + 140 CONTINUE + IF(SUM.NE.0.0) BPAX(NEL+1,ISO)=SUM*1.0E8 +* X-S NAMES. + CALL AEXGNV(26,ITSEGM,ICHDIM,ICHTYP,ICHDKL,IDK,NV) + IF(NV/8.NE.NSECTT) CALL XABORT('LIBEAR: INVALID TYPSECT.') + ALLOCATE(ISECTT(2*NSECTT)) + III=0 + DO 150 I=1,NSECTT + I2=(I-1)*2+1 + IF(IZSECT(I).NE.0) THEN + III=III+1 + I3=(III-1)*2+1 + CALL AEXCPC(0,8,ITSEGM(IDK+I2-1),TEXT8) + CALL LCMCAR(TEXT8,.TRUE.,ISECTT(I3)) + ENDIF + 150 CONTINUE + ENDIF + CALL LCMDRD(TSEGM_PTR) + CALL LCMDRD(ICHDIM_PTR) + CALL LCMDRD(ICHTYP_PTR) + CALL LCMDRD(ICHDKL_PTR) + 160 CONTINUE + IF(.NOT.LPFIX) CALL XABORT('LIBEAR: NO PFIX SEGMENT.') +*---- +* TEST THE INFINITE DILUTION CROSS SECTIONS. +*---- + ITSEC=0 + DO 210 IS=1,NS + LTESTS=ITCARO(IDKLS+IS) + IF(LTESTS.LE.0) GO TO 210 + IDK=JDKTS+8*(IS-1) + CALL AEXCPC(IDK,8,ITCARO(1),TYPSEG) + JDKS=ITCARO(JDKDS+IS) + CALL AEXTRT(LIBA21,TYPSEG,NBRTYP,ICHDIM_PTR,ICHTYP_PTR,ICHDKL_PTR) + CALL C_F_POINTER(ICHDIM_PTR,ICHDIM,(/ NBRTYP /)) + CALL C_F_POINTER(ICHTYP_PTR,ICHTYP,(/ NBRTYP /)) + CALL C_F_POINTER(ICHDKL_PTR,ICHDKL,(/ NBRTYP /)) + TSEGM_PTR=LCMARA(LTESTS+1) + CALL C_F_POINTER(TSEGM_PTR,ITSEGM,(/ LTESTS+1 /)) + CALL C_F_POINTER(TSEGM_PTR,RTSEGM,(/ LTESTS+1 /)) + CALL AEXDIR(IUNIT,LBLOC,ITSEGM,JDKS,LTESTS+1) + IF(TYPSEG.EQ.'PSECT') THEN +* RECOVER A VECTOR CROSS SECTION. + ITSEC=ITSEC+1 + IF(ITSEC.GT.NSETOT) GO TO 200 + CALL AEXGNV(1,ITSEGM,ICHDIM,ICHTYP, + 1 ICHDKL,IDK,NV) + I3=(ITSEC-1)*2+1 + CALL LCMCAR(TEXT8,.FALSE.,ISECTT(I3)) + IF(TEXT8.EQ.'SIGA') THEN + LTEST=.FALSE. + DO 170 IG=1,NV + LTEST=LTEST.OR.(RTSEGM(IDK+IG-1).NE.0.0) + 170 CONTINUE + IF(LTEST) KPAX(NEL+3,ISO)=1 + ELSE IF(TEXT8.EQ.'NEXCESS') THEN + LTEST=.FALSE. + DO 180 IG=1,NV + LTEST=LTEST.OR.(RTSEGM(IDK+IG-1).NE.0.0) + 180 CONTINUE + IF(LTEST) KPAX(NEL+4,ISO)=1 + ELSE IF(TEXT8.EQ.'SIGF') THEN + LTEST=.FALSE. + DO 190 IG=1,NV + LTEST=LTEST.OR.(RTSEGM(IDK+IG-1).NE.0.0) + 190 CONTINUE + IF(LTEST) KPAX(NEL+2,ISO)=1 + ENDIF + ENDIF + 200 CALL LCMDRD(TSEGM_PTR) + CALL LCMDRD(ICHDIM_PTR) + CALL LCMDRD(ICHTYP_PTR) + CALL LCMDRD(ICHDKL_PTR) + 210 CONTINUE +*---- +* TEST THE PRODUCTION REACTIONS. +*---- + IF(NPHY.GE.1) THEN + IF(KISEG3.EQ.0) CALL XABORT('LIBEAR: INVALID PRODUCTION X-S (' + 1 //'1).') + IDKOBJ=KDS(KISEG3) + LGSEG=LGS(KISEG3) + CALL AEXDIR(IUNIT,LBLOC,ITCARO,IDKOBJ,LGSEG) + LDKDS=ITCARO(IDKDS) + LDKTS=ITCARO(IDKTS) + NS=ITCARO(IDKNS) + IF(NS.NE.NPHY) CALL XABORT('LIBEAR: INVALID PRODUCTION X-S(2)' + 1 //'.') + DO 240 IPHY=1,NPHY + IDK=LDKTS+8*(IPHY-1) + CALL AEXCPC(IDK,8,ITCARO(1),TYPSEG) + IF(TYPSEG.NE.'PSECT') CALL XABORT('LIBEAR: INVALID PRODUCTION' + 1 //' X-S(3).') + LNGS=ITCARO(IDKLS+IPHY) + IF(LNGS.LE.0) CALL XABORT('LIBEAR: INVALID PRODUCTION X-S(4).') + LDKS=ITCARO(LDKDS+IPHY) + CALL AEXTRT(LIBA21,TYPSEG,NBRTYP,ICHDIM_PTR,ICHTYP_PTR, + 1 ICHDKL_PTR) + CALL C_F_POINTER(ICHDIM_PTR,ICHDIM,(/ NBRTYP /)) + CALL C_F_POINTER(ICHTYP_PTR,ICHTYP,(/ NBRTYP /)) + CALL C_F_POINTER(ICHDKL_PTR,ICHDKL,(/ NBRTYP /)) + TSEGM_PTR=LCMARA(LNGS+1) + CALL C_F_POINTER(TSEGM_PTR,ITSEGM,(/ LNGS+1 /)) + CALL C_F_POINTER(TSEGM_PTR,RTSEGM,(/ LNGS+1 /)) + CALL AEXDIR(IUNIT,LBLOC,ITSEGM,LDKS,LNGS+1) + CALL AEXGNV(1,ITSEGM,ICHDIM,ICHTYP,ICHDKL,IDK,NV) + CALL LCMDRD(ICHDIM_PTR) + CALL LCMDRD(ICHTYP_PTR) + CALL LCMDRD(ICHDKL_PTR) + I3=(NSETOT+IPHY-1)*2+1 + CALL LCMCAR(TEXT8,.FALSE.,ISECTT(I3)) + IF(TEXT8.EQ.'CREA-P') THEN + LTEST=.FALSE. + DO 220 IG=1,NV + LTEST=LTEST.OR.(RTSEGM(IDK+IG-1).NE.0.0) + 220 CONTINUE + IF(LTEST) KPAX(NEL+8,ISO)=1 + ELSE IF(TEXT8.EQ.'CREA-H2') THEN + LTEST=.FALSE. + DO 225 IG=1,NV + LTEST=LTEST.OR.(RTSEGM(IDK+IG-1).NE.0.0) + 225 CONTINUE + IF(LTEST) KPAX(NEL+11,ISO)=1 + ELSE IF(TEXT8.EQ.'CREA-H3') THEN + LTEST=.FALSE. + DO 230 IG=1,NV + LTEST=LTEST.OR.(RTSEGM(IDK+IG-1).NE.0.0) + 230 CONTINUE + IF(LTEST) KPAX(NEL+12,ISO)=1 + ENDIF + CALL LCMDRD(TSEGM_PTR) + 240 CONTINUE + ENDIF + DEALLOCATE(ITCARO) +*---- +* SET OTHER INFORMATION. +*---- + ITZEA(ISO)=IZ(ISO)*10000+IA(ISO)*10 + IPF=NFG(ISO) + IF(IPF.LT.0) THEN + KPAX(NEL+2,ISO)=-1 + DO 250 JSO=1,NISOT + IFI=NFG(JSO) + IF(IFI.GT.0) THEN + IOFSET=((-IPF-1)*NBFISS+(IFI-1))*NMGY+NMGY + BPAX(ISO,JSO)=GAMMA(IOFSET) + IF(BPAX(ISO,JSO).NE.0.0) KPAX(ISO,JSO)=2 + ENDIF + 250 CONTINUE + ENDIF + DEALLOCATE(ISECTT,IZSECT) + 260 CONTINUE +* + DEALLOCATE(LGS,KDS,NOMOB,GAMMA,NFG,IZ,IA,NOM) + IERR=KDRCLS(IUNIT,1) + IF(IERR.LT.0) THEN + TEXT12=CFILNA + CALL XABORT('LIBEAR: APOLLO-2 LIBRARY '//TEXT12//' CANNOT B'// + 1 'E CLOSED') + ENDIF +*---- +* RECOVER INFORMATION FROM INPUT DATA STREAM. +*---- + ALLOCATE(IKEEP(NEL)) + IKEEP(:NEL)=0 + TEXT12=' ' + CALL REDGET(INDIC,NITMA,FLOTT,TEXT12,DBLINP) + IF(INDIC.NE.3.OR.TEXT12.NE.'CHAIN') + > CALL XABORT('LIBEAR: KEYWORD CHAIN MISSING') + CALL REDGET(INDIC,NITMA,FLOTT,TEXT12,DBLINP) + DO 340 IEL=1,NEL + IF(TEXT12.EQ.'ENDCHAIN') GO TO 350 + IF(INDIC.NE.3) CALL XABORT('LIBEAR: ISOTOPE NAME hnamson MISSING') + I1=INDEX(TEXT12,'_') + HNISOR=' ' + IF(I1.EQ.0) THEN + HNISOR(:12)=TEXT12 + ELSE + HNISOR(:I1-1)=TEXT12(:I1-1) + ENDIF + IDEPL=0 + DO 270 JEL=1,NEL + WRITE(TEXT12,'(3A4)') (ITNAM(II,JEL),II=1,3) + I1=INDEX(TEXT12,'_') + HITNAM=' ' + IF(I1.EQ.0) THEN + HITNAM(:12)=TEXT12 + ELSE + HITNAM(:I1-1)=TEXT12(:I1-1) + ENDIF + IF(HNISOR.EQ.HITNAM) THEN + IDEPL=JEL + GO TO 280 + ENDIF + 270 CONTINUE + WRITE(HSMG,'(25HLIBEAR: MISSING ISOTOPE '',A12,5H''(1).)') + > HNISOR + CALL XABORT(HSMG) + 280 IKEEP(IDEPL)=1 + IF(BPAX(NEL+1,IDEPL).NE.0.0) KPAX(NEL+1,IDEPL)=1 + CALL REDGET(INDIC,NITMA,FLOTT,TEXT12,DBLINP) + IF(INDIC.NE.3) CALL XABORT('LIBEAR: REACTION TYPE EXPECTED') + IF(TEXT12.EQ.'FROM') THEN + CALL REDGET(INDIC,NITMA,FLOTT,TEXT12,DBLINP) + 290 IF(INDIC.NE.3) CALL XABORT('LIBEAR: REACTION TYPE EXPECTED') + DO 330 IREAC=1,MAXR + RRAT=1.0 + IF(TEXT12.EQ.NMDEPL(IREAC)) THEN + DO 320 JEL=1,NEL + CALL REDGET(INDIC,ISOT,RRAT,TEXT12,DBLINP) + IF(INDIC.NE.2) GO TO 290 + CALL REDGET(INDIC,ISOT,FLOTT,TEXT12,DBLINP) + IF(INDIC.NE.3) CALL XABORT('LIBEAR: ISOTOPE NAME HNAMPAR ' + > //'MISSING') + I1=INDEX(TEXT12,'_') + TEXT20=' ' + IF(I1.EQ.0) THEN + TEXT20(:12)=TEXT12 + ELSE + TEXT20(:I1-1)=TEXT12(:I1-1) + ENDIF + JDEPL=0 + DO 300 JREL=1,NEL + WRITE(TEXT12,'(3A4)') (ITNAM(II,JREL),II=1,3) + I1=INDEX(TEXT12,'_') + HITNAM=' ' + IF(I1.EQ.0) THEN + HITNAM(:12)=TEXT12 + ELSE + HITNAM(:I1-1)=TEXT12(:I1-1) + ENDIF + IF(TEXT20.EQ.HITNAM) THEN + JDEPL=JREL + GO TO 310 + ENDIF + 300 CONTINUE + WRITE(HSMG,'(25HLIBEAR: MISSING ISOTOPE '',A12,5H''(2).)') + > TEXT20 + CALL XABORT(HSMG) + 310 KPAX(IDEPL,JDEPL)=IREAC + BPAX(IDEPL,JDEPL)=RRAT + 320 CONTINUE + CALL XABORT('LIBEAR: TO MANY PARENT ISOTOPES') + ENDIF + 330 CONTINUE + ENDIF + 340 CONTINUE + IF(INDIC.NE.3.OR.TEXT12.NE.'ENDCHAIN') + > CALL XABORT('LIBEAR: KEYWORD ENDCHAIN MISSING') + 350 DO 380 JEL=1,NEL + IF(IKEEP(JEL).EQ.0) THEN + DO 360 IREAC=1,NEL+MAXR + KPAX(IREAC,JEL)=0 + 360 CONTINUE + DO 370 IEL=1,NEL + KPAX(JEL,IEL)=0 + 370 CONTINUE + ENDIF + 380 CONTINUE + DEALLOCATE(IKEEP) + RETURN +* + 500 FORMAT(26HLIBEAR: MATERIAL/ISOTOPE ',A20,20H' IS MISSING ON APOL, + > 15HIB-2 FILE NAME ,A12,1H.) + END |
