summaryrefslogtreecommitdiff
path: root/Dragon/src/LIBADD.f
diff options
context:
space:
mode:
authorstainer_t <thomas.stainer@oecd-nea.org>2025-09-08 13:48:49 +0200
committerstainer_t <thomas.stainer@oecd-nea.org>2025-09-08 13:48:49 +0200
commit7dfcc480ba1e19bd3232349fc733caef94034292 (patch)
tree03ee104eb8846d5cc1a981d267687a729185d3f3 /Dragon/src/LIBADD.f
Initial commit from Polytechnique Montreal
Diffstat (limited to 'Dragon/src/LIBADD.f')
-rw-r--r--Dragon/src/LIBADD.f181
1 files changed, 181 insertions, 0 deletions
diff --git a/Dragon/src/LIBADD.f b/Dragon/src/LIBADD.f
new file mode 100644
index 0000000..b7262c5
--- /dev/null
+++ b/Dragon/src/LIBADD.f
@@ -0,0 +1,181 @@
+*DECK LIBADD
+ SUBROUTINE LIBADD (IPLIB,NBISO,MASKI,IMPX,NGRO,NL,ITRANC,ISONAM,
+ 1 IPISO,NIR,GIR)
+*
+*-----------------------------------------------------------------------
+*
+*Purpose:
+* Add transport correction and Goldstein-Cohen data to a /microlib/
+* directory.
+*
+*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
+* IPLIB pointer to the lattice microscopic cross section library
+* (L_LIBRARY signature).
+* NBISO number of isotopes present in the calculation domain.
+* MASKI isotopic mask. Isotope with index I is processed if
+* MASKI(I)=.true.
+* IMPX print flag.
+* NGRO number of energy groups.
+* NL number of Legendre orders required in the calculation
+* NL=1 (for isotropic scattering) or higher.
+* ITRANC transport correction option (=0: no correction; =1: Apollo-
+* type; =2: recover TRANC record; =3: Wims-type; =4: leakage
+* correction alone).
+* ISONAM alias 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).
+* GIR value of the imposed Goldstein-Cohen parameter for groups
+* with an IR model.
+*
+*-----------------------------------------------------------------------
+*
+ USE GANLIB
+*----
+* SUBROUTINE ARGUMENTS
+*----
+ TYPE(C_PTR) IPLIB,IPISO(NBISO)
+ INTEGER NBISO,IMPX,NGRO,NL,ITRANC,ISONAM(3,NBISO),NIR(NBISO)
+ LOGICAL MASKI(NBISO)
+ REAL GIR(NBISO)
+*----
+* LOCAL VARIABLES
+*----
+ PARAMETER (IOUT=6)
+ TYPE(C_PTR) JPLIB,KPLIB
+ CHARACTER TEXT12*12,HSMG*131
+*----
+* ALLOCATABLE ARRAYS
+*----
+ REAL, ALLOCATABLE, DIMENSION(:) :: WORK,WR2,DELTA
+ REAL, ALLOCATABLE, DIMENSION(:,:) :: SCAT
+*----
+* SCRATCH STORAGE ALLOCATION
+*----
+ ALLOCATE(WORK(NGRO),WR2(NGRO),SCAT(NGRO,NGRO),DELTA(NGRO+1))
+*----
+* RECOVER THE ENERGY GRID.
+*----
+ CALL LCMLEN(IPLIB,'ENERGY',LENGT,ITYLCM)
+ IF(LENGT.EQ.0) CALL XABORT('LIBADD: NO GROUP STRUCTURE AVAILABLE')
+ CALL LCMGET(IPLIB,'ENERGY',DELTA)
+ NGX=0
+ DO 10 IGR=1,NGRO
+ IF((NGX.EQ.0).AND.(DELTA(IGR+1).LT.4.0)) NGX=IGR-1
+ 10 CONTINUE
+ DO 15 IGR=1,NGRO
+ DELTA(IGR)=LOG(DELTA(IGR)/DELTA(IGR+1))
+ 15 CONTINUE
+*
+ DO 110 ISO=1,NBISO
+ IF(MASKI(ISO)) THEN
+ WRITE(TEXT12,'(3A4)') ISONAM(1,ISO),ISONAM(2,ISO),ISONAM(3,ISO)
+ KPLIB=IPISO(ISO) ! set ISO-th isotope
+ IF(.NOT.C_ASSOCIATED(KPLIB)) GO TO 110
+ CALL LCMLEN(KPLIB,'NTOT0',ILENG,ITYLCM)
+ IF(ILENG.EQ.0) THEN
+ JPLIB=LCMGID(IPLIB,'ISOTOPESLIST')
+ CALL LCMLIB(JPLIB)
+ WRITE(HSMG,'(17H LIBADD: ISOTOPE ,A12,6H (ISO=,I6,
+ 1 17H) IS NOT DEFINED.)') TEXT12,ISO
+ CALL XABORT(HSMG)
+ ENDIF
+*
+* REDIFINE THE GOLDSTEIN-COHEN PARAMETERS.
+ IF(NIR(ISO).GT.0) THEN
+ DO 20 IGR=1,MIN(NGRO,NIR(ISO)-1)
+ WORK(IGR)=1.0
+ 20 CONTINUE
+ DO 30 IGR=NIR(ISO),NGRO
+ WORK(IGR)=GIR(ISO)
+ 30 CONTINUE
+ 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)
+ ELSE IF(GIR(ISO).EQ.-999.0) THEN
+ WRITE(IOUT,210) TEXT12,'PTSL',NIR(ISO)
+ ELSE IF(GIR(ISO).EQ.-1000.0) THEN
+ WRITE(IOUT,210) TEXT12,'PTMC',NIR(ISO)
+ ELSE
+ WRITE(IOUT,200) TEXT12,GIR(ISO),NIR(ISO)
+ ENDIF
+ ENDIF
+ ENDIF
+*
+* COMPUTE OR RECOVER THE TRANSPORT CORRECTION.
+ IF(ITRANC.EQ.2) THEN
+* RECOVER THE TRANSPORT CORRECTION FROM THE LIBRARY.
+ CALL LCMLEN(KPLIB,'TRANC',ILENG,ITYLCM)
+ IF(ILENG.EQ.0) THEN
+ WORK(:NGRO)=0.0
+ CALL LCMPUT(KPLIB,'TRANC',NGRO,2,WORK)
+ ENDIF
+ ELSE IF(ITRANC.NE.0) THEN
+ WORK(:NGRO)=0.0
+ CALL LCMLEN(KPLIB,'NTOT1',ILENG,ITYLCM)
+ IF(ILENG.NE.0) THEN
+* LEAKAGE CORRECTION.
+ CALL LCMGET(KPLIB,'NTOT1',WORK)
+ CALL LCMGET(KPLIB,'NTOT0',WR2)
+ DO 40 IG1=1,NGRO
+ WORK(IG1)=WR2(IG1)-WORK(IG1)
+ 40 CONTINUE
+ ENDIF
+ IF((NL.GE.2).AND.(ITRANC.NE.4)) THEN
+ 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
+ CALL XABORT(HSMG)
+ ENDIF
+ CALL XDRLGS(KPLIB,-1,0,1,1,1,NGRO,WR2,SCAT,ITY)
+ IF(ITRANC.EQ.1) THEN
+* APOLLO-TYPE TRANSPORT CORRECTION. USE THE MICRO-
+* REVERSIBILITY PRINCIPLE AT ALL ENERGIES.
+ DO 50 IG1=1,NGRO
+ WORK(IG1)=WORK(IG1)+WR2(IG1)
+ 50 CONTINUE
+ ELSE IF(ITRANC.EQ.3) THEN
+* WIMS-TYPE TRANSPORT CORRECTION. USE THE MICRO-
+* REVERSIBILITY PRINCIPLE BELOW 4 EV AND A 1/E SPECTRUM
+* ABOVE.
+ DO 65 IG1=1,MIN(NGRO,NGX)
+ DO 60 IG2=1,NGRO
+ WORK(IG1)=WORK(IG1)+SCAT(IG1,IG2)*DELTA(IG2)/DELTA(IG1)
+ 60 CONTINUE
+ 65 CONTINUE
+ DO 70 IG1=NGX+1,NGRO
+ WORK(IG1)=WORK(IG1)+WR2(IG1)
+ 70 CONTINUE
+ ELSE
+ CALL XABORT('LIBADD: UNKNOWN TYPE OF CORRECTION.')
+ ENDIF
+ ENDIF
+* ***CAUTION*** 'TRANC' CONTAINS BOTH TRANSPORT AND LEAKAGE
+* CORRECTIONS.
+ CALL LCMPUT(KPLIB,'TRANC',NGRO,2,WORK)
+ ENDIF
+ ENDIF
+ 110 CONTINUE
+*----
+* SCRATCH STORAGE DEALLOCATION
+*----
+ DEALLOCATE(DELTA,SCAT,WR2,WORK)
+ RETURN
+*
+ 200 FORMAT(/51H LIBADD: THE GOLDSTEIN-COHEN PARAMETER OF ISOTOPE ',
+ 1 A12,12H' WAS SET TO,F5.2,33H FOR GROUPS WITH INDEX GREATER OR,
+ 2 9H EQUAL TO,I4,1H.)
+ 210 FORMAT(/18H LIBADD: ISOTOPE ',A12,20H' IS PROCESSED WITH ,A,
+ 1 48H METHOD IN GROUPS WITH INDEX GREATER OR EQUAL TO,I4,1H.)
+ END