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/FLUKEF.f | 194 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 194 insertions(+) create mode 100644 Dragon/src/FLUKEF.f (limited to 'Dragon/src/FLUKEF.f') diff --git a/Dragon/src/FLUKEF.f b/Dragon/src/FLUKEF.f new file mode 100644 index 0000000..329d731 --- /dev/null +++ b/Dragon/src/FLUKEF.f @@ -0,0 +1,194 @@ +*DECK FLUKEF + SUBROUTINE FLUKEF(IPRT,IPMACR,NGRP,NREG,NUNKNO,NMAT,NIFIS,NANIS, + 1 MATCOD,VOL,KEYFLX,XSTRC,XSDIA,XSNUF,XSCHI,NMERG,IMERG,DIFHET, + 2 FLUX,B2,ILEAK,LEAKSW,OLDBIL,AKEFF,AFLNOR) +* +*----------------------------------------------------------------------- +* +*Purpose: +* Compute the effective multiplication factor. +* +*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): R. Roy +* +*Parameters: input +* IPRT print flag. +* IPMACR pointer to the macrolib LCM object. +* NGRP number of energy groups. +* NREG number of regions. +* NUNKNO number of unknowns per energy group including spherical +* harmonic terms, interface currents and fundamental +* currents. +* NMAT number of mixtures. +* NIFIS number of fissile isotopes. +* NANIS maximum cross section Legendre order. +* MATCOD mixture indices. +* VOL volumes. +* KEYFLX index of region flux components in unknown vector. +* XSTRC transport-corrected macroscopic total cross sections. +* XSDIA transport-corrected macroscopic within-group scattering cross +* sections. +* XSNUF nu*macroscopic fission cross sections. +* XSCHI fission spectrum. +* NMERG number of leakage zones. +* IMERG leakage zone index in each material mixture zone. +* DIFHET heterogeneous leakage coefficients. +* FLUX neutron flux. +* B2 directionnal bucklings. +* ILEAK method used to include DB2 effect: +* <5 uniform DB2 model; +* =5 Todorova-type isotropic streaming model; +* =6 Ecco-type isotropic streaming model; +* >6 Tibere anisotropic streaming model. +* LEAKSW leakage flag (=.true. if leakage is present on the outer +* surface). +* +*Parameters: input/output +* OLDBIL previous norm of the flux on input and +* new norm of the flux at output. +* +*Parameters: output +* AKEFF effective multiplication factor. +* AFLNOR flux normalization factor. +* +*----------------------------------------------------------------------- +* + USE GANLIB +*---- +* SUBROUTINE ARGUMENTS +*---- + TYPE(C_PTR) IPMACR + INTEGER IPRT,NGRP,NREG,NUNKNO,NMAT,NIFIS,NANIS,MATCOD(NREG), + 1 KEYFLX(NREG),NMERG,IMERG(NMAT),ILEAK + REAL VOL(NREG),XSTRC(0:NMAT,NGRP),XSDIA(0:NMAT,0:NANIS,NGRP), + 1 XSNUF(0:NMAT,NIFIS,NGRP),XSCHI(0:NMAT,NIFIS,NGRP), + 2 DIFHET(NMERG,NGRP),FLUX(NUNKNO,NGRP),B2(4) + DOUBLE PRECISION OLDBIL,AKEFF,AFLNOR + LOGICAL LEAKSW +*---- +* LOCAL VARIABLES +*---- + TYPE(C_PTR) JPMACR,KPMACR + DOUBLE PRECISION LOSS,SUMCHI,PROD,FISONE,PHIC,FISOUR,AKINV, + 1 DZERO,DONE + PARAMETER (DZERO=0.0D0, DONE=1.0D0) + INTEGER, ALLOCATABLE, DIMENSION(:) :: IJJ,NJJ,IPOS + REAL, ALLOCATABLE, DIMENSION(:) :: XSCAT +*---- +* SCRATCH STORAGE ALLOCATION +*---- + ALLOCATE(NJJ(0:NMAT),IJJ(0:NMAT),IPOS(0:NMAT)) + ALLOCATE(XSCAT(0:NMAT*NGRP)) +* + FISOUR=DZERO + SUMCHI=DZERO + LOSS=DZERO + AKINV=DZERO + JPMACR=LCMGID(IPMACR,'GROUP') + DO 40 IGRP=1,NGRP + KPMACR=LCMGIL(JPMACR,IGRP) + DO 15 IREG=1,NREG + IND=KEYFLX(IREG) + IF(IND.EQ.0) GO TO 15 + IBM=MATCOD(IREG) + IF(IBM.EQ.0) GO TO 15 + PHIC=FLUX(IND,IGRP)*VOL(IREG) + LOSS=LOSS+XSTRC(IBM,IGRP)*PHIC + IF((ILEAK.GE.1).AND.(ILEAK.LE.5)) THEN + INM=IMERG(IBM) + IF(INM.GT.0) LOSS=LOSS+B2(4)*DIFHET(INM,IGRP)*PHIC + ELSE IF(ILEAK.EQ.6) THEN + LOSS=LOSS+B2(4)*FLUX(NUNKNO/2+IND,IGRP)*VOL(IREG) + ELSE IF(ILEAK.GE.7) THEN + LOSS=LOSS+B2(1)*FLUX(NUNKNO/4+IND,IGRP)*VOL(IREG) + 1 +B2(2)*FLUX(NUNKNO/2+IND,IGRP)*VOL(IREG) + 2 +B2(3)*FLUX(3*NUNKNO/4+IND,IGRP)*VOL(IREG) + ENDIF + DO 10 IFIS=1,NIFIS + FISOUR=FISOUR+XSNUF(IBM,IFIS,IGRP)*PHIC + AKINV=AKINV+XSNUF(IBM,IFIS,IGRP)*PHIC + 10 CONTINUE + 15 CONTINUE +* + CALL LCMGET(KPMACR,'NJJS00',NJJ(1)) + CALL LCMGET(KPMACR,'IJJS00',IJJ(1)) + CALL LCMGET(KPMACR,'IPOS00',IPOS(1)) + CALL LCMGET(KPMACR,'SCAT00',XSCAT(1)) + DO 30 IREG=1,NREG + IBM=MATCOD(IREG) + IF(IBM.GT.0) THEN + IND=KEYFLX(IREG) + JGRP=IJJ(IBM) + DO 20 JND=1,NJJ(IBM) + IF(JGRP.EQ.IGRP) THEN + LOSS=LOSS-XSDIA(IBM,0,IGRP)*FLUX(IND,IGRP)*VOL(IREG) + ELSE + LOSS=LOSS-XSCAT(IPOS(IBM)+JND-1)*FLUX(IND,JGRP)*VOL(IREG) + ENDIF + JGRP=JGRP-1 + 20 CONTINUE + ENDIF + 30 CONTINUE + 40 CONTINUE +* + IF(AKINV.NE.0.0) THEN + AKINV=DONE/AKINV + DO 70 IREG=1,NREG + IND=KEYFLX(IREG) + IF(IND.EQ.0) GO TO 70 + IBM=MATCOD(IREG) + DO 65 IFIS=1,NIFIS + FISONE=DZERO + DO 50 IGRP=1,NGRP + FISONE=FISONE+XSNUF(IBM,IFIS,IGRP)*FLUX(IND,IGRP) + 50 CONTINUE + DO 60 IGRP=1,NGRP + SUMCHI=SUMCHI+AKINV*XSCHI(IBM,IFIS,IGRP)*FISONE*VOL(IREG) + 60 CONTINUE + 65 CONTINUE + 70 CONTINUE + ENDIF +* + PROD=SUMCHI*FISOUR + IF(PROD.GT.DZERO) THEN + AFLNOR=DONE/PROD + ELSE + AFLNOR=DONE + ENDIF + IF(LEAKSW) THEN + IF(OLDBIL.GT.DZERO) THEN + AKEFF=PROD/OLDBIL + ELSE + AKEFF=PROD + ENDIF + ELSE + IF(LOSS.GT.DZERO) THEN + AKEFF=PROD/LOSS + AFLNOR=AFLNOR*LOSS + ELSE + AKEFF=PROD + ENDIF + ENDIF + OLDBIL=PROD*AFLNOR + IF(IPRT.GT.2) THEN + WRITE(6,*) + WRITE(6,*) ' ************ OLDBIL=',OLDBIL + WRITE(6,*) ' ************ PROD =',PROD + WRITE(6,*) ' ************ LOSS =',LOSS + WRITE(6,*) ' ************ AFLNOR=',AFLNOR + WRITE(6,*) ' ************ AKEFF =',AKEFF + WRITE(6,*) + ENDIF +*---- +* SCRATCH STORAGE DEALLOCATION +*---- + DEALLOCATE(XSCAT) + DEALLOCATE(IPOS,IJJ,NJJ) + RETURN + END -- cgit v1.2.3