summaryrefslogtreecommitdiff
path: root/Donjon/src/ACRNDF.f
diff options
context:
space:
mode:
Diffstat (limited to 'Donjon/src/ACRNDF.f')
-rw-r--r--Donjon/src/ACRNDF.f106
1 files changed, 106 insertions, 0 deletions
diff --git a/Donjon/src/ACRNDF.f b/Donjon/src/ACRNDF.f
new file mode 100644
index 0000000..583ea46
--- /dev/null
+++ b/Donjon/src/ACRNDF.f
@@ -0,0 +1,106 @@
+*DECK ACRNDF
+ SUBROUTINE ACRNDF(IMPX,NBISO1,ISO,IBM,HNOMIS,IPAPX,IPLIB,MY1,MY2,
+ 1 YLDS,ISTYP)
+*
+*-----------------------------------------------------------------------
+*
+*Purpose:
+* Store records PYNAM, PYMIX and PYIELD into a Microlib.
+*
+*Copyright:
+* Copyright (C) 2021 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
+* IMPX print parameter (equal to zero for no print).
+* NBISO1 number of particularized isotopes.
+* ISO particularized isotope index.
+* IBM material mixture.
+* HNOMIS array containing the names of the particularized isotopes.
+* IPAPX address of the Apex file.
+* IPLIB address of the output microlib LCM object.
+* MY1 number of fissile isotopes including macroscopic sets.
+* MY2 number of fission fragment.
+* YLDS fission yields.
+*
+*Parameters: output
+* ISTYP type of isotope ISO (=1: stable;=2: fissile; =3: fission
+* product).
+*
+*-----------------------------------------------------------------------
+*
+ USE GANLIB
+ USE hdf5_wrap
+ IMPLICIT NONE
+*----
+* SUBROUTINE ARGUMENTS
+*----
+ TYPE(C_PTR) IPAPX,IPLIB
+ INTEGER IMPX,NBISO1,ISO,IBM,MY1,MY2,ISTYP
+ DOUBLE PRECISION YLDS(MY1,MY2)
+ CHARACTER(LEN=8) HNOMIS(NBISO1)
+*----
+* LOCAL VARIABLES
+*----
+ INTEGER I, IOF, NBISO
+*----
+* ALLOCATABLE AYYAYS
+*----
+ INTEGER, ALLOCATABLE, DIMENSION(:) :: IPYMIX
+ REAL, ALLOCATABLE, DIMENSION(:) :: PYIELD
+ CHARACTER(LEN=4), ALLOCATABLE, DIMENSION(:) :: TYPISO
+ CHARACTER(LEN=8), ALLOCATABLE, DIMENSION(:) :: HPYNAM
+*
+ IF(hdf5_group_exists(IPAPX,"/physconst/")) THEN
+ CALL hdf5_read_data(IPAPX,"/physconst/ISOTYP",TYPISO)
+ ELSE IF(hdf5_group_exists(IPAPX,"/physco001/")) THEN
+ CALL hdf5_read_data(IPAPX,"/physco001/ISOTYP",TYPISO)
+ ELSE
+ CALL XABORT('ACRNDF: GROUP physconst NOT FOUND IN HDF5 FILE.')
+ ENDIF
+ NBISO=SIZE(TYPISO,1)
+ IF(ISO.LE.NBISO) THEN
+ IF(TYPISO(ISO).EQ.'OTHE') ISTYP=1
+ IF(TYPISO(ISO).EQ.'FISS') ISTYP=2
+ IF(TYPISO(ISO).EQ.'F.P.') ISTYP=3
+ ELSE
+ ISTYP=1
+ ENDIF
+ IF(ISTYP.EQ.3) THEN
+ ALLOCATE(HPYNAM(MY1),PYIELD(MY1),IPYMIX(MY1))
+ IOF=0
+ DO I=1,NBISO
+ IF(TYPISO(I).EQ.'FISS') THEN
+ IOF=IOF+1
+ IF(IOF.GT.MY1) CALL XABORT('ACRNDF: MY1 OVERFLOW.')
+ HPYNAM(IOF)=HNOMIS(I)
+ IPYMIX(IOF)=IBM
+ PYIELD(IOF)=REAL(YLDS(IOF,ISO))
+ ENDIF
+ ENDDO
+ DO I=NBISO+1,NBISO1
+ IOF=IOF+1
+ IF(IOF.GT.MY1) CALL XABORT('ACRNDF: MY1 OVERFLOW.')
+ HPYNAM(IOF)=HNOMIS(I)
+ IPYMIX(IOF)=IBM
+ PYIELD(IOF)=0.0
+ ENDDO
+ IF(IOF.NE.MY1) CALL XABORT('ACRNDF: MY1 COUNT ERROR.')
+ CALL LCMPTC(IPLIB,'PYNAM',8,MY1,HPYNAM)
+ CALL LCMPUT(IPLIB,'PYMIX',MY1,1,IPYMIX)
+ CALL LCMPUT(IPLIB,'PYIELD',MY1,2,PYIELD)
+ IF(IMPX.GT.2) THEN
+ WRITE(6,'(3X,7HPYIELD=,1P,8E12.4/(8X,10E12.4))') (PYIELD(I),
+ 1 I=1,MY1)
+ ENDIF
+ DEALLOCATE(IPYMIX,PYIELD,HPYNAM)
+ ENDIF
+ DEALLOCATE(TYPISO)
+ RETURN
+ END