diff options
| author | stainer_t <thomas.stainer@oecd-nea.org> | 2025-09-08 13:48:49 +0200 |
|---|---|---|
| committer | stainer_t <thomas.stainer@oecd-nea.org> | 2025-09-08 13:48:49 +0200 |
| commit | 7dfcc480ba1e19bd3232349fc733caef94034292 (patch) | |
| tree | 03ee104eb8846d5cc1a981d267687a729185d3f3 /Dragon/src/LIBDI4.f | |
Initial commit from Polytechnique Montreal
Diffstat (limited to 'Dragon/src/LIBDI4.f')
| -rw-r--r-- | Dragon/src/LIBDI4.f | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/Dragon/src/LIBDI4.f b/Dragon/src/LIBDI4.f new file mode 100644 index 0000000..457bc82 --- /dev/null +++ b/Dragon/src/LIBDI4.f @@ -0,0 +1,123 @@ +*DECK LIBDI4 + SUBROUTINE LIBDI4 (MAXDIL,NAMFIL,HSHI,NDIL,DILUT) +* +*----------------------------------------------------------------------- +* +*Purpose: +* Find the dilutions corresponding to a resonant isotope within a +* library in Apolib-1 format. +* +*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 +* MAXDIL maximum number of dilutions. +* NAMFIL name of the Apolib file. +* HSHI library name of the self-shielding data. +* +*Parameters: output +* NDIL number of finite dilutions. +* DILUT dilutions. +* +*----------------------------------------------------------------------- +* +*---- +* SUBROUTINE ARGUMENTS +*---- + INTEGER MAXDIL,NDIL + CHARACTER NAMFIL*(*),HSHI*12 + REAL DILUT(MAXDIL) +*---- +* LOCAL VARIABLES +*---- + PARAMETER (MAXIT=1000) + CHARACTER FORM*4,HSMG*131 + INTEGER IT(MAXIT),NTETA(3) + REAL, ALLOCATABLE, DIMENSION(:) :: WORK +*---- +* SCRATCH STORAGE ALLOCATION +*---- + ALLOCATE(WORK(MAXDIL)) +* + NIN=KDROPN(NAMFIL,2,2,0) + IF(NIN.LE.0) THEN + WRITE (HSMG,'(35HLIBDI4: UNABLE TO OPEN LIBRARY FILE,1X,A16, + 1 6H. NIN=,I4,1H.)') NAMFIL,NIN + CALL XABORT(HSMG) + ENDIF + I=INDEX(HSHI,' ') + IF(HSHI.EQ.' ') THEN + NISBEF=0 + ELSE IF(I.EQ.0) THEN + READ(HSHI,'(I8)') NISBEF + ELSE + WRITE(FORM,'(2H(I,I1,1H))') I-1 + READ(HSHI,FORM) NISBEF + ENDIF + 10 READ(NIN) INDLOR,NR,NIT,(IT(I),I=1,NIT),(DUMMY,I=1,18) + IF(NIT.GT.MAXIT) CALL XABORT('LIBDI4: INVALID MAXIT.') + IF(INDLOR.EQ.9999) THEN + CALL XABORT('LIBDI4: UNABLE TO FIND ISOTOPE '//HSHI//'.') + ELSE IF(INDLOR.EQ.NISBEF) THEN + NTYPE=0 + JTYSEC=0 + DO 20 IK=1,IT(4) + IF(IT(IK+4).NE.JTYSEC) THEN + NTYPE=NTYPE+1 + NTETA(NTYPE)=1 + JTYSEC=IT(IK+4) + ELSE + NTETA(NTYPE)=NTETA(NTYPE)+1 + ENDIF + 20 CONTINUE + DO 55 I=1,NTYPE + READ (NIN) TEMP,NSEI,(WORK(K),K=1,NSEI) + IF(NSEI.GT.MAXDIL) CALL XABORT('LIBDI4: INVALID MAXDIL.') + IF(I.EQ.1) THEN + NDIL=NSEI + DO 30 K=NSEI,1,-1 + IF(WORK(K).GE.1.0E10) THEN + NDIL=NDIL-1 + ELSE + DILUT(K)=WORK(K) + ENDIF + 30 CONTINUE + DILUT(NDIL+1)=1.0E10 + ELSE + DO 40 K=NSEI,1,-1 + IF((WORK(K).LT.1.0E10).AND.(WORK(K).NE.DILUT(K))) THEN + WRITE(HSMG,'(26HLIBDI4: INVALID DILUTION (,1P,E12.4, + 1 9H) ON TYPE,I2,11H REACTIONS.,E12.4,10H EXPECTED.)') + 2 WORK(K),I,DILUT(K) + CALL XABORT(HSMG) + ENDIF + 40 CONTINUE + ENDIF + DO 50 ITET=2,NTETA(I) + READ(NIN) + 50 CONTINUE + 55 CONTINUE + ELSE + DO 60 K=1,NR + READ(NIN) + 60 CONTINUE + GO TO 10 + ENDIF + IER=KDRCLS(NIN,1) + IF(IER.LT.0) THEN + WRITE (HSMG,'(36HLIBDI4: UNABLE TO CLOSE LIBRARY FILE,1X,A16, + 1 1H.)') NAMFIL + CALL XABORT(HSMG) + ENDIF +*---- +* SCRATCH STORAGE DEALLOCATION +*---- + DEALLOCATE(WORK) + RETURN + END |
