summaryrefslogtreecommitdiff
path: root/Dragon/src/LIBMIX.f
diff options
context:
space:
mode:
Diffstat (limited to 'Dragon/src/LIBMIX.f')
-rw-r--r--Dragon/src/LIBMIX.f152
1 files changed, 152 insertions, 0 deletions
diff --git a/Dragon/src/LIBMIX.f b/Dragon/src/LIBMIX.f
new file mode 100644
index 0000000..1a800bc
--- /dev/null
+++ b/Dragon/src/LIBMIX.f
@@ -0,0 +1,152 @@
+*DECK LIBMIX
+ SUBROUTINE LIBMIX(IPLIB,NBMIX,NGROUP,NBISO,ISONAM,MIX,DEN,MASK,
+ 1 MASKL,ITSTMP,TMPDAY)
+*
+*-----------------------------------------------------------------------
+*
+*Purpose:
+* Transformation of the isotope ordered microscopic cross sections to
+* group ordered macroscopic cross sections (part 1).
+*
+*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).
+* NBMIX number of material mixtures.
+* NGROUP number of energy groups.
+* NBISO number of isotopes present in the calculation domain.
+* ISONAM names of microlib isotopes.
+* MIX mixture number of each isotope (can be zero).
+* DEN density of each isotope.
+* MASK mixture mask (=.true. if a mixture is to be made).
+* MASKL group mask (=.true. if an energy group is to be treated).
+* ITSTMP type of cross section perturbation (=0 perturbation
+* forbidden; =1 perturbation not used even if present;
+* =2 perturbation used if present).
+* TMPDAY time stamp in day/burnup/irradiation.
+*
+*-----------------------------------------------------------------------
+*
+ USE GANLIB
+ IMPLICIT NONE
+*----
+* SUBROUTINE ARGUMENTS
+*----
+ TYPE(C_PTR) IPLIB
+ INTEGER NBMIX,NGROUP,NBISO,ISONAM(3,NBISO),MIX(NBISO),ITSTMP
+ REAL DEN(NBISO),TMPDAY(3)
+ LOGICAL MASK(NBMIX),MASKL(NGROUP)
+*----
+* LOCAL VARIABLES
+*----
+ INTEGER NBLK,NSTATE
+ PARAMETER (NBLK=50,NSTATE=40)
+ LOGICAL LSAME,LSTOPW
+ INTEGER ISTATE(NSTATE),I,IPROB,ITRANC,LENGTH,ITYLCM,MAXNFI,NBESP,
+ 1 NDEL,NED,NESP,NFISSI,NL,NPART,STERN
+ CHARACTER TEXT12*12,HPRT1*1
+ REAL OLDTIM(3)
+*----
+* ALLOCATABLE ARRAYS
+*----
+ INTEGER, ALLOCATABLE, DIMENSION(:) :: JNED
+ TYPE(C_PTR), ALLOCATABLE, DIMENSION(:) :: IPISO
+*----
+* RECOVER SOME LIBRARY PARAMETERS.
+*----
+ CALL LCMGET(IPLIB,'STATE-VECTOR',ISTATE)
+ NL=ISTATE(4)
+ ITRANC=ISTATE(5)
+ IPROB=ISTATE(6)
+ NED=ISTATE(13)
+ NBESP=ISTATE(16)
+ NDEL=ISTATE(19)
+ NPART=ISTATE(26)
+ STERN=ISTATE(27)
+ ALLOCATE(JNED(2*NED))
+ IF(NED.GT.0) CALL LCMGET(IPLIB,'ADDXSNAME-P0',JNED)
+*----
+* LOOK FOR OLD LIBRARY DATA
+*----
+ CALL LCMLEN(IPLIB,'MACROLIB',LENGTH,ITYLCM)
+ IF(LENGTH.EQ.-1) THEN
+ CALL LCMSIX(IPLIB,'MACROLIB',1)
+ CALL LCMGTC(IPLIB,'SIGNATURE',12,TEXT12)
+ IF(TEXT12.NE.'L_MACROLIB') THEN
+ CALL XABORT('LIBMIX: INVALID SIGNATURE ON THE MACROLIB.')
+ ENDIF
+ CALL LCMLEN(IPLIB,'TIMESTAMP',LENGTH,ITYLCM)
+ IF((LENGTH.GT.0).AND.(LENGTH.LE.3)) THEN
+ CALL LCMGET(IPLIB,'TIMESTAMP',OLDTIM)
+ IF(ITSTMP.EQ.0) THEN
+ TMPDAY(1)=OLDTIM(1)
+ TMPDAY(2)=OLDTIM(2)
+ TMPDAY(3)=OLDTIM(3)
+ ENDIF
+ ENDIF
+ CALL LCMSIX(IPLIB,' ',2)
+ ENDIF
+*----
+* SET THE LCM MICROLIB ISOTOPEWISE DIRECTORIES.
+*----
+ ALLOCATE(IPISO(NBISO))
+ CALL LIBIPS(IPLIB,NBISO,IPISO)
+*----
+* TRANSPOSE THE MICROSCOPIC CROSS SECTIONS TO ADJOINT ORDERING.
+*----
+ IF(IPROB.EQ.1) THEN
+ CALL LIBADJ (IPLIB,NGROUP,NBISO,NL,NDEL,NBESP,IPISO,NED,JNED)
+ ENDIF
+*----
+* SET MULTIPLE FISSION SPECTRA INFORMATION.
+*----
+ IF(NBESP.EQ.0) THEN
+ NESP=1
+ ELSE
+ NESP=NBESP
+ ENDIF
+*----
+* COMPUTE THE MAXIMUM NUMBER OF FISSIONABLE ISOTOPES IN A MIXTURE.
+*----
+ DO 20 I=1,NBISO
+ IF(MIX(I).GT.NBMIX) CALL XABORT('LIBMIX: NBMIX OVERFLOW.')
+ 20 CONTINUE
+ MAXNFI=MIN(NBISO,200)
+ CALL LIBNFI (IPLIB,NGROUP,NBISO,NBMIX,NDEL,NESP,IPISO,MIX,MAXNFI,
+ 1 NFISSI,LSAME)
+*----
+* BUILD THE MACROSCOPIC CROSS SECTIONS.
+*----
+ CALL LIBDEN (IPLIB,NGROUP,NBISO,NBMIX,NL,NDEL,NESP,ISONAM,IPISO,
+ 1 MIX,DEN,MASK,MASKL,NED,JNED,ITRANC,NFISSI,NPART,LSAME,ITSTMP,
+ 2 TMPDAY,STERN)
+*----
+* RECOVER STOPPING POWERS.
+*----
+ LSTOPW=.FALSE.
+ CALL LCMLEN(IPLIB,'PARTICLE',LENGTH,ITYLCM)
+ IF(LENGTH.GT.0) THEN
+ CALL LCMGTC(IPLIB,'PARTICLE',1,HPRT1)
+ LSTOPW=((HPRT1.EQ.'B').OR.(HPRT1.EQ.'C'))
+ ENDIF
+ IF(LSTOPW) THEN
+ CALL LIBEST (IPLIB,NGROUP,NBISO,NBMIX,IPISO,MIX,DEN,MASK,MASKL,
+ 1 NED,JNED,ITSTMP,TMPDAY,STERN)
+ ENDIF
+*----
+* TRANSPOSE THE MICROSCOPIC CROSS SECTIONS BACK TO FORWARD ORDERING.
+*----
+ IF(IPROB.EQ.1) THEN
+ CALL LIBADJ (IPLIB,NGROUP,NBISO,NL,NDEL,NBESP,IPISO,NED,JNED)
+ ENDIF
+ DEALLOCATE(IPISO,JNED)
+ RETURN
+ END