summaryrefslogtreecommitdiff
path: root/Dragon/src/SAPCA2.f
diff options
context:
space:
mode:
Diffstat (limited to 'Dragon/src/SAPCA2.f')
-rw-r--r--Dragon/src/SAPCA2.f956
1 files changed, 956 insertions, 0 deletions
diff --git a/Dragon/src/SAPCA2.f b/Dragon/src/SAPCA2.f
new file mode 100644
index 0000000..b7e071a
--- /dev/null
+++ b/Dragon/src/SAPCA2.f
@@ -0,0 +1,956 @@
+*DECK SAPCA2
+ SUBROUTINE SAPCA2(IPSAP,IPEDIT,NREA,NISO,NMAC,NADRX,NED,NPRC,NG,
+ 1 NL,ITRANC,IMC,NMIL,NBISO,ICAL,MAXRDA,MAXIDA,FNORM,LCRON,NISOTS,
+ 2 NMILNR,NISFS,NISPS,NISYS,REGFLX)
+*
+*-----------------------------------------------------------------------
+*
+*Purpose:
+* Recover the cross sections of an elementary calculation.
+*
+*Copyright:
+* Copyright (C) 2007 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
+* IPSAP pointer to the Saphyb.
+* IPEDIT pointer to the edition object (L_EDIT signature).
+* NREA number of requested reactions.
+* NISO number of particularized isotopes.
+* NMAC number of macros.
+* NADRX total number of ADRX sets.
+* NED number of additional edition cross sections.
+* NPRC number of delayed neutron precursors.
+* NG number of condensed energy groups.
+* NL number of Legendre orders.
+* ITRANC type of transport correction.
+* IMC type of macro-calculation (1 for diffusion or SPN;
+* 2 other method).
+* NMIL number of mixtures in the Saphyb.
+* NBISO number of isotopes in the condensed microlib of the edition
+* object. A given isotope may appear in many mixtures.
+* ICAL index of the current elementary calculation.
+* MAXRDA dimension of RDATAX array.
+* MAXIDA dimension of IDATAP array.
+* FNORM flux normalization factor.
+* LCRON flag set to .TRUE. to put kinetics data into divers directory.
+*
+*Parameters: output
+* NISOTS number of distinct isotopes.
+* NMILNR number of mixtures with delayed neutron data.
+* NISFS number of particularized fissile isotopes.
+* NISPS number of particularized fission products.
+* NISYS number of particularized fissile isotopes, fission products
+* and macros.
+* REGFLX averaged flux in the complete geometry.
+*
+*-----------------------------------------------------------------------
+*
+ USE GANLIB
+*----
+* SUBROUTINE ARGUMENTS
+*----
+ TYPE(C_PTR) IPSAP,IPEDIT
+ INTEGER NREA,NISO,NMAC,NADRX,NED,NPRC,NG,NL,ITRANC,IMC,NMIL,NBISO,
+ 1 ICAL,MAXRDA,MAXIDA,NISOTS,NMILNR,NISFS,NISPS,NISYS
+ REAL FNORM,REGFLX(NG)
+ LOGICAL LCRON
+*----
+* LOCAL VARIABLES
+*----
+ PARAMETER (NREAK=20,MAXISO=800)
+ TYPE(C_PTR) JPEDIT,KPEDIT,IPTEMP,KPTEMP
+ INTEGER FGYS(2)
+ REAL VALDIV(3)
+ CHARACTER NOMREA(NREAK)*12,NOMISO(MAXISO)*8,ISOTS(MAXISO)*8,
+ 1 DIRNAM*12,CM*2,TEXT8*8,TEXT12*12,IDVAL(3)*4,HSMG*131
+ LOGICAL EXIST,LSPH
+ DOUBLE PRECISION CONV
+*----
+* ALLOCATABLE ARRAYS
+*----
+ INTEGER, ALLOCATABLE, DIMENSION(:) :: RESMAC,NISOMN,ISADRX,LENGDX,
+ 1 LENGDP,IDATAP,IFDG,IADR,IFDG2,IADR2,IJJ1,NJJ1,IPOS,IJJ2,NJJ2,MIX,
+ 2 ITYPE
+ INTEGER, ALLOCATABLE, DIMENSION(:,:) :: ISOMIL,ISONAM
+ INTEGER, ALLOCATABLE, DIMENSION(:,:,:) :: ADRX
+ REAL, ALLOCATABLE, DIMENSION(:) :: RDATAX,FLUX,OVERV,WORKD,WORK1,
+ 1 WORK2,VOL,DEN,DENISO,CONCES,DECAYC
+ REAL, ALLOCATABLE, DIMENSION(:,:) :: DNUSIG,DCHI,DATA1,DATA2,
+ 1 DATA4,SPH
+ REAL, ALLOCATABLE, DIMENSION(:,:,:) :: DATA3
+ TYPE(C_PTR), ALLOCATABLE, DIMENSION(:) :: IPISO
+*----
+* SCRATCH STORAGE ALLOCATION
+*----
+ ALLOCATE(RESMAC(NMIL),ADRX(NREA+2,NISO+NMAC,NADRX+NMIL),
+ 1 ISOMIL(NISO+NMAC,NMIL),NISOMN(NMIL),ISADRX(NMIL),LENGDX(NMIL),
+ 2 LENGDP(NMIL),IDATAP(MAXIDA),IFDG(NG),IADR(NG+1),IFDG2(NG),
+ 3 IADR2(NG+1),IJJ1(NMIL),NJJ1(NMIL),IPOS(NMIL),IJJ2(NG),NJJ2(NG),
+ 4 ISONAM(3,NBISO),MIX(NBISO),ITYPE(NBISO))
+ ALLOCATE(RDATAX(MAXRDA),FLUX(NG),OVERV(NG),DNUSIG(NG,NPRC+1),
+ 1 DCHI(NG,NPRC),WORKD(NPRC),WORK1(NG*NMIL+1),WORK2(NG),VOL(NMIL),
+ 2 DATA1(NG,NREA),DATA2(NG,NL),DATA3(NG,NG,NL),DATA4(NG,NG),
+ 3 DEN(NBISO),DENISO(NISO),CONCES(NBISO),DECAYC(NBISO))
+*
+ CONV=1.0D6 ! convert MeV to eV in H-FACTOR
+ IF(NREA.GT.NREAK) CALL XABORT('SAPCA2: NOMREA OVERFLOW.')
+*----
+* RECOVER INFORMATION FROM THE 'contenu' DIRECTORY.
+*----
+ CALL LCMSIX(IPSAP,'contenu',1)
+ IF(NREA.GT.0) CALL LCMGTC(IPSAP,'NOMREA',12,NREA,NOMREA)
+ IF(NISO.GT.0) CALL LCMGTC(IPSAP,'NOMISO',8,NISO,NOMISO)
+ CALL LCMGET(IPSAP,'RESMAC',RESMAC)
+ CALL LCMSIX(IPSAP,' ',2)
+*----
+* RECOVER INFORMATION FROM THE 'geom' DIRECTORY.
+*----
+ CALL LCMSIX(IPSAP,'geom',1)
+ CALL LCMGET(IPSAP,'XVOLMT',VOL)
+ CALL LCMSIX(IPSAP,' ',2)
+*----
+* RECOVER INFORMATION FROM THE 'adresses' DIRECTORY.
+*----
+ CALL LCMSIX(IPSAP,'adresses',1)
+ CALL LCMLEN(IPSAP,'ADRX',ILONG,ITYLCM)
+ IF(ILONG.GT.0) CALL LCMGET(IPSAP,'ADRX',ADRX)
+ CALL LCMLEN(IPSAP,'NISOMN',ILONG,ITYLCM)
+ IF(ILONG.GT.0) THEN
+ CALL LCMGET(IPSAP,'NISOMN',NISOMN)
+ ELSE
+ NISOMN(:NMIL)=0
+ ENDIF
+ CALL LCMSIX(IPSAP,' ',2)
+*----
+* SAVE INFORMATION TO THE 'constphysiq' DIRECTORY.
+*----
+ IF(ICAL.EQ.1) THEN
+ CALL LCMLEN(IPEDIT,'ENERGY',ILONG,ITYLCM)
+ IF(ILONG.EQ.0) THEN
+ CALL LCMSIX(IPEDIT,'MACROLIB',1)
+ CALL LCMLEN(IPEDIT,'ENERGY',ILONG,ITYLCM)
+ IF(ILONG.NE.NG+1) CALL XABORT('SAPCA2: BAD VALUE OF NG(1).')
+ CALL LCMGET(IPEDIT,'ENERGY',WORK1)
+ CALL LCMSIX(IPEDIT,' ',2)
+ ELSE
+ IF(ILONG.NE.NG+1) CALL XABORT('SAPCA2: BAD VALUE OF NG(2).')
+ CALL LCMGET(IPEDIT,'ENERGY',WORK1)
+ ENDIF
+ CALL LCMSIX(IPSAP,'constphysiq',1)
+ DO 10 I=1,NG+1
+ WORK1(I)=WORK1(I)*1.0E-6
+ 10 CONTINUE
+ CALL LCMPUT(IPSAP,'ENRGS',NG+1,2,WORK1)
+ FGYS(1)=1
+ FGYS(2)=NG+1
+ CALL LCMPUT(IPSAP,'FGYS',2,1,FGYS)
+ CALL LCMSIX(IPSAP,' ',2)
+ ENDIF
+*----
+* MOVE TO THE 'calc' DIRECTORY.
+*----
+ WRITE(DIRNAM,'(''calc'',I8)') ICAL
+ CALL LCMSIX(IPSAP,DIRNAM,1)
+*----
+* FIND THE NUMBER AND NAMES OF THE ISOTOPES IN THE OUTPUT TABLES.
+*----
+ IF(NBISO.GT.0) THEN
+ CALL LCMGET(IPEDIT,'ISOTOPESUSED',ISONAM)
+ CALL LCMGET(IPEDIT,'ISOTOPESMIX',MIX)
+ CALL LCMGET(IPEDIT,'ISOTOPESDENS',DEN)
+ CALL LCMGET(IPEDIT,'ISOTOPESTYPE',ITYPE)
+ ENDIF
+ NISOTS=0
+ DO 30 IBISO=1,NBISO
+ IF(MIX(IBISO).EQ.0) GO TO 30
+ WRITE(TEXT12,'(3A4)') (ISONAM(I0,IBISO),I0=1,3)
+ DO 20 ISO=1,NISOTS
+ IF(TEXT12(:8).EQ.ISOTS(ISO)) GO TO 30
+ 20 CONTINUE
+ NISOTS=NISOTS+1
+ IF(NISOTS.GT.MAXISO) CALL XABORT('SAPCA2: ISOTS OVERFLOW.')
+ IF(NISOTS.GT.NBISO) CALL XABORT('SAPCA2: CONCES OVERFLOW.')
+ ISOTS(NISOTS)=TEXT12(:8)
+ 30 CONTINUE
+*----
+* RECOVER INVERSE OF SPH EQUIVALENCE FACTORS.
+*----
+ CALL LCMSIX(IPEDIT,'MACROLIB',1)
+ JPEDIT=LCMGID(IPEDIT,'GROUP')
+ LSPH=.FALSE.
+ ALLOCATE(SPH(NMIL,NG))
+ DO 35 IGR=1,NG
+ KPEDIT=LCMGIL(JPEDIT,IGR)
+ CALL LCMLEN(KPEDIT,'NSPH',ILONG,ITYLCM)
+ IF(ILONG.GT.0) THEN
+ LSPH=.TRUE.
+ CALL LCMGET(KPEDIT,'NSPH',WORK1)
+ DO 33 IMIL=1,NMIL
+ SPH(IMIL,IGR)=1.0/WORK1(IMIL)
+ 33 CONTINUE
+ ELSE
+ DO 34 IMIL=1,NMIL
+ SPH(IMIL,IGR)=1.0
+ 34 CONTINUE
+ ENDIF
+ 35 CONTINUE
+ CALL LCMSIX(IPEDIT,' ',2)
+*----
+* CREATE A SPH-UNCORRECTED MICROLIB.
+*----
+ CALL LCMOP(IPTEMP,'*TEMPORARY*',0,1,0)
+ ALLOCATE(IPISO(NBISO))
+ CALL LCMEQU(IPEDIT,IPTEMP)
+ IF(LSPH) THEN
+ IF(IMC.EQ.0) CALL XABORT('SAPCA2: UNDEFINED TYPE OF SPH.')
+ NW=1 ! NTOT1 cross section present
+ NALBP=0 ! no albedo correction
+ CALL SPHCMI(IPTEMP,0,IMC,NMIL,NBISO,NG,NL,NW,NED,NPRC,NALBP,SPH)
+ ENDIF
+ DEALLOCATE(SPH)
+*----
+* LOOP OVER SAPHYB MIXTURES.
+*----
+ NMILNR=0
+ REGFLX(1:NG)=0.0
+ VOLTOT=0.0
+ DO 500 IMIL=1,NMIL
+ VOLTOT=VOLTOT+VOL(IMIL)
+ IOR=0
+ IOI=0
+ IIS=0
+ NISMAX=NMAC
+ ISOMIL(:NISO+NMAC,IMIL)=0
+ IADR(1)=1
+*----
+* PROCESS MACROS.
+*----
+ CALL LCMSIX(IPTEMP,'MACROLIB',1)
+ JPEDIT=LCMGID(IPTEMP,'GROUP')
+ NVDIV=0
+ CALL LCMLEN(IPTEMP,'K-EFFECTIVE',ILONG,ITYLCM)
+ IF(ILONG.EQ.1) THEN
+ CALL LCMGET(IPTEMP,'K-EFFECTIVE',FLOTT)
+ NVDIV=NVDIV+1
+ IDVAL(NVDIV)='KEFF'
+ VALDIV(NVDIV)=FLOTT
+ ENDIF
+ CALL LCMLEN(IPTEMP,'K-INFINITY',ILONG,ITYLCM)
+ IF(ILONG.EQ.1) THEN
+ CALL LCMGET(IPTEMP,'K-INFINITY',FLOTT)
+ NVDIV=NVDIV+1
+ IDVAL(NVDIV)='KINF'
+ VALDIV(NVDIV)=FLOTT
+ ENDIF
+ CALL LCMLEN(IPTEMP,'B2 B1HOM',ILONG,ITYLCM)
+ IF(ILONG.EQ.1) THEN
+ CALL LCMGET(IPTEMP,'B2 B1HOM',B2)
+ IF(B2.EQ.0.0) B2=1.0E-10
+ NVDIV=NVDIV+1
+ IDVAL(NVDIV)='B2 '
+ VALDIV(NVDIV)=B2
+ ELSE
+ B2=0.0
+ ENDIF
+ DATA2(:NG,:NL)=0.0
+ DATA3(:NG,:NG,:NL)=0.0
+*
+ DO 90 IGR=1,NG
+ KPEDIT=LCMGIL(JPEDIT,IGR)
+*----
+* RECOVER THE NEUTRON FLUX.
+*----
+ CALL LCMGET(KPEDIT,'FLUX-INTG',WORK1)
+ FLUX(IGR)=WORK1(IMIL)*FNORM*1.0E13
+ REGFLX(IGR)=REGFLX(IGR)+FLUX(IGR)
+*----
+* RECOVER DELAYED NEUTRON INFORMATION.
+*----
+ CALL LCMLEN(KPEDIT,'NUSIGF',ILONG,ITYLCM)
+ IF((NPRC.GT.0).AND.(ILONG.NE.0)) THEN
+ CALL LCMGET(KPEDIT,'NUSIGF',WORK1)
+ DNUSIG(IGR,NPRC+1)=WORK1(IMIL)
+ CALL LCMGET(KPEDIT,'OVERV',WORK1)
+ OVERV(IGR)=WORK1(IMIL)
+ DO 40 IPRC=1,NPRC
+ WRITE(TEXT12,'(6HNUSIGF,I2.2)') IPRC
+ CALL LCMGET(KPEDIT,TEXT12,WORK1)
+ DNUSIG(IGR,IPRC)=WORK1(IMIL)
+ WRITE(TEXT12,'(3HCHI,I2.2)') IPRC
+ CALL LCMGET(KPEDIT,TEXT12,WORK1)
+ DCHI(IGR,IPRC)=WORK1(IMIL)
+ 40 CONTINUE
+ ELSE
+ DNUSIG(IGR,:NPRC+1)=0.0
+ ENDIF
+*
+ DO 80 IREA=1,NREA
+ DATA1(IGR,IREA)=0.0
+ IF(NOMREA(IREA).EQ.'TOTALE') THEN
+ CALL LCMGET(KPEDIT,'NTOT0',WORK1)
+ DATA1(IGR,IREA)=WORK1(IMIL)
+ ELSE IF(NOMREA(IREA).EQ.'TOTALE P1') THEN
+ CALL LCMGET(KPEDIT,'NTOT1',WORK1)
+ DATA1(IGR,IREA)=WORK1(IMIL)
+ ELSE IF(NOMREA(IREA).EQ.'ABSORPTION') THEN
+ CALL LCMGET(KPEDIT,'NTOT0',WORK1)
+ DATA1(IGR,IREA)=WORK1(IMIL)
+ CALL LCMLEN(KPEDIT,'SIGS00',ILONG,ITYLCM)
+ IF(ILONG.GT.0) THEN
+ CALL LCMGET(KPEDIT,'SIGS00',WORK1)
+ DATA1(IGR,IREA)=DATA1(IGR,IREA)-WORK1(IMIL)
+ ENDIF
+ CALL LCMLEN(KPEDIT,'N2N',ILONG,ITYLCM)
+ IF(ILONG.GT.0) THEN
+ CALL LCMGET(KPEDIT,'N2N',WORK1)
+ DATA1(IGR,IREA)=DATA1(IGR,IREA)+WORK1(IMIL)
+ ENDIF
+ CALL LCMLEN(KPEDIT,'N3N',ILONG,ITYLCM)
+ IF(ILONG.GT.0) THEN
+ CALL LCMGET(KPEDIT,'N3N',WORK1)
+ DATA1(IGR,IREA)=DATA1(IGR,IREA)+2.0*WORK1(IMIL)
+ ENDIF
+ ELSE IF(NOMREA(IREA).EQ.'EXCESS') THEN
+ CALL LCMLEN(KPEDIT,'N2N',ILONG,ITYLCM)
+ IF(ILONG.GT.0) THEN
+ CALL LCMGET(KPEDIT,'N2N',WORK1)
+ DATA1(IGR,IREA)=WORK1(IMIL)
+ ENDIF
+ CALL LCMLEN(KPEDIT,'N3N',ILONG,ITYLCM)
+ IF(ILONG.GT.0) THEN
+ CALL LCMGET(KPEDIT,'N3N',WORK1)
+ DATA1(IGR,IREA)=DATA1(IGR,IREA)+2.0*WORK1(IMIL)
+ ENDIF
+ ELSE IF(NOMREA(IREA).EQ.'FISSION') THEN
+ CALL LCMLEN(KPEDIT,'NFTOT',ILONG,ITYLCM)
+ IF(ILONG.GT.0) THEN
+ CALL LCMGET(KPEDIT,'NFTOT',WORK1)
+ DATA1(IGR,IREA)=WORK1(IMIL)
+ ENDIF
+ ELSE IF(NOMREA(IREA).EQ.'SPECTRE') THEN
+ CALL LCMLEN(KPEDIT,'CHI',ILONG,ITYLCM)
+ IF(ILONG.GT.0) THEN
+ CALL LCMGET(KPEDIT,'CHI',WORK1)
+ DATA1(IGR,IREA)=WORK1(IMIL)
+ ENDIF
+ ELSE IF(NOMREA(IREA).EQ.'NU*FISSION') THEN
+ CALL LCMLEN(KPEDIT,'NUSIGF',ILONG,ITYLCM)
+ IF(ILONG.GT.0) THEN
+ CALL LCMGET(KPEDIT,'NUSIGF',WORK1)
+ DATA1(IGR,IREA)=WORK1(IMIL)
+ ENDIF
+ ELSE IF(NOMREA(IREA).EQ.'ENERGIE') THEN
+ CALL LCMLEN(KPEDIT,'H-FACTOR',ILONG,ITYLCM)
+ IF(ILONG.GT.0) THEN
+ CALL LCMGET(KPEDIT,'H-FACTOR',WORK1)
+ DATA1(IGR,IREA)=WORK1(IMIL)/REAL(CONV)
+ ENDIF
+ ELSE IF(NOMREA(IREA).EQ.'FUITES') THEN
+ CALL LCMLEN(KPEDIT,'DIFF',ILONG,ITYLCM)
+ IF(ILONG.GT.0) THEN
+ IF(B2.EQ.0.0) B2=1.0E-10
+ CALL LCMGET(KPEDIT,'DIFF',WORK1)
+ DATA1(IGR,IREA)=WORK1(IMIL)*B2
+ ENDIF
+ ELSE IF(NOMREA(IREA).EQ.'STRD') THEN
+ CALL LCMLEN(KPEDIT,'DIFF',ILONG,ITYLCM)
+ IF(ILONG.GT.0) THEN
+ CALL LCMGET(KPEDIT,'DIFF',WORK1)
+ DATA1(IGR,IREA)=1.0/(3.0*WORK1(IMIL))
+ ENDIF
+ ELSE IF(NOMREA(IREA).EQ.'SELF') THEN
+ CALL LCMGET(KPEDIT,'SIGW00',WORK1)
+ DATA1(IGR,IREA)=WORK1(IMIL)
+ ELSE IF(NOMREA(IREA).EQ.'DIFFUSION') THEN
+ DO 50 IL=1,NL
+ WRITE (CM,'(I2.2)') IL-1
+ CALL LCMGET(KPEDIT,'SIGS'//CM,WORK1)
+ DATA2(IGR,IL)=WORK1(IMIL)
+ 50 CONTINUE
+ CALL LCMLEN(KPEDIT,'N2N',ILONG,ITYLCM)
+ IF(ILONG.GT.0) THEN
+ CALL LCMGET(KPEDIT,'N2N',WORK1)
+ DATA2(IGR,1)=DATA2(IGR,1)-WORK1(IMIL)
+ ENDIF
+ CALL LCMLEN(KPEDIT,'N3N',ILONG,ITYLCM)
+ IF(ILONG.GT.0) THEN
+ CALL LCMGET(KPEDIT,'N3N',WORK1)
+ DATA2(IGR,1)=DATA2(IGR,1)-2.0*WORK1(IMIL)
+ ENDIF
+ ELSE IF(NOMREA(IREA).EQ.'TRANSP-CORR') THEN
+ IF((ITRANC.EQ.1).AND.(NL.GE.2)) THEN
+ CALL LCMGET(KPEDIT,'SIGS01',WORK1)
+ DATA1(IGR,IREA)=WORK1(IMIL)
+ ELSE IF(ITRANC.EQ.2) THEN
+ CALL LCMGET(KPEDIT,'TRANC',WORK1)
+ DATA1(IGR,IREA)=WORK1(IMIL)
+ ENDIF
+ ELSE IF(NOMREA(IREA).EQ.'PROFIL') THEN
+ IFDG(IGR)=NG+1
+ ILDG=0
+ DO 60 IL=1,NL
+ WRITE (CM,'(I2.2)') IL-1
+ CALL LCMGET(KPEDIT,'IJJS'//CM,IJJ1)
+ CALL LCMGET(KPEDIT,'NJJS'//CM,NJJ1)
+ IFDG(IGR)=MIN(IFDG(IGR),IJJ1(IMIL)-NJJ1(IMIL)+1)
+ ILDG=MAX(ILDG,IJJ1(IMIL))
+ 60 CONTINUE
+ IADR(IGR+1)=IADR(IGR)+(ILDG-IFDG(IGR)+1)
+ ELSE IF(NOMREA(IREA).EQ.'TRANSFERT') THEN
+ DO 75 IL=1,NL
+ WRITE (CM,'(I2.2)') IL-1
+ CALL LCMGET(KPEDIT,'IJJS'//CM,IJJ1)
+ CALL LCMGET(KPEDIT,'NJJS'//CM,NJJ1)
+ CALL LCMGET(KPEDIT,'IPOS'//CM,IPOS)
+ CALL LCMGET(KPEDIT,'SCAT'//CM,WORK1)
+ IPO=IPOS(IMIL)
+ J2=IJJ1(IMIL)
+ J1=IJJ1(IMIL)-NJJ1(IMIL)+1
+ DO 70 JGR=J2,J1,-1
+ DATA3(JGR,IGR,IL)=WORK1(IPO)*REAL(2*IL-1)
+ IPO=IPO+1
+ 70 CONTINUE
+ 75 CONTINUE
+ ELSE
+ CALL LCMLEN(KPEDIT,NOMREA(IREA),ILONG,ITYLCM)
+ IF(ILONG.GT.0) THEN
+ CALL LCMGET(KPEDIT,NOMREA(IREA),WORK1)
+ DATA1(IGR,IREA)=WORK1(IMIL)
+ ENDIF
+ ENDIF
+ 80 CONTINUE
+ 90 CONTINUE
+ CALL LCMSIX(IPTEMP,' ',2)
+*----
+* FIND ISOTOPE POINTERS IN INPUT MICROLIB
+*----
+ CALL LIBIPS(IPTEMP,NBISO,IPISO)
+*----
+* PROCESS PARTICULARIZED ISOTOPES
+*----
+ DO 105 IISO=1,NISO
+ DO 100 IREA=1,NREA+2
+ ADRX(IREA,IISO,NADRX+1)=0
+ 100 CONTINUE
+ 105 CONTINUE
+ CONCES(:NISOTS)=0.0
+ DECAYC(:NISOTS)=0.0
+ DO 250 IBISO=1,NBISO
+ IF(MIX(IBISO).EQ.IMIL) THEN
+ WRITE(TEXT12,'(3A4)') (ISONAM(I0,IBISO),I0=1,3)
+ DO 110 ISO=1,NISO
+ IISO=ISO
+ IF(NOMISO(ISO).EQ.TEXT12(:8)) GO TO 120
+ 110 CONTINUE
+ GO TO 250
+ 120 KPTEMP=IPISO(IBISO) ! set IBISO-th isotope
+ IF(.NOT.C_ASSOCIATED(KPTEMP)) THEN
+ WRITE(HSMG,'(17HSAPCA2: ISOTOPE '',A12,7H'' (ISO=,I8,3H) I,
+ 1 32HS NOT AVAILABLE IN THE MICROLIB.)') TEXT12,IBISO
+ CALL XABORT(HSMG)
+ ENDIF
+ IISOTS=0
+ DO 130 ISO=1,NISOTS
+ IISOTS=ISO
+ IF(ISOTS(ISO).EQ.TEXT12(:8)) GO TO 135
+ 130 CONTINUE
+ CALL XABORT('SAPCA2: UNABLE TO FIND ISOTOPE '//TEXT12//'.')
+ 135 CALL LCMLEN(KPTEMP,'DECAY',ILONG,ITYLCM)
+ IF(ILONG.EQ.1) THEN
+ CALL LCMGET(KPTEMP,'DECAY',DECAYC(IISOTS))
+ ELSE
+ DECAYC(IISOTS)=0.0
+ ENDIF
+ CONCES(IISOTS)=DEN(IBISO)
+ DENISO(IISO)=DEN(IBISO)
+ NISMAX=NISMAX+1
+ IIS=IIS+1
+ ISOMIL(IIS,IMIL)=IISO
+ DO 240 IREA=1,NREA
+ WORK2(:NG)=0.0
+ IF(NOMREA(IREA).EQ.'TOTALE') THEN
+ CALL LCMGET(KPTEMP,'NTOT0',WORK2)
+ ELSE IF(NOMREA(IREA).EQ.'TOTALE P1') THEN
+ CALL LCMGET(KPTEMP,'NTOT1',WORK2)
+ ELSE IF(NOMREA(IREA).EQ.'ABSORPTION') THEN
+ CALL LCMGET(KPTEMP,'NTOT0',WORK2)
+ CALL LCMLEN(KPTEMP,'SIGS00',ILONG,ITYLCM)
+ IF(ILONG.GT.0) THEN
+ CALL LCMGET(KPTEMP,'SIGS00',WORK1)
+ DO 140 IGR=1,NG
+ WORK2(IGR)=WORK2(IGR)-WORK1(IGR)
+ 140 CONTINUE
+ ENDIF
+ CALL LCMLEN(KPTEMP,'N2N',ILONG,ITYLCM)
+ IF(ILONG.GT.0) THEN
+ CALL LCMGET(KPTEMP,'N2N',WORK1)
+ DO 150 IGR=1,NG
+ WORK2(IGR)=WORK2(IGR)+WORK1(IGR)
+ 150 CONTINUE
+ ENDIF
+ CALL LCMLEN(KPTEMP,'N3N',ILONG,ITYLCM)
+ IF(ILONG.GT.0) THEN
+ CALL LCMGET(KPTEMP,'N3N',WORK1)
+ DO 151 IGR=1,NG
+ WORK2(IGR)=WORK2(IGR)+2.0*WORK1(IGR)
+ 151 CONTINUE
+ ENDIF
+ ELSE IF(NOMREA(IREA).EQ.'EXCESS') THEN
+ CALL LCMLEN(KPTEMP,'N2N',ILONG,ITYLCM)
+ IF(ILONG.GT.0) CALL LCMGET(KPTEMP,'N2N',WORK2)
+ CALL LCMLEN(KPTEMP,'N3N',ILONG,ITYLCM)
+ IF(ILONG.GT.0) THEN
+ CALL LCMGET(KPTEMP,'N3N',WORK1)
+ DO 152 IGR=1,NG
+ WORK2(IGR)=WORK2(IGR)+2.0*WORK1(IGR)
+ 152 CONTINUE
+ ENDIF
+ ELSE IF(NOMREA(IREA).EQ.'FISSION') THEN
+ CALL LCMLEN(KPTEMP,'NFTOT',ILONG,ITYLCM)
+ IF(ILONG.GT.0) CALL LCMGET(KPTEMP,'NFTOT',WORK2)
+ ELSE IF(NOMREA(IREA).EQ.'SPECTRE') THEN
+ CALL LCMLEN(KPTEMP,'CHI',ILONG,ITYLCM)
+ IF(ILONG.GT.0) CALL LCMGET(KPTEMP,'CHI',WORK2)
+ ELSE IF(NOMREA(IREA).EQ.'NU*FISSION') THEN
+ CALL LCMLEN(KPTEMP,'NUSIGF',ILONG,ITYLCM)
+ IF(ILONG.GT.0) CALL LCMGET(KPTEMP,'NUSIGF',WORK2)
+ ELSE IF(NOMREA(IREA).EQ.'ENERGIE') THEN
+ CALL LCMLEN(KPTEMP,'MEVF',ILONG,ITYLCM)
+ IF(ILONG.GT.0) THEN
+ CALL LCMGET(KPTEMP,'NFTOT',WORK2)
+ CALL LCMGET(KPTEMP,'MEVF',FLOTT)
+ DO 155 IGR=1,NG
+ WORK2(IGR)=WORK2(IGR)*FLOTT
+ 155 CONTINUE
+ ENDIF
+ CALL LCMLEN(KPTEMP,'MEVG',ILONG,ITYLCM)
+ IF(ILONG.GT.0) THEN
+ CALL LCMGET(KPTEMP,'NG',WORK1)
+ CALL LCMGET(KPTEMP,'MEVG',FLOTT)
+ DO 160 IGR=1,NG
+ WORK2(IGR)=WORK2(IGR)+WORK1(IGR)*FLOTT
+ 160 CONTINUE
+ ENDIF
+ ELSE IF(NOMREA(IREA).EQ.'ENERGIE F.') THEN
+ CALL LCMLEN(KPTEMP,'MEVF',ILONG,ITYLCM)
+ IF(ILONG.GT.0) THEN
+ CALL LCMGET(KPTEMP,'NFTOT',WORK2)
+ CALL LCMGET(KPTEMP,'MEVF',FLOTT)
+ DO 165 IGR=1,NG
+ WORK2(IGR)=WORK2(IGR)*FLOTT
+ 165 CONTINUE
+ ENDIF
+ ELSE IF(NOMREA(IREA).EQ.'ENERGIE G.') THEN
+ CALL LCMLEN(KPTEMP,'MEVG',ILONG,ITYLCM)
+ IF(ILONG.GT.0) THEN
+ CALL LCMGET(KPTEMP,'NG',WORK2)
+ CALL LCMGET(KPTEMP,'MEVG',FLOTT)
+ DO 170 IGR=1,NG
+ WORK2(IGR)=WORK2(IGR)*FLOTT
+ 170 CONTINUE
+ ENDIF
+ ELSE IF(NOMREA(IREA).EQ.'STRD') THEN
+ CALL LCMLEN(KPTEMP,'STRD',ILONG,ITYLCM)
+ IF(ILONG.GT.0) CALL LCMGET(KPTEMP,'STRD',WORK2)
+ ELSE IF(NOMREA(IREA).EQ.'SELF') THEN
+ IMPX=0
+ CALL XDRLGS(KPTEMP,-1,IMPX,0,0,1,NG,WORK2,DATA4,ITYPRO)
+ DO 175 IGR=1,NG
+ WORK2(IGR)=DATA4(IGR,IGR)
+ 175 CONTINUE
+ ELSE IF(NOMREA(IREA).EQ.'DIFFUSION') THEN
+ ADRX(IREA,IISO,NADRX+1)=IOR+1
+ ADRX(NREA+1,IISO,NADRX+1)=NL
+ IOR=IOR+NG*NL
+ IF(IOR.GT.MAXRDA) CALL XABORT('SAPCA2: RDATAX OVERFLOW(1).')
+ DO 181 IL=1,NL
+ WRITE (CM,'(I2.2)') IL-1
+ CALL LCMLEN(KPTEMP,'SIGS'//CM,ILONG,ITYLCM)
+ IF(ILONG.GT.0) THEN
+ CALL LCMGET(KPTEMP,'SIGS'//CM,WORK2)
+ ELSE
+ WORK2(:NG)=0.0
+ ENDIF
+ CALL LCMLEN(KPTEMP,'N2N',ILONG,ITYLCM)
+ IF((IL.EQ.1).AND.(ILONG.GT.0)) THEN
+ CALL LCMGET(KPTEMP,'N2N',WORK1)
+ DO 176 IGR=1,NG
+ WORK2(IGR)=WORK2(IGR)-WORK1(IGR)
+ 176 CONTINUE
+ ENDIF
+ CALL LCMLEN(KPTEMP,'N3N',ILONG,ITYLCM)
+ IF((IL.EQ.1).AND.(ILONG.GT.0)) THEN
+ CALL LCMGET(KPTEMP,'N3N',WORK1)
+ DO 177 IGR=1,NG
+ WORK2(IGR)=WORK2(IGR)-2.0*WORK1(IGR)
+ 177 CONTINUE
+ ENDIF
+ DO 180 IGR=1,NG
+ RDATAX(ADRX(IREA,IISO,NADRX+1)+(IL-1)*NG+IGR-1)=WORK2(IGR)
+ 180 CONTINUE
+ 181 CONTINUE
+ GO TO 240
+ ELSE IF(NOMREA(IREA).EQ.'TRANSP-CORR') THEN
+ IF((ITRANC.EQ.1).AND.(NL.GE.2)) THEN
+ CALL LCMGET(KPTEMP,'SIGS01',WORK2)
+ ELSE IF(ITRANC.EQ.2) THEN
+ CALL LCMGET(KPTEMP,'TRANC',WORK2)
+ ENDIF
+ ELSE IF(NOMREA(IREA).EQ.'PROFIL') THEN
+ DO 185 IGR=1,NG
+ IFDG2(IGR)=NG+1
+ IADR2(IGR+1)=0
+ 185 CONTINUE
+ DO 190 IL=1,NL
+ WRITE (CM,'(I2.2)') IL-1
+ CALL LCMLEN(KPTEMP,'IJJS'//CM,ILONG,ITYLCM)
+ IF(ILONG.EQ.0) GO TO 190
+ CALL LCMGET(KPTEMP,'IJJS'//CM,IJJ2)
+ CALL LCMGET(KPTEMP,'NJJS'//CM,NJJ2)
+ DO 186 IGR=1,NG
+ IFDG2(IGR)=MIN(IFDG2(IGR),IJJ2(IGR)-NJJ2(IGR)+1)
+ IADR2(IGR+1)=MAX(IADR2(IGR+1),IJJ2(IGR))
+ 186 CONTINUE
+ 190 CONTINUE
+ IADR2(1)=1
+ DO 195 IGR=1,NG
+ IADR2(IGR+1)=IADR2(IGR)+(IADR2(IGR+1)-IFDG2(IGR)+1)
+ 195 CONTINUE
+ ADRX(IREA,IISO,NADRX+1)=IOI+1
+ ADRX(NREA+2,IISO,NADRX+1)=NL
+ IOI=IOI+2*NG+7
+ IF(IOI.GT.MAXIDA) CALL XABORT('SAPCA2: IDATAP OVERFLOW(1).')
+ IDATAP(ADRX(IREA,IISO,NADRX+1))=0
+ IDATAP(ADRX(IREA,IISO,NADRX+1)+1)=0
+ IDATAP(ADRX(IREA,IISO,NADRX+1)+2)=0
+ IDATAP(ADRX(IREA,IISO,NADRX+1)+3)=0
+ IDATAP(ADRX(IREA,IISO,NADRX+1)+4)=1
+ IDATAP(ADRX(IREA,IISO,NADRX+1)+5)=NG
+ DO 200 IGR=1,NG
+ IDATAP(ADRX(IREA,IISO,NADRX+1)+5+IGR)=IFDG2(IGR)
+ IDATAP(ADRX(IREA,IISO,NADRX+1)+5+NG+IGR)=IADR2(IGR)
+ 200 CONTINUE
+ IDATAP(ADRX(IREA,IISO,NADRX+1)+6+2*NG)=IADR2(NG+1)
+ GO TO 240
+ ELSE IF(NOMREA(IREA).EQ.'TRANSFERT') THEN
+ IF(IOI.EQ.0) CALL XABORT('SAPCA2: MUST FIRST DEFINE PROF.')
+ ADRX(IREA,IISO,NADRX+1)=IOR+1
+ IOR=IOR+(IADR2(NG+1)-1)*NL
+ IF(IOR.GT.MAXRDA) CALL XABORT('SAPCA2: RDATAX OVERFLOW(2).')
+ JOFS=0
+ DO 212 IL=1,NL
+ IMPX=0
+ CALL XDRLGS(KPTEMP,-1,IMPX,IL-1,IL-1,1,NG,WORK2,DATA4,
+ 1 ITYPRO)
+ ZIL=REAL(2*IL-1)
+ DO 211 IGR=1,NG
+ DO 210 JGR=IFDG2(IGR),IFDG2(IGR)+(IADR2(IGR+1)-IADR2(IGR))-1
+ JOFS=JOFS+1
+ RDATAX(ADRX(IREA,IISO,NADRX+1)+JOFS-1)=DATA4(IGR,JGR)*ZIL
+ 210 CONTINUE
+ 211 CONTINUE
+ 212 CONTINUE
+ GO TO 240
+ ELSE
+ CALL LCMLEN(KPTEMP,NOMREA(IREA),ILONG,ITYLCM)
+ IF(ILONG.GT.0) CALL LCMGET(KPTEMP,NOMREA(IREA),WORK2)
+ ENDIF
+*
+ EXIST=.FALSE.
+ DO 220 IGR=1,NG
+ EXIST=EXIST.OR.(WORK2(IGR).NE.0.0)
+ 220 CONTINUE
+ IF(EXIST) THEN
+ ADRX(IREA,IISO,NADRX+1)=IOR+1
+ IOR=IOR+NG
+ IF(IOR.GT.MAXRDA) CALL XABORT('SAPCA2: RDATAX OVERFLOW(3).')
+ DO 230 IGR=1,NG
+ RDATAX(ADRX(IREA,IISO,NADRX+1)+IGR-1)=WORK2(IGR)
+ 230 CONTINUE
+ ELSE
+ ADRX(IREA,IISO,NADRX+1)=0
+ ENDIF
+ 240 CONTINUE
+ ENDIF
+ 250 CONTINUE
+*----
+* STORE MACROSCOPIC CROSS SECTIONS IN RDATAX.
+*----
+ DO 260 IMAC=1,NMAC
+ ADRX(NREA+1,NISO+IMAC,NADRX+1)=0
+ ADRX(NREA+2,NISO+IMAC,NADRX+1)=0
+ 260 CONTINUE
+ DO 340 IREA=1,NREA
+ IF(NOMREA(IREA).EQ.'DIFFUSION') THEN
+ DO 272 IMAC=1,NMAC
+ ADRX(IREA,NISO+IMAC,NADRX+1)=IOR+1
+ ADRX(NREA+1,NISO+IMAC,NADRX+1)=NL
+ IOR=IOR+NG*NL
+ IF(IOR.GT.MAXRDA) CALL XABORT('SAPCA2: RDATAX OVERFLOW(4).')
+ JOFS=0
+ DO 271 IL=1,NL
+ DO 270 IGR=1,NG
+ JOFS=JOFS+1
+ RDATAX(ADRX(IREA,NISO+IMAC,NADRX+1)+JOFS-1)=DATA2(IGR,IL)
+ 270 CONTINUE
+ 271 CONTINUE
+ 272 CONTINUE
+ ELSE IF(NOMREA(IREA).EQ.'PROFIL') THEN
+ DO 290 IMAC=1,NMAC
+ ADRX(IREA,NISO+IMAC,NADRX+1)=IOI+1
+ ADRX(NREA+2,NISO+IMAC,NADRX+1)=NL
+ IOI=IOI+2*NG+7
+ IF(IOI.GT.MAXIDA) CALL XABORT('SAPCA2: IDATAP OVERFLOW(2).')
+ IDATAP(ADRX(IREA,NISO+IMAC,NADRX+1))=0
+ IDATAP(ADRX(IREA,NISO+IMAC,NADRX+1)+1)=0
+ IDATAP(ADRX(IREA,NISO+IMAC,NADRX+1)+2)=0
+ IDATAP(ADRX(IREA,NISO+IMAC,NADRX+1)+3)=0
+ IDATAP(ADRX(IREA,NISO+IMAC,NADRX+1)+4)=1
+ IDATAP(ADRX(IREA,NISO+IMAC,NADRX+1)+5)=NG
+ DO 280 IGR=1,NG
+ IDATAP(ADRX(IREA,NISO+IMAC,NADRX+1)+5+IGR)=IFDG(IGR)
+ IDATAP(ADRX(IREA,NISO+IMAC,NADRX+1)+5+NG+IGR)=IADR(IGR)
+ 280 CONTINUE
+ IDATAP(ADRX(IREA,NISO+IMAC,NADRX+1)+6+2*NG)=IADR(NG+1)
+ 290 CONTINUE
+ ELSE IF(NOMREA(IREA).EQ.'TRANSFERT') THEN
+ IF(IOI.EQ.0) CALL XABORT('SAPCA2: MUST FIRST DEFINE PROF.')
+ DO 303 IMAC=1,NMAC
+ ADRX(IREA,NISO+IMAC,NADRX+1)=IOR+1
+ IOR=IOR+(IADR(NG+1)-1)*NL
+ IF(IOR.GT.MAXRDA) CALL XABORT('SAPCA2: RDATAX OVERFLOW(5).')
+ JOFS=0
+ DO 302 IL=1,NL
+ DO 301 IGR=1,NG
+ DO 300 JGR=IFDG(IGR),IFDG(IGR)+(IADR(IGR+1)-IADR(IGR))-1
+ JOFS=JOFS+1
+ RDATAX(ADRX(IREA,NISO+IMAC,NADRX+1)+JOFS-1)=DATA3(JGR,IGR,IL)
+ 300 CONTINUE
+ 301 CONTINUE
+ 302 CONTINUE
+ 303 CONTINUE
+ ELSE
+ EXIST=.FALSE.
+ DO 310 IGR=1,NG
+ EXIST=EXIST.OR.(DATA1(IGR,IREA).NE.0.0)
+ 310 CONTINUE
+ DO 330 IMAC=1,NMAC
+ IF(EXIST) THEN
+ ADRX(IREA,NISO+IMAC,NADRX+1)=IOR+1
+ IOR=IOR+NG
+ IF(IOR.GT.MAXRDA) CALL XABORT('SAPCA2: RDATAX OVERFLOW(6).')
+ DO 320 IGR=1,NG
+ RDATAX(ADRX(IREA,NISO+IMAC,NADRX+1)+IGR-1)=DATA1(IGR,IREA)
+ 320 CONTINUE
+ ELSE
+ ADRX(IREA,NISO+IMAC,NADRX+1)=0
+ ENDIF
+ 330 CONTINUE
+ ENDIF
+ 340 CONTINUE
+ DO 350 IMAC=1,NMAC
+ IIS=IIS+1
+ ISOMIL(IIS,IMIL)=NISO+IMAC
+ 350 CONTINUE
+*----
+* REMOVE PARTICULARIZED ISOTOPIC CONTRIBUTIONS FROM MACROS.
+*----
+ IF(RESMAC(IMIL).GT.0) THEN
+ DO 410 IREA=1,NREA
+ IMACR=ADRX(IREA,NISO+RESMAC(IMIL),NADRX+1)
+ IF(IMACR.EQ.0) GO TO 410
+ IGRTOT=NG
+ IF(NOMREA(IREA).EQ.'DIFFUSION') IGRTOT=NG*NL
+ IF(NOMREA(IREA).EQ.'SPECTRE') GO TO 410
+ IF(NOMREA(IREA).EQ.'PROFIL') GO TO 410
+ DO 400 IISO=1,NISO
+ IF(DENISO(IISO).EQ.0.0) GO TO 400
+ JMACR=ADRX(IREA,IISO,NADRX+1)
+ IF(JMACR.EQ.0) GO TO 400
+ IF(NOMREA(IREA).EQ.'TRANSFERT') THEN
+ DO 370 IGR=1,NG
+ IFDG2(IGR)=IDATAP(ADRX(IREA-1,IISO,NADRX+1)+5+IGR)
+ IADR2(IGR)=IDATAP(ADRX(IREA-1,IISO,NADRX+1)+5+NG+IGR)
+ 370 CONTINUE
+ IADR2(NG+1)=IDATAP(ADRX(IREA-1,IISO,NADRX+1)+6+2*NG)
+ JOFS=0
+ DO 382 IL=1,NL
+ DO 381 IGR=1,NG
+ DO 380 JGR=IFDG2(IGR),IFDG2(IGR)+(IADR2(IGR+1)-IADR2(IGR))-1
+ I=(IL-1)*(IADR(NG+1)-1)+IADR(IGR)+JGR-IFDG(IGR)
+ JOFS=JOFS+1
+ RDATAX(IMACR+I-1)=RDATAX(IMACR+I-1)-DENISO(IISO)*
+ 1 RDATAX(JMACR+JOFS-1)
+ 380 CONTINUE
+ 381 CONTINUE
+ 382 CONTINUE
+ ELSE
+ DO 390 IGR=1,IGRTOT
+ RDATAX(IMACR+IGR-1)=RDATAX(IMACR+IGR-1)-DENISO(IISO)*
+ 1 RDATAX(JMACR+IGR-1)
+ 390 CONTINUE
+ ENDIF
+ 400 CONTINUE
+ 410 CONTINUE
+ ENDIF
+*
+ LENGDX(IMIL)=IOR
+ LENGDP(IMIL)=IOI
+ DO 430 IADRX=1,NADRX
+ DO 425 I=1,NREA+2
+ DO 420 J=1,NISO+NMAC
+ IF(ADRX(I,J,NADRX+1).NE.ADRX(I,J,IADRX)) GO TO 430
+ 420 CONTINUE
+ 425 CONTINUE
+ ISADRX(IMIL)=IADRX
+ GO TO 440
+ 430 CONTINUE
+ NADRX=NADRX+1
+ ISADRX(IMIL)=NADRX
+*----
+* STORE INFORMATION IN THE MIXTURE DIRECTORY.
+*----
+ 440 WRITE(DIRNAM,'(''mili'',I8)') IMIL
+ CALL LCMSIX(IPSAP,DIRNAM,1)
+ CALL LCMPUT(IPSAP,'FLUXS',NG,2,FLUX)
+ IF(LENGDX(IMIL).GT.0) THEN
+ CALL LCMPUT(IPSAP,'RDATAX',LENGDX(IMIL),2,RDATAX)
+ ENDIF
+ IF(LENGDP(IMIL).GT.0) THEN
+ CALL LCMPUT(IPSAP,'IDATAP',LENGDP(IMIL),1,IDATAP)
+ ENDIF
+ IF(NISOTS.GT.0) THEN
+ CALL LCMPUT(IPSAP,'CONCES',NISOTS,2,CONCES)
+ DO 445 ISO=1,NISOTS
+ DECAYC(ISO)=DECAYC(ISO)*1.0E-8
+ 445 CONTINUE
+ CALL LCMPUT(IPSAP,'DECAYC',NISOTS,2,DECAYC)
+ ENDIF
+ CALL LCMSIX(IPSAP,' ',2)
+*
+ NISOMN(IMIL)=MAX(NISOMN(IMIL),NISMAX)
+ IF(NPRC.GT.0) THEN
+ EXIST=.FALSE.
+ DO 455 IPRC=1,NPRC
+ DO 450 IGR=1,NG
+ EXIST=EXIST.OR.(DNUSIG(IGR,IPRC).NE.0.0)
+ 450 CONTINUE
+ 455 CONTINUE
+ IF(EXIST) THEN
+ NMILNR=NMILNR+1
+ IF(LCRON) THEN
+ IF(NMIL.NE.1) CALL XABORT('SAPCA2: NMIL=1 MANDATORY WITH'
+ 1 //' CRONOS OPTION.')
+ CALL LCMSIX(IPSAP,'divers',1)
+ ELSE
+ CALL LCMSIX(IPSAP,DIRNAM,1)
+ CALL LCMSIX(IPSAP,'cinetique',1)
+ ENDIF
+ CALL LCMPUT(IPSAP,'NPR',1,1,NPRC)
+ CALL LCMPUT(IPSAP,'CHIRS',NG*NPRC,2,DCHI)
+ CALL LCMPUT(IPSAP,'INVELS',NG,2,OVERV)
+ CALL LCMSIX(IPTEMP,'MACROLIB',1)
+ CALL LCMGET(IPTEMP,'LAMBDA-D',WORKD)
+ CALL LCMSIX(IPTEMP,' ',2)
+ CALL LCMPUT(IPSAP,'LAMBRS',NPRC,2,WORKD)
+ TGENRS=0.0
+ DENOM=0.0
+ DO 460 IGR=1,NG
+ TGENRS=TGENRS+OVERV(IGR)*FLUX(IGR)
+ DENOM=DENOM+DNUSIG(IGR,NPRC+1)*FLUX(IGR)
+ 460 CONTINUE
+ TGENRS=TGENRS/DENOM
+ DO 480 IPRC=1,NPRC
+ WORKD(IPRC)=0.0
+ DO 470 IGR=1,NG
+ WORKD(IPRC)=WORKD(IPRC)+DNUSIG(IGR,IPRC)*FLUX(IGR)
+ 470 CONTINUE
+ WORKD(IPRC)=WORKD(IPRC)/DENOM
+ 480 CONTINUE
+ CALL LCMPUT(IPSAP,'BETARS',NPRC,2,WORKD)
+ CALL LCMPUT(IPSAP,'TGENRS',1,2,TGENRS)
+ IF(LCRON) THEN
+ CALL LCMSIX(IPSAP,' ',2)
+ ELSE
+ CALL LCMSIX(IPSAP,' ',2)
+ CALL LCMSIX(IPSAP,' ',2)
+ ENDIF
+ ENDIF
+ ENDIF
+ 500 CONTINUE
+ DO IGR=1,NG
+ REGFLX(IGR)=REGFLX(IGR)/VOLTOT
+ ENDDO
+ DEALLOCATE(IPISO)
+ CALL LCMCL(IPTEMP,2)
+*----
+* STORE INFORMATION IN THE ELEMENTARY CALCULATION DIRECTORIES.
+*----
+ NISFS=0
+ NISPS=0
+ DO 530 ISO=1,NISO
+ DO 510 IBISO=1,NBISO
+ WRITE(TEXT8,'(2A4)') (ISONAM(I0,IBISO),I0=1,2)
+ IF(NOMISO(ISO).EQ.TEXT8) THEN
+ ITY=ITYPE(IBISO)
+ GO TO 520
+ ENDIF
+ 510 CONTINUE
+ GO TO 530
+ 520 IF(ITY.EQ.2) THEN
+ NISFS=NISFS+1
+ ELSE IF(ITY.EQ.3) THEN
+ NISPS=NISPS+1
+ ENDIF
+ 530 CONTINUE
+ IF(NISPS.EQ.0) THEN
+ NISYS=0
+ ELSE
+ NISYS=NISO+NMAC
+ ENDIF
+ CALL LCMSIX(IPSAP,'info',1)
+ CALL LCMPUT(IPSAP,'NISOTS',1,1,NISOTS)
+ CALL LCMPUT(IPSAP,'NISF',1,1,NISFS)
+ CALL LCMPUT(IPSAP,'NISP',1,1,NISPS)
+ CALL LCMPUT(IPSAP,'NISY',1,1,NISYS)
+ IF(NISOTS.GT.0) CALL LCMPTC(IPSAP,'ISOTS',8,NISOTS,ISOTS)
+ CALL LCMPUT(IPSAP,'ISADRX',NMIL,1,ISADRX)
+ CALL LCMPUT(IPSAP,'LENGDX',NMIL,1,LENGDX)
+ CALL LCMPUT(IPSAP,'LENGDP',NMIL,1,LENGDP)
+ CALL LCMSIX(IPSAP,' ',2)
+*
+ IF(NVDIV.GT.0) THEN
+ CALL LCMSIX(IPSAP,'divers',1)
+ CALL LCMPUT(IPSAP,'NVDIV',1,1,NVDIV)
+ CALL LCMPTC(IPSAP,'IDVAL',4,NVDIV,IDVAL)
+ CALL LCMPUT(IPSAP,'VALDIV',NVDIV,2,VALDIV)
+ CALL LCMSIX(IPSAP,' ',2)
+ ENDIF
+*----
+* MOVE TO THE SAPHYB ROOT DIRECTORY.
+*----
+ CALL LCMSIX(IPSAP,' ',2)
+*----
+* STORE INFORMATION IN THE 'adresses' DIRECTORY.
+*----
+ CALL LCMSIX(IPSAP,'adresses',1)
+ CALL LCMPUT(IPSAP,'ADRX',(NREA+2)*(NISO+NMAC)*NADRX,1,ADRX)
+ CALL LCMPUT(IPSAP,'ISOMIL',(NISO+NMAC)*NMIL,1,ISOMIL)
+ CALL LCMPUT(IPSAP,'NISOMN',NMIL,1,NISOMN)
+ CALL LCMPUT(IPSAP,'ISADRC',NMIL,1,ISADRX)
+ CALL LCMSIX(IPSAP,' ',2)
+*----
+* SCRATCH STORAGE DEALLOCATION
+*----
+ DEALLOCATE(DECAYC,CONCES,DENISO,DEN,DATA4,DATA3,DATA2,DATA1,VOL,
+ 1 WORK2,WORK1,WORKD,DCHI,DNUSIG,OVERV,FLUX,RDATAX)
+ DEALLOCATE(ITYPE,MIX,ISONAM,NJJ2,IJJ2,IPOS,NJJ1,IJJ1,IADR2,IFDG2,
+ 1 IADR,IFDG,IDATAP,LENGDP,LENGDX,ISADRX,NISOMN,ISOMIL,ADRX,RESMAC)
+ RETURN
+ END