summaryrefslogtreecommitdiff
path: root/Dragon/src/LIBADD.f
diff options
context:
space:
mode:
Diffstat (limited to 'Dragon/src/LIBADD.f')
-rw-r--r--Dragon/src/LIBADD.f87
1 files changed, 72 insertions, 15 deletions
diff --git a/Dragon/src/LIBADD.f b/Dragon/src/LIBADD.f
index b7262c5..ba6829b 100644
--- a/Dragon/src/LIBADD.f
+++ b/Dragon/src/LIBADD.f
@@ -1,12 +1,12 @@
*DECK LIBADD
- SUBROUTINE LIBADD (IPLIB,NBISO,MASKI,IMPX,NGRO,NL,ITRANC,ISONAM,
- 1 IPISO,NIR,GIR)
+ SUBROUTINE LIBADD (IPLIB,NBISO,MASKI,IMPX,NGRO,NL,ITRANC,NDEPL,
+ 1 ISONAM,ISONRF,IPISO,NIR,GIR)
*
*-----------------------------------------------------------------------
*
*Purpose:
-* Add transport correction and Goldstein-Cohen data to a /microlib/
-* directory.
+* Add transport correction, Goldstein-Cohen and H-FACTOR data to a
+* /microlib/ directory.
*
*Copyright:
* Copyright (C) 2002 Ecole Polytechnique de Montreal
@@ -30,7 +30,9 @@
* ITRANC transport correction option (=0: no correction; =1: Apollo-
* type; =2: recover TRANC record; =3: Wims-type; =4: leakage
* correction alone).
+* NDEPL number of depleting isotopes.
* ISONAM alias name of each isotope.
+* ISONRF library reference name of each isotope.
* IPISO pointer array towards microlib isotopes.
* NIR group index with an imposed IR slowing-down model (=0 for no
* IR model).
@@ -44,20 +46,24 @@
* SUBROUTINE ARGUMENTS
*----
TYPE(C_PTR) IPLIB,IPISO(NBISO)
- INTEGER NBISO,IMPX,NGRO,NL,ITRANC,ISONAM(3,NBISO),NIR(NBISO)
+ INTEGER NBISO,IMPX,NGRO,NL,ITRANC,NDEPL,ISONAM(3,NBISO),
+ 1 ISONRF(3,NBISO),NIR(NBISO)
LOGICAL MASKI(NBISO)
REAL GIR(NBISO)
*----
* LOCAL VARIABLES
*----
- PARAMETER (IOUT=6)
+ PARAMETER (IOUT=6,NSTATE=40)
+ INTEGER ISTATE(NSTATE)
TYPE(C_PTR) JPLIB,KPLIB
- CHARACTER TEXT12*12,HSMG*131
+ CHARACTER HSONAM*12,HSONRF*12,HSMG*131
*----
* ALLOCATABLE ARRAYS
*----
REAL, ALLOCATABLE, DIMENSION(:) :: WORK,WR2,DELTA
- REAL, ALLOCATABLE, DIMENSION(:,:) :: SCAT
+ REAL, ALLOCATABLE, DIMENSION(:,:) :: SCAT,RER
+ CHARACTER(LEN=8), ALLOCATABLE, DIMENSION(:) :: HREAC
+ CHARACTER(LEN=12), ALLOCATABLE, DIMENSION(:) :: HGAR
*----
* SCRATCH STORAGE ALLOCATION
*----
@@ -75,10 +81,32 @@
DO 15 IGR=1,NGRO
DELTA(IGR)=LOG(DELTA(IGR)/DELTA(IGR+1))
15 CONTINUE
+*----
+* RECOVER DEPLETION DATA.
+*----
+ NREAC=0
+ IF(NDEPL.NE.0) THEN
+ CALL LCMLEN(IPLIB,'DEPL-CHAIN',LENGTH,ITYLCM)
+ IF(LENGTH.EQ.0) THEN
+ CALL LCMLIB(IPLIB)
+ CALL XABORT('LIBADD: MISSING DEPL-CHAIN DATA.')
+ ENDIF
+ CALL LCMSIX(IPLIB,'DEPL-CHAIN',1)
+ CALL LCMGET(IPLIB,'STATE-VECTOR',ISTATE)
+ IF(ISTATE(1).NE.NDEPL) CALL XABORT('LIBADD: INVALID NUMBER OF '
+ 1 //'DEPLETING ISOTOPES.')
+ NREAC=ISTATE(8)
+ ALLOCATE(HGAR(NDEPL),RER(NREAC,NDEPL),HREAC(NREAC))
+ CALL LCMGTC(IPLIB,'ISOTOPESDEPL',12,NDEPL,HGAR)
+ CALL LCMGET(IPLIB,'DEPLETE-ENER',RER)
+ CALL LCMGTC(IPLIB,'DEPLETE-IDEN',8,NREAC,HREAC)
+ CALL LCMSIX(IPLIB,' ',2)
+ ENDIF
*
DO 110 ISO=1,NBISO
IF(MASKI(ISO)) THEN
- WRITE(TEXT12,'(3A4)') ISONAM(1,ISO),ISONAM(2,ISO),ISONAM(3,ISO)
+ WRITE(HSONAM,'(3A4)') (ISONAM(I,ISO),I=1,3)
+ WRITE(HSONRF,'(3A4)') (ISONRF(I,ISO),I=1,3)
KPLIB=IPISO(ISO) ! set ISO-th isotope
IF(.NOT.C_ASSOCIATED(KPLIB)) GO TO 110
CALL LCMLEN(KPLIB,'NTOT0',ILENG,ITYLCM)
@@ -86,7 +114,7 @@
JPLIB=LCMGID(IPLIB,'ISOTOPESLIST')
CALL LCMLIB(JPLIB)
WRITE(HSMG,'(17H LIBADD: ISOTOPE ,A12,6H (ISO=,I6,
- 1 17H) IS NOT DEFINED.)') TEXT12,ISO
+ 1 17H) IS NOT DEFINED.)') HSONAM,ISO
CALL XABORT(HSMG)
ENDIF
*
@@ -101,13 +129,13 @@
CALL LCMPUT(KPLIB,'NGOLD',NGRO,2,WORK)
IF(IMPX.GT.1) THEN
IF(GIR(ISO).EQ.-998.0) THEN
- WRITE(IOUT,210) TEXT12,'PT',NIR(ISO)
+ WRITE(IOUT,210) HSONAM,'PT',NIR(ISO)
ELSE IF(GIR(ISO).EQ.-999.0) THEN
- WRITE(IOUT,210) TEXT12,'PTSL',NIR(ISO)
+ WRITE(IOUT,210) HSONAM,'PTSL',NIR(ISO)
ELSE IF(GIR(ISO).EQ.-1000.0) THEN
- WRITE(IOUT,210) TEXT12,'PTMC',NIR(ISO)
+ WRITE(IOUT,210) HSONAM,'PTMC',NIR(ISO)
ELSE
- WRITE(IOUT,200) TEXT12,GIR(ISO),NIR(ISO)
+ WRITE(IOUT,200) HSONAM,GIR(ISO),NIR(ISO)
ENDIF
ENDIF
ENDIF
@@ -135,7 +163,7 @@
CALL LCMLEN(KPLIB,'SCAT-SAVED',ILENG,ITYLCM)
IF(ILENG.EQ.0) THEN
WRITE(HSMG,'(37H LIBADD: NO SCAT-SAVED RECORD FOR ISO,
- 1 5HTOPE ,A12,1H.)') TEXT12
+ 1 5HTOPE ,A12,1H.)') HSONAM
CALL XABORT(HSMG)
ENDIF
CALL XDRLGS(KPLIB,-1,0,1,1,1,NGRO,WR2,SCAT,ITY)
@@ -165,11 +193,40 @@
* CORRECTIONS.
CALL LCMPUT(KPLIB,'TRANC',NGRO,2,WORK)
ENDIF
+*
+* ADD OR CORRECT H-FACTOR INFORMATION IN THE MICROLIB.
+ IF(NDEPL.NE.0) THEN
+ JDEPL=0
+ DO IDEPL=1,NDEPL
+ JDEPL=IDEPL
+ IF(HSONRF.EQ.HGAR(IDEPL)) GO TO 80
+ ENDDO
+ CYCLE
+ 80 WORK(:NGRO)=0.0
+ CALL LCMLEN(KPLIB,'H-FACTOR',LENGTH,ITYLCM)
+ IF(LENGTH.NE.0) CALL LCMGET(KPLIB,'H-FACTOR',WORK)
+ DO IREA=2,NREAC
+ CALL LCMLEN(KPLIB,HREAC(IREA),LENGTH,ITYLCM)
+ IF(LENGTH.EQ.0) CYCLE
+ IF(LENGTH.GT.NGRO) CALL XABORT('LIBADD: WR2 OVERFLOW.')
+ WR2(:NGRO)=0.0
+ CALL LCMGET(KPLIB,HREAC(IREA),WR2)
+ DO IG=1,LENGTH
+ WORK(IG)=WORK(IG)+RER(IREA,JDEPL)*WR2(IG)*1.0E6
+ ENDDO
+ ENDDO ! IREA
+ CALL LCMPUT(KPLIB,'H-FACTOR',NGRO,2,WORK)
+ IF(IMPX.GT.1) THEN
+ WRITE(IOUT,'(42H LIBADD: ADD H-FACTOR INFORMATION TO ISOTO,
+ 1 3HPE ,A,1H.)') TRIM(HSONRF)
+ ENDIF
+ ENDIF
ENDIF
110 CONTINUE
*----
* SCRATCH STORAGE DEALLOCATION
*----
+ IF(NDEPL.NE.0) DEALLOCATE(HREAC,RER,HGAR)
DEALLOCATE(DELTA,SCAT,WR2,WORK)
RETURN
*