diff options
Diffstat (limited to 'Dragon/src/EVOGET.f')
| -rw-r--r-- | Dragon/src/EVOGET.f | 401 |
1 files changed, 401 insertions, 0 deletions
diff --git a/Dragon/src/EVOGET.f b/Dragon/src/EVOGET.f new file mode 100644 index 0000000..dcb7004 --- /dev/null +++ b/Dragon/src/EVOGET.f @@ -0,0 +1,401 @@ +*DECK EVOGET + SUBROUTINE EVOGET(IPRINT,ITYPE ,ITIXS ,IEXTR ,IGLOB ,ISAT , + > IDIRAC,ISAVE ,ISET ,INR ,IDEPL ,IFLMAC, + > IYLMIX,RPAR ,XT ,NBMIX ,IPICK ,MIXBRN, + > MIXPWR) +* +*----------------------------------------------------------------------- +* +*Purpose: +* Read burnup input options. +* +*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/output +* IPRINT print flag. +* ITYPE solution method: +* ITYPE=1 for fifth order Cash-Karp algorithm; +* ITYPE=2 for fourth order Kaps-Renthrop algorithm. +* ITIXS flag for time dependent xs: +* ITIXS= 0 for flag ON; +* ITIXS= 1 for flag OFF. +* IEXTR flag for power normalization: +* IEXTR= 0 no extrapolation; +* IEXTR= 1 linear extrapolation; +* IEXTR= 2 parabolic extrapolation. +* IGLOB flag for out-of-fuel power in flux normalization. +* GLOB=-1: using the Serpent mode 0 emperical formula; +* GLOB= 0: using the power released in the fuel; +* GLOB= 1: using the power released in the global geometry. +* ISAT flag for saturaton: +* ISAT= 0 for flag OFF; +* ISAT= 1 for flag ON. +* IDIRAC flag for delta Dirac saturation: +* IDIRAC= 0 for flag OFF; +* IDIRAC= 1 for flag ON. +* ISAVE flag for SAVE: +* ISAVE=-1 for no SAVE. +* ISAVE= 0 for automatic SAVE. +* ISAVE= 1 for manual SAVE. +* ISET flag for SET: +* ISET= 0 for automatic SET; +* ISET= 1 for manual SET. +* INR burnup option: +* INR= 0 for out-of-core depletion; +* INR= 1 for constant flux depletion; +* INR= 2 for constant power per kg; +* INR= 2 for constant power per volume (cc). +* IFLMAC flag to recover neutron flux: +* IFLMAC= 0 recover from L_FLUX object; +* IFLMAC= 1 recover from embedded macrolib +* in L_LIBRARY object; +* IFLMAC= 2 recover from 'FLUX-BUND' record +* in L_POWER object. +* IYLMIX flag to recover fission yield data: +* IYLMIX= 0 recover from DEPL-CHAIN data; +* IYLMIX= 1 recover from isotopic PYIELD data. +* IDEPL flag for depletion: +* IDEPL= 0 for no depletion; +* IDEPL= 1 for depletion. +* RPAR burnup parameters: +* RPAR(1) = EPS1 accuracy of ODE solver; +* RPAR(2) = EPS2 accuracy for constant +* power iteration; +* RPAR(3) = EXPMAX isotope saturation flag; +* RPAR(4) = H1 guessed first time step; +* RPAR(5) = FIT flux (N/CM**2/S) OR +* power (kW/kG INITIAL HEAVY) +* W/CC (W/CC) +* normalization factor. +* XT time control table: +* XT(1) = initial time for depletion; +* XT(2) = final time for depletion; +* XT(3) = time for save; +* XT(4) = time for last set; +* XT(5) = time for current set. +* NBMIX number of mixtures. +* IPICK flag for burnup value recovery in a CLE-2000 variable: +* IPICK= 0 for no recovery; +* IPICK= 1 for recovery. +* MIXBRN flags for mixtures to burn. +* MIXPWR flags for mixtures to include in power normalization. +* +*----------------------------------------------------------------------- +* + USE GANLIB + IMPLICIT NONE +*---- +* SUBROUTINE ARGUMENTS +*---- + INTEGER IPRINT,ITYPE,ITIXS,IEXTR,IGLOB,ISAT, + > IDIRAC,ISAVE,ISET,INR,IDEPL,IFLMAC,IYLMIX,NBMIX, + > IPICK,MIXBRN(NBMIX),MIXPWR(NBMIX) + REAL RPAR(5),XT(5) +*---- +* LOCAL VARIABLES +*---- + INTEGER IOUT + CHARACTER NAMSBR*6 + REAL CSEC,CDAY,CYEAR + PARAMETER (IOUT=6,CSEC=1.0E-8,CDAY=8.64E-4, + > CYEAR=3.1536E-1,NAMSBR='EVOGET') +*---- +* INPUT FILE PARAMETERS +*---- + CHARACTER CARLIR*12 + INTEGER ITYPLU,INTLIR + REAL REALIR + DOUBLE PRECISION DBLLIR +*---- +* LOCAL PARAMETERS +*---- + INTEGER IRDT,KMIXB,KMIXP,IMIX +*---- +* READ THE BURNUP INPUT DATA. +*---- + ISAVE=0 + ISET=0 + KMIXB=0 + KMIXP=0 + 100 CONTINUE + CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR) + 101 CONTINUE + IF(ITYPLU .EQ. 10) GO TO 105 + IF(ITYPLU .NE. 3) CALL XABORT(NAMSBR// + >': CHARACTER KEYWORD EXPECTED.') + IF(CARLIR(1:4) .EQ. ';') THEN + IPICK=0 + GO TO 105 + ELSE IF(CARLIR(1:4) .EQ. 'PICK') THEN + IPICK=1 + GO TO 105 + ELSE IF(CARLIR(1:4) .EQ. 'EDIT') THEN + CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR) + IF(ITYPLU .NE. 1) CALL XABORT(NAMSBR// + > ': INTEGER IPRINT EXPECTED') + IPRINT=INTLIR + ELSE IF(CARLIR(1:4) .EQ. 'EPS1') THEN + CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR) + IF(ITYPLU .NE. 2) CALL XABORT(NAMSBR// + > ': REAL EPS1 EXPECTED') + RPAR(1)=REALIR + ELSE IF(CARLIR(1:4) .EQ. 'EPS2') THEN + CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR) + IF(ITYPLU .NE. 2) CALL XABORT(NAMSBR// + > ': REAL EPS2 EXPECTED') + RPAR(2)=REALIR + ELSE IF(CARLIR(1:4) .EQ. 'EXPM') THEN + CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR) + IF(ITYPLU .NE. 2) CALL XABORT(NAMSBR// + > ': REAL EXPM EXPECTED') + RPAR(3)=REALIR + ELSE IF(CARLIR(1:6) .EQ. 'SATOFF') THEN + RPAR(3)=0.0 + ELSE IF(CARLIR(1:9) .EQ. 'FLUX_FLUX') THEN + IFLMAC=0 + ELSE IF(CARLIR(1:8) .EQ. 'FLUX_MAC') THEN + IFLMAC=1 + ELSE IF(CARLIR(1:8) .EQ. 'FLUX_POW') THEN + IFLMAC=2 + ELSE IF(CARLIR(1:8) .EQ. 'CHAIN') THEN + IYLMIX=0 + ELSE IF(CARLIR(1:8) .EQ. 'PIFI') THEN + IYLMIX=1 + ELSE IF(CARLIR(1:4) .EQ. 'H1') THEN + CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR) + IF(ITYPLU .NE. 2) CALL XABORT(NAMSBR// + > 'REAL H1 EXPECTED') + RPAR(4)=REALIR + ELSE IF(CARLIR(1:4) .EQ. 'RUNG') THEN + ITYPE=1 + ELSE IF(CARLIR(1:4) .EQ. 'KAPS') THEN + ITYPE=2 + ELSE IF(CARLIR(1:4) .EQ. 'NOEX') THEN + IEXTR=0 + ELSE IF(CARLIR(1:4) .EQ. 'EXTR') THEN + IEXTR=1 + CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR) + IF(ITYPLU .NE. 1) GO TO 101 + IEXTR=INTLIR + IF((IEXTR.NE.1).AND.(IEXTR.NE.2)) THEN + CALL XABORT('EVOGET: INVALID EXTR INDEX.') + ENDIF + ELSE IF(CARLIR(1:4) .EQ. 'EDP0') THEN + IGLOB=-1 + ELSE IF(CARLIR(1:4) .EQ. 'NOGL') THEN + IGLOB=0 + ELSE IF(CARLIR(1:4) .EQ. 'GLOB') THEN + IGLOB=1 + ELSE IF(CARLIR(1:4) .EQ. 'NSAT') THEN + ISAT=0 + ELSE IF(CARLIR(1:4) .EQ. 'SAT ') THEN + ISAT=1 + ELSE IF(CARLIR(1:4) .EQ. 'NODI') THEN + IDIRAC=0 + ELSE IF(CARLIR(1:4) .EQ. 'DIRA') THEN + IDIRAC=1 + ELSE IF(CARLIR(1:4) .EQ. 'TIXS') THEN + ITIXS=1 + ELSE IF(CARLIR(1:4) .EQ. 'TDXS') THEN + ITIXS=0 + ELSE IF(CARLIR(1:4) .EQ. 'MIXB') THEN + KMIXB=1 + MIXBRN(:NBMIX)=0 + DO IMIX=1,NBMIX + CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR) + IF(ITYPLU .NE. 1) GO TO 101 + IF(INTLIR .GE. 1 .AND. INTLIR .LE. NBMIX) THEN + MIXBRN(INTLIR)=1 + ENDIF + ENDDO + ELSE IF(CARLIR(1:4) .EQ. 'MIXP') THEN + KMIXP=1 + MIXPWR(:NBMIX)=0 + DO IMIX=1,NBMIX + CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR) + IF(ITYPLU .NE. 1) GO TO 101 + IF(INTLIR .GE. 1 .AND. INTLIR .LE. NBMIX) THEN + MIXPWR(INTLIR)=1 + ENDIF + ENDDO + ELSE IF(CARLIR(1:4) .EQ. 'NOSA') THEN + ISAVE=-1 + ELSE IF(CARLIR(1:4) .EQ. 'SAVE') THEN + ISAVE=1 +* SAVE THE LAST FLUX CALCULATION IN THE DEPLETION TABLE. + CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR) + IF(ITYPLU .NE. 2) CALL XABORT(NAMSBR// + > ': SAVE TIME EXPECTED') + XT(3)=REALIR + CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR) + IF(ITYPLU .NE. 3) CALL XABORT(NAMSBR// + > ': TIME UNITS EXPECTED') + IF(CARLIR(1:4) .EQ. 'S') THEN + XT(3)=XT(3)*CSEC + ELSE IF(CARLIR(1:4) .EQ. 'DAY') THEN + XT(3)=XT(3)*CDAY + ELSE IF(CARLIR(1:4) .EQ. 'YEAR') THEN + XT(3)=XT(3)*CYEAR + ELSE + CALL XABORT(NAMSBR//': INVALID TIME UNITS') + ENDIF + CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR) + IF(ITYPLU .NE. 3) CALL XABORT(NAMSBR// + > ': SAVE NORMALIZATION EXPECTED') + IF(CARLIR(1:4) .EQ. 'FLUX') THEN + INR=1 + CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR) + IF(ITYPLU .NE. 2) CALL XABORT(NAMSBR// + > ': BURNUP FLUX LEVEL EXPECTED') + RPAR(5)=REALIR + IF(RPAR(5) .EQ. 0.0) THEN + INR=0 + ENDIF + ELSE IF(CARLIR(1:4) .EQ. 'POWR') THEN + INR=2 + CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR) + IF(ITYPLU .NE. 2) CALL XABORT(NAMSBR// + > ': BURNUP POWER EXPECTED') + RPAR(5)=REALIR + IF(RPAR(5) .EQ. 0.0) THEN + INR=0 + ENDIF + ELSE IF(CARLIR(1:4) .EQ. 'W/CC') THEN + INR=3 + CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR) + IF(ITYPLU .NE. 2) CALL XABORT(NAMSBR// + > ': BURNUP POWER EXPECTED') + RPAR(5)=REALIR + IF(RPAR(5) .EQ. 0.0) THEN + INR=0 + ENDIF + ELSE IF(CARLIR(1:4) .EQ. 'KEEP') THEN + INR=4 + ELSE + GO TO 101 + ENDIF + ELSE IF(CARLIR(1:4) .EQ. 'DEPL') THEN + IDEPL=1 + IRDT=2 + CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR) + IF(ITYPLU .NE. 2) CALL XABORT(NAMSBR// + > ': INITIAL OR INCREMENTAL DEPLETE TIME EXPECTED') + XT(1)=REALIR + CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR) + IF(ITYPLU .EQ. 1) THEN + CALL XABORT(NAMSBR//': UNITS OR FINAL TIME EXPECTED') + ELSE IF(ITYPLU .EQ. 2) THEN + XT(2)=REALIR + IRDT=1 + CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR) + ENDIF + IF(ITYPLU .NE. 3) CALL XABORT(NAMSBR// + > ': TIME UNITS EXPECTED') + IF(CARLIR(1:4) .EQ. 'S') THEN + XT(1)=XT(1)*CSEC + XT(2)=XT(2)*CSEC + ELSE IF(CARLIR(1:4) .EQ. 'DAY') THEN + XT(1)=XT(1)*CDAY + XT(2)=XT(2)*CDAY + ELSE IF(CARLIR(1:4) .EQ. 'YEAR') THEN + XT(1)=XT(1)*CYEAR + XT(2)=XT(2)*CYEAR + ELSE + CALL XABORT(NAMSBR//': INVALID TIME UNITS') + ENDIF + IF(IRDT .EQ. 2) THEN + XT(2)=XT(4)+XT(1) + XT(1)=XT(4) + ENDIF + IF(XT(2) .LE. XT(1)) CALL XABORT(NAMSBR// + > ': FINAL TIME IS LESS OR EQUAL TO THE INITIAL TIME.') + CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR) + IF(ITYPLU .NE. 3) CALL XABORT(NAMSBR// + > ': DEPLETION NORMALIZATION LEVEL EXPECTED') + IF(CARLIR(1:4) .EQ. 'COOL') THEN + INR=0 + RPAR(5)=0.0 + ELSE IF(CARLIR(1:4) .EQ. 'FLUX') THEN + INR=1 + CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR) + IF(ITYPLU .NE. 2) CALL XABORT(NAMSBR// + > ': FLUX LEVEL EXPECTED') + RPAR(5)=REALIR + IF(RPAR(5) .EQ. 0.0) THEN + INR=0 + ENDIF + ELSE IF(CARLIR(1:4) .EQ. 'POWR') THEN + INR=2 + CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR) + IF(ITYPLU .NE. 2) CALL XABORT(NAMSBR// + > ': POWER LEVEL EXPECTED') + RPAR(5)=REALIR + IF(RPAR(5) .EQ. 0.0) THEN + INR=0 + ENDIF + ELSE IF(CARLIR(1:4) .EQ. 'W/CC') THEN + INR=3 + CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR) + IF(ITYPLU .NE. 2) CALL XABORT(NAMSBR// + > ': POWER LEVEL EXPECTED') + RPAR(5)=REALIR + IF(RPAR(5) .EQ. 0.0) THEN + INR=0 + ENDIF + ELSE IF(CARLIR(1:4) .EQ. 'KEEP') THEN + INR=4 + ELSE + GO TO 101 + ENDIF + ELSE IF(CARLIR(1:4) .EQ. 'SET') THEN + ISET=1 + CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR) + IF(ITYPLU .NE. 2) CALL XABORT(NAMSBR// + > ': SET TIME EXPECTED') + XT(5)=REALIR + CALL REDGET(ITYPLU,INTLIR,REALIR,CARLIR,DBLLIR) + IF(ITYPLU .NE. 3) CALL XABORT(NAMSBR// + > ': TIME UNITS EXPECTED') + IF(CARLIR(1:4) .EQ. 'S') THEN + XT(5)=XT(5)*CSEC + ELSE IF(CARLIR(1:4) .EQ. 'DAY') THEN + XT(5)=XT(5)*CDAY + ELSE IF(CARLIR(1:4) .EQ. 'YEAR') THEN + XT(5)=XT(5)*CYEAR + ELSE + CALL XABORT(NAMSBR//': INVALID TIME UNITS') + ENDIF + ELSE + CALL XABORT(NAMSBR//': '//CARLIR//' IS AN INVALID KEYWORD') + ENDIF + GO TO 100 +*---- +* INPUT DATA READ COMPLETE +*---- + 105 CONTINUE + IF((ISET .EQ. 0) .AND. (IDEPL .EQ. 0)) ISET=-1 + XT(4)=0.0 + IF(ISAVE .EQ. -1) THEN + XT(4)=-1.0 + ELSE IF(ISAVE .EQ. 0) THEN + XT(3)=XT(1) + ENDIF + IF(ISET .EQ. 0) THEN + XT(5)=XT(2) + ENDIF + IF(KMIXB .EQ. 1) THEN + IF(KMIXP .EQ. 0) THEN + DO IMIX=1,NBMIX + MIXPWR(IMIX)=MIXBRN(IMIX) + ENDDO + ENDIF + ENDIF + RETURN + END |
