diff options
Diffstat (limited to 'Donjon/src/ACRNDF.f')
| -rw-r--r-- | Donjon/src/ACRNDF.f | 106 |
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 |
