From 7dfcc480ba1e19bd3232349fc733caef94034292 Mon Sep 17 00:00:00 2001 From: stainer_t Date: Mon, 8 Sep 2025 13:48:49 +0200 Subject: Initial commit from Polytechnique Montreal --- Dragon/src/LIBDI6.f | 213 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 213 insertions(+) create mode 100644 Dragon/src/LIBDI6.f (limited to 'Dragon/src/LIBDI6.f') diff --git a/Dragon/src/LIBDI6.f b/Dragon/src/LIBDI6.f new file mode 100644 index 0000000..7dbb392 --- /dev/null +++ b/Dragon/src/LIBDI6.f @@ -0,0 +1,213 @@ +*DECK LIBDI6 + SUBROUTINE LIBDI6 (MAXDIL,NGROUP,NAMFIL,HNISOR,HSHI,NDIL,DILUT) +* +*----------------------------------------------------------------------- +* +*Purpose: +* Find the dilutions corresponding to a resonant isotope within a +* library in WIMS-AECL 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. +* NGROUP number of energy groups. +* NAMFIL name of the WIMS-AECL format file. +* HNISOR library name of the isotope. +* HSHI library name of the self-shielding data. +* +*Parameters: output +* NDIL number of finite dilutions. +* DILUT dilutions. +* +*----------------------------------------------------------------------- +* + USE GANLIB +*---- +* SUBROUTINE ARGUMENTS +*---- + CHARACTER NAMFIL*(*),HNISOR*12,HSHI*12 + INTEGER MAXDIL,NGROUP,NDIL + REAL DILUT(MAXDIL) +*---- +* LOCAL VARIABLES +*---- + PARAMETER (IOUT=6,MAXRES=50,MAXTEM=20) + CHARACTER FMT*6,HSMG*131 + REAL RS1(3*MAXRES) + REAL, ALLOCATABLE, DIMENSION(:) :: DSIGPL + REAL, ALLOCATABLE, DIMENSION(:,:) :: GAR +*---- +* WIMS-AECL LIBRARY PARAMETERS +*---- + PARAMETER (IACTC=1,MAXISO=246,NCT=10,LPZ=9,LMASTB=MAXISO+9, + > LMASIN=LMASTB-4,LGENTB=6,LGENIN=LGENTB, + > LSUBTB=6*MAXTEM+28,LSUBIN=LSUBTB-12, + > LRESTB=MAXRES*5,LRESIN=LRESTB) + CHARACTER CWISO(MAXISO)*8,CTITLE(NCT)*8 + INTEGER MASTER(LMASTB),GENINX(LGENTB),SUBINX(LSUBTB), + > SUBINR(LSUBTB),RESINX(LRESTB),ITITLE(2*NCT), + > NPZ(LPZ),IWISO(2*MAXISO) +*---- +* SCRATCH STORAGE ALLOCATION +*---- + ALLOCATE(GAR(NGROUP,2)) +*---- +* OPEN WIMSLIB AND READ GENERAL DIMENSIONING +*---- + IUNIT=KDROPN(NAMFIL,2,4,256) + IF(IUNIT.LE.0) THEN + WRITE (HSMG,'(35HLIBDI6: UNABLE TO OPEN LIBRARY FILE,1X,A16, + 1 8H. IUNIT=,I4,1H.)') NAMFIL,IUNIT + CALL XABORT(HSMG) + ENDIF + CALL OPNIND(IUNIT,MASTER,LMASTB) + CALL REDIND(IUNIT,MASTER,LMASIN,GENINX,LGENTB,1) + CALL REDIND(IUNIT,MASTER,LMASIN,ITITLE,2*NCT,2) + CALL UPCKIC(ITITLE(1),CTITLE(1),NCT) + CALL REDIND(IUNIT,GENINX,LGENIN,NPZ,LPZ,1) + IF(NPZ(2).NE.NGROUP) THEN + WRITE(IOUT,9001) NGROUP,NPZ(2) + CALL XABORT('LIBDI6: INVALID NUMBER OF GROUPS(1)') + ENDIF + NEL=NPZ(1) + NGF=NPZ(4) + NGR=NPZ(5) + NGTHER=NPZ(6) + NGFR=NGF+NGR + MXSCT=NGROUP*(NGROUP+2) + IF(NGFR+NGTHER.NE.NGROUP) THEN + WRITE(IOUT,9001) NGROUP,NGFR+NGTHER + CALL XABORT('LIBDI6: INVALID NUMBER OF GROUPS(2)') + ENDIF + IF(NEL.GT.MAXISO) THEN + WRITE(IOUT,9003) MAXISO,NEL + CALL XABORT('LIBDI6: INVALID NUMBER OF ISOTOPES') + ENDIF + ALLOCATE(DSIGPL(NGR)) +*---- +* READ ISOTOPES NAMES +*--- + CALL REDIND(IUNIT,GENINX,LGENIN,IWISO,2*NEL,3) + CALL UPCKIC(IWISO(1),CWISO(1),NEL) + CALL REDIND(IUNIT,GENINX,LGENIN,IWISO,NEL,2) + NRDT=NGTHER-1 +*--- +* READ THROUGH DRAGON FILE AND ACCUMULATE CROSS SECTIONS FOR +* CROSS SECTION ARE SAVED ONLY IF ISOTOPE IS USED +*---- + IDRES=INDEX(HSHI,'.') + IF(IDRES.GT.0) THEN + WRITE(FMT,'(2H(F,I1,3H.1))') IDRES+1 + READ(HSHI,FMT) RIND + ENDIF + IRISO=0 + DO 120 IEL=1,NEL + IF(CWISO(IEL).EQ.HNISOR(1:8)) THEN + IRISO=IEL + IF(IDRES.EQ.0) THEN + RIND=FLOAT(IWISO(IRISO)) + ENDIF + GO TO 125 + ENDIF + 120 CONTINUE + CALL XABORT('LIBDI6: ISOTOPE NOT FOUND ON LIBRARY') + 125 CONTINUE +*---- +* READ SUB INDEX ASSOCIATED WITH ISOTOPE +*--- + CALL REDIND(IUNIT,MASTER,LMASIN,SUBINX,LSUBTB,IRISO+4) + IENDF=SUBINX(LSUBIN+12) +*---- +* FAST AND/OR RESONANCE XS +*---- + CALL REDIND(IUNIT,SUBINX,LSUBIN,GAR(NGF+1:,2),NGR,9) + IF(IENDF.EQ.0) THEN + CALL REDIND(IUNIT,SUBINX,LSUBIN,GAR(NGF+1:,1),NGR,2) + DO 130 IG=NGF+1,NGFR + DSIGPL(IG-NGF)=GAR(IG,1)*GAR(IG,2) + 130 CONTINUE + ELSE + DSIGPL(:NGR)=0.0 + ENDIF +*---- +* MODIFIED SUB IDX LENGTH FOR RESONANCE +*---- + LSUBTR=NGR+7 + LSUBZ=NGR+1 + CALL REDIND(IUNIT,MASTER,LMASIN,SUBINR,LSUBTR,NEL+5) +*---- +* MODIFIED RES IDX LENGTH FOR RESONANCE +*---- + LRESND=SUBINR(NGR+6) + IGRF=NGF + DO 300 IGR=1,NGR + IGRF=IGRF+1 + CALL REDIND(IUNIT,SUBINR,LSUBZ,RESINX,LRESND+1,IGR) + NRES=RESINX(LRESND+1) + IF(NRES.GT.MAXRES) THEN + WRITE(IOUT,9005) NRES,MAXRES + CALL XABORT('LIBDI6: INVALID NUMBER OF RESONANCE') + ENDIF + IF(IGR.EQ.1) THEN + CALL REDIND(IUNIT,RESINX,LRESND,RS1,3*NRES,1) +*---- +* IDENTIFY SELF SHIELDING RESONNANT ISOTOPE +*---- + DO 310 JRES=1,NRES + IF(IDRES.EQ.0) THEN + XRS1=FLOAT(INT((RS1(3*(JRES-1)+1)+0.01)*10.) + > -INT(RS1(3*(JRES-1)+1)+0.01)*10)/10.+0.02 + XRS1=ABS(RS1(3*(JRES-1)+1)-XRS1-RIND) + ELSE + XRS1=ABS(RS1(3*(JRES-1)+1)-RIND) + ENDIF + IF(XRS1.LE.0.01) THEN + KRES=JRES + NTMPR=INT(RS1(3*(KRES-1)+2)+0.1) + NDILR=INT(RS1(3*(KRES-1)+3)+0.1) + IF(NDILR.GT.MAXDIL) THEN + WRITE(IOUT,9007) NDILR,MAXDIL + CALL XABORT('LIBDI6: INVALID NUMBER OF RES DIL') + ENDIF + CALL REDIND(IUNIT,RESINX,LRESND,DILUT,NDILR,3+5*(KRES-1)) + DO 313 II=1,NDILR + IF(DILUT(II)-DSIGPL(IGR).GT.0.0) THEN + DILUT(II)=DILUT(II)-DSIGPL(IGR) + ELSE + DILUT(II)=0.0 + ENDIF + DILUT(II)=MIN(DILUT(II),1.0E10) + 313 CONTINUE + GO TO 300 + ENDIF + 310 CONTINUE + GO TO 110 + ENDIF + 300 CONTINUE + 110 NDIL=NDILR-1 + CALL CLSIND(IUNIT) +*---- +* SCRATCH STORAGE DEALLOCATION +*---- + DEALLOCATE(DSIGPL,GAR) +*---- +* RETURN +*---- + RETURN + 9001 FORMAT(/' LIBDI6: NUMBER OF GROUPS SPECIFIED :',I10/ + > ' NUMBER OF GROUPS IN LIBRARY :',I10) + 9003 FORMAT(/' LIBDI6: MAXIMUM NUMBER OF ISOTOPE SPECIFIED :',I10/ + > ' NUMBER OF ISOTOPE IN LIBRARY :',I10) + 9005 FORMAT(/' LIBDI6: NUMBER OF RESONANT ISOTOPES :',I10/ + > ' MAXIMUM NUMBER OF RESONANT ISOTOPES :',I10) + 9007 FORMAT(/' LIBDI6: NUMBER OF RESONANT DILUTION :',I10/ + > ' MAXIMUM NUMBER OF RESONANT DILUTION :',I10) + END -- cgit v1.2.3