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 --- Donjon/src/FLPHFX.f | 161 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 Donjon/src/FLPHFX.f (limited to 'Donjon/src/FLPHFX.f') diff --git a/Donjon/src/FLPHFX.f b/Donjon/src/FLPHFX.f new file mode 100644 index 0000000..17268f7 --- /dev/null +++ b/Donjon/src/FLPHFX.f @@ -0,0 +1,161 @@ +*DECK FLPHFX + SUBROUTINE FLPHFX(NGRP,NEL,LX,LZ,MAT,VOL,FLUX,FXYZ,RATIO,VTOT, + 1 IMPX,LFLX,LRAT) +* +*----------------------------------------------------------------------- +* +*Purpose: +* Compute the flux distributions and ratios over the whole reactor core; +* print the normalized fluxes on files. +* +*Copyright: +* Copyright (C) 2007 Ecole Polytechnique de Montreal. +* +*Author(s): +* D. Sekki +* +*Update(s): +* V. Descotes 5/06/2010 +* +*Parameters: input +* NGRP total number of energy groups. +* NEL total number of finite elements. +* LX number of hexagons. +* LZ number of elements along z-axis. +* MAT index-number of mixture assigned to each volume. +* VOL element-ordered mesh-splitted volumes. +* FLUX normalized fluxes associated with each volume. +* IMPX screen printing index (=0 for no print). +* LFLX fluxes printing flag: =.true. print on files. +* LRAT ratios printing flag: =.true. print on files. +* +*Parameters: output +* FXYZ mesh-ordered fluxes. +* RATIO fluxes ratios with respect to thermal fluxes. +* VTOT total reactor-core volume. +* +*----------------------------------------------------------------------- +* +*---- +* SUBROUTINE ARGUMENTS +*---- + INTEGER NGRP,NEL,LX,LZ,MAT(NEL),IMPX + REAL FXYZ(LX,LZ,NGRP),FLUX(NEL,NGRP), + 1 RATIO(LX,LZ,NGRP-1),VOL(NEL) + DOUBLE PRECISION VTOT + LOGICAL LFLX,LRAT +*---- +* LOCAL VARIABLES +*---- + PARAMETER(IOUT=6,INIT=1) + CHARACTER TEXT*12 + DOUBLE PRECISION FAVG(NGRP) +*---- +* PERFORM CALCULATION +*---- + IF(IMPX.GT.0)WRITE(IOUT,1010) + FMAX=0. + IM=0 + KM=0 + MGR=0 + VTOT=0.0D0 + FAVG(:NGRP)=0.0D0 + FXYZ(:LX,:LZ,:NGRP)=0.0 + IEL=0 + DO 15 K=1,LZ + DO 10 I=1,LX + IEL=IEL+1 + IF(MAT(IEL).EQ.0)GOTO 10 + VTOT=VTOT+VOL(IEL) + DO JGR=1,NGRP + FXYZ(I,K,JGR)=FLUX(IEL,JGR) + IF(ABS(FXYZ(I,K,JGR)).GT.FMAX)THEN + FMAX=FXYZ(I,K,JGR) + IM=I + KM=K + MGR=JGR + ENDIF + FAVG(JGR)=FAVG(JGR)+FXYZ(I,K,JGR)*VOL(IEL) + ENDDO + 10 CONTINUE + 15 CONTINUE +* MAX AND CORE-AVERAGE FLUXES + IF(IMPX.GT.0)WRITE(IOUT,1000)FMAX,IM,KM,MGR + DO JGR=1,NGRP + FAVG(JGR)=FAVG(JGR)/VTOT + IF(IMPX.GT.0)WRITE(IOUT,1001)FAVG(JGR),JGR + ENDDO + IF(MGR.EQ.0) CALL XABORT('FLPHFX: FLUX NORMALIZATION FAILURE.') + FACT=REAL(FAVG(MGR))/FMAX + FACT2=1./FACT + IF(IMPX.GT.0)WRITE(IOUT,1002)MGR,FACT,FACT2,VTOT +* FLUXES RATIOS + RATIO(:LX,:LZ,:NGRP-1)=0.0 + DO 35 K=1,LZ + DO 30 I=1,LX + IF(FXYZ(I,K,NGRP).EQ.0.)GOTO 30 + DO 20 JGR=1,NGRP-1 + RATIO(I,K,JGR)=FXYZ(I,K,JGR)/FXYZ(I,K,NGRP) + 20 CONTINUE + 30 CONTINUE + 35 CONTINUE + IF(.NOT.LFLX)GOTO 60 +*---- +* PRINTING +*---- + IF(IMPX.GT.0)WRITE(IOUT,1006) +* FLUXES + DO 50 JGR=1,NGRP + WRITE(TEXT,'(A4,I2.2,A4)')'Flux',JGR,'.res' + OPEN(UNIT=INIT,FILE=TEXT,STATUS='UNKNOWN') + WRITE(INIT,1011)LX,LZ,JGR + DO 40 K=1,LZ + WRITE(INIT,1009)K + WRITE(INIT,1005) (FXYZ(I,K,JGR),I=1,LX) + 40 CONTINUE + CLOSE(UNIT=INIT) + IF(IMPX.GT.0)WRITE(IOUT,1003)JGR,TEXT + 50 CONTINUE +* + 60 IF(.NOT.LRAT)GOTO 90 + IF(IMPX.GT.0)WRITE(IOUT,1007) +* RATIOS + DO 80 JGR=1,NGRP-1 + WRITE(TEXT,'(A4,I2.2,A4)')'Rati',JGR,'.res' + OPEN(UNIT=INIT,FILE=TEXT,STATUS='UNKNOWN') + WRITE(INIT,1012)JGR,NGRP,LX,LZ + DO 70 K=1,LZ + WRITE(INIT,1009)K + WRITE(INIT,1008) (RATIO(I,K,JGR),I=1,LX) + 70 CONTINUE + CLOSE(UNIT=INIT) + IF(IMPX.GT.0)WRITE(IOUT,1004)JGR,NGRP,TEXT + 80 CONTINUE + 90 RETURN +* + 1000 FORMAT(1X,'MAX FLUX =',1X,1PE12.6,4X,'AT COORD :',1X, + 1 'HEX # =',I3,2X,'K =',I3,2X,'GROUP #',I2.2/) + 1001 FORMAT(1X,'CORE-AVERAGE FLUX =',1X,1PE12.6, + 1 2X,'=>',2X,'GROUP #',I2.2) + 1002 FORMAT(/1X,'OVERALL FLUX-FORM FACTOR FOR GROUP #',I2.2, + 1 2X,'=>',2X,'AVG/MAX =',1X,F8.4,2X,'(MAX/AVG = ',F8.4, + 2 ')'/1X,'TOTAL CORE VOLUME =',1X,1PE12.6,1X,'CM3'/) + 1003 FORMAT(1X,'FLUXES',2X,'=>',2X,'GROUP #',I2.2,2X, + 1 '=>',2X,'FILE NAME: <',A10,'>',2X,'=>',2X,'DONE.') + 1004 FORMAT(1X,'FLUX RATIOS',2X,'=>',2X,'GR.#',I2.2, + 1 '/GR.#',I2.2,2X,'=>',2X,'FILE NAME: <',A10,'>', + 1 2X,'=>',2X,'DONE.') + 1005 FORMAT(1X,1P,6E16.8) + 1006 FORMAT(/15X,'** PRINTING OF FLUXES ON FILES **'/) + 1007 FORMAT(/15X,'** PRINTING OF RATIOS ON FILES **'/) + 1008 FORMAT(1X,1P,6E14.6) + 1009 FORMAT(//5X,'PLANE-Z #',I2.2/) + 1010 FORMAT(/1X,'** COMPUTING FLUX-DISTRIBUTION', + 1 1X,'OVER THE REACTOR CORE (HEXAGONAL GEOMETRY) **'/) + 1011 FORMAT(/10X,5('*'),3X,'FLUX-DISTRIBUTION OVER THE', + 1 1X,'REACTOR CORE',3X,5('*')//21X,'HEX#=',I2,',',2X, + 2 'NZ=',I2,',',2X,'GROUP #',I2.2) + 1012 FORMAT(/10X,5('*'),3X,'FLUXES RATIO',1X,'#',I2.2, + 1 '/#',I2.2,1X,'OVER THE REACTOR CORE',3X,5('*')// + 2 25X,'HEX # =',I2,',',2X,'NZ=',I2) + END -- cgit v1.2.3