diff --git a/Source/chem.f90 b/Source/chem.f90 index e8d36c9f618..424e8995d89 100644 --- a/Source/chem.f90 +++ b/Source/chem.f90 @@ -783,7 +783,8 @@ END FUNCTION DDTMP_TROE !> \brief cvode interface for ODE integrator. Call sundials cvode in serial mode. !> \param CC species concentration (kmol/m3) array !> \param ZZ_0 initial species mass fraction array (of the unbuned zone),needed for mixing+chem -!> \param TMP_IN is the temperature of the cell (unburned zone) +!> \param TMP_IN is the temperature of the mixed zone (For DNS it is cell temp) +!> \param TMP_UNMIX is the unmix zone temperature !> \param PR_IN is the pressure !> \param ZETA0 is the initial unmixed fraction !> \param TAU_MIX is Mixing timescale @@ -792,13 +793,13 @@ END FUNCTION DDTMP_TROE !> \param TEND is the end time in seconds !> \param RTOL is the relative error for all the species (REAL_EB) !> \param ATOL is the absolute error tolerance array for the species (REAL_EB) -!> \param TMP_OUT reactor calculated temperature at the end +!> \param TMP_OUT reactor calculated mixing zone temperature at the end !> \param CHEM_TIME Chemical time scale !> \param WRITE_SUBSTEPS Whether to write cvode substeps. Only write for first cfd step. !> \param CVODE_CALL_OPTION 1:CV_NORMAL, 2=CV_ONE_STEP !> \details This is the interface subroutine to the other modules. -SUBROUTINE CVODE_SERIAL(CC,ZZ_0, TMP_IN, PR_IN, ZETA0, TAU_MIX, CELL_MASS, TCUR,TEND, RTOL, ATOL, & +SUBROUTINE CVODE_SERIAL(CC,ZZ_0, TMP_IN, TMP_UNMIX, PR_IN, ZETA0, TAU_MIX, CELL_MASS, TCUR,TEND, RTOL, ATOL, & TMP_OUT, CHEM_TIME, WRITE_SUBSTEPS, CVODE_CALL_OPTION) USE PHYSICAL_FUNCTIONS, ONLY : MOLAR_CONC_TO_MASS_FRAC, CALC_EQUIV_RATIO, GET_ENTHALPY, GET_MOLECULAR_WEIGHT USE COMP_FUNCTIONS, ONLY: GET_FILE_NUMBER @@ -813,7 +814,7 @@ SUBROUTINE CVODE_SERIAL(CC,ZZ_0, TMP_IN, PR_IN, ZETA0, TAU_MIX, CELL_MASS, TCUR, USE FSUNDIALS_NVECTOR_MOD ! FORTRAN INTERFACE TO GENERIC N_VECTOR REAL(EB), INTENT(INOUT) :: CC(N_TRACKED_SPECIES) -REAL(EB), INTENT(IN) :: ZZ_0(N_TRACKED_SPECIES),TMP_IN,PR_IN,ZETA0,TAU_MIX,CELL_MASS,TCUR,TEND +REAL(EB), INTENT(IN) :: ZZ_0(N_TRACKED_SPECIES),TMP_IN,TMP_UNMIX,PR_IN,ZETA0,TAU_MIX,CELL_MASS,TCUR,TEND REAL(EB), INTENT(IN) :: ATOL(N_TRACKED_SPECIES) REAL(EB), INTENT(IN) :: RTOL REAL(EB), INTENT(OUT) :: TMP_OUT,CHEM_TIME @@ -841,7 +842,7 @@ SUBROUTINE CVODE_SERIAL(CC,ZZ_0, TMP_IN, PR_IN, ZETA0, TAU_MIX, CELL_MASS, TCUR, TYPE(C_PTR) :: USERDATAPTR ! USER DATA CONTAINS MIXING INFORMATION REAL(EB) :: ZZ(N_TRACKED_SPECIES), EQUIV, H_IN -INTEGER :: CVODE_TASK, NS, NTRY, MAXTRY, SUBSTEP_COUNT +INTEGER :: CVODE_TASK, NS, NTRY, MAXTRY, SUBSTEP_COUNT, MAXTRY_FAC REAL(EB) :: H_G TYPE(USERDATA), TARGET :: USER_DATA LOGICAL :: ONLY_FIRST_STEP=.TRUE. ! Needed in CV_ONE_STEP @@ -948,7 +949,7 @@ SUBROUTINE CVODE_SERIAL(CC,ZZ_0, TMP_IN, PR_IN, ZETA0, TAU_MIX, CELL_MASS, TCUR, USER_DATA%CELL_MASS = CELL_MASS ALLOCATE(USER_DATA%ZZ_0(N_TRACKED_SPECIES)) USER_DATA%ZZ_0 = ZZ_0 -CALL GET_ENTHALPY(ZZ_0,H_IN,TMP_IN) +CALL GET_ENTHALPY(ZZ_0,H_IN,TMP_UNMIX) USER_DATA%H_IN = H_IN USERDATAPTR = C_LOC(USER_DATA) IERR_C = FCVODESETUSERDATA(CVODE_MEM, USERDATAPTR) @@ -987,12 +988,14 @@ SUBROUTINE CVODE_SERIAL(CC,ZZ_0, TMP_IN, PR_IN, ZETA0, TAU_MIX, CELL_MASS, TCUR, ENDIF END DO - ENDIF IF (IERR_C /= 0) THEN - MAXTRY = CVODE_MAX_TRY ! If all internal substeps are taken try two more times. This will allow larger CFD timestep. + ! Make MAXTRY at least CVODE_MAX_TRY or for larger timestep (>1E-3) scale it proportionaly. + MAXTRY_FAC = CEILING((TEND-TCUR)/1.0E-3_EB) + MAXTRY_FAC = MIN(MAX(MAXTRY_FAC,1),50) + MAXTRY = CVODE_MAX_TRY*MAXTRY_FAC IF (IERR_C == CV_TOO_MUCH_WORK) THEN !CV_TOO_MUCH_WORK == all internal substeps are taken NTRY = 0 DO WHILE (NTRY < MAXTRY) @@ -1008,8 +1011,8 @@ SUBROUTINE CVODE_SERIAL(CC,ZZ_0, TMP_IN, PR_IN, ZETA0, TAU_MIX, CELL_MASS, TCUR, IF (IERR_C .NE. CV_SUCCESS) THEN IF (IERR_C == CV_TOO_MUCH_WORK) THEN - WRITE(LU_ERR,'(A, 2E18.8, A)')" WARN: CVODE took all internal substeps. CUR_CFD_TIME, DT=", CUR_CFD_TIME, (TEND-TCUR), & - ". If the warning persists, reduce the timestep." + WRITE(LU_ERR,'(A, 2E18.8, I8, A)')" WARN: CVODE took all internal substeps. CUR_CFD_TIME, DT, MAXTRY=", CUR_CFD_TIME, & + (TEND-TCUR), MAXTRY, ". If the warning persists, reduce the timestep." ELSE WRITE(LU_ERR,'(A, I4, A, 2E18.8, A)')" WARN: CVODE didn't finish ODE solution with message code:", IERR_C, & " and CUR_CFD_TIME, DT=", CUR_CFD_TIME, (TEND-TCUR), ". If the warning persists, reduce the timestep." diff --git a/Source/cons.f90 b/Source/cons.f90 index 4a5b2bb7113..7c1b4d36c2a 100644 --- a/Source/cons.f90 +++ b/Source/cons.f90 @@ -886,14 +886,25 @@ END MODULE RADCONS MODULE CHEMCONS USE PRECISION_PARAMETERS +!> \brief Parameters associated with IGNITION_ZONES +TYPE IGNITION_ZONE_TYPE + REAL(EB) :: X1 !< Lower x bound of Ignition Zone + REAL(EB) :: X2 !< Upper x bound of Ignition Zone + REAL(EB) :: Y1 !< Lower y bound of Ignition Zone + REAL(EB) :: Y2 !< Upper y bound of Ignition Zone + REAL(EB) :: Z1 !< Lower z bound of Ignition Zone + REAL(EB) :: Z2 !< Upper z bound of Ignition Zone + INTEGER :: DEVC_INDEX=0 !< Index of device controlling the status of the zone + CHARACTER(LABEL_LENGTH) :: DEVC_ID='null' !< Name of device controlling the status of the zone +END TYPE IGNITION_ZONE_TYPE + INTEGER, ALLOCATABLE, DIMENSION(:) :: YP2ZZ REAL(EB) :: ODE_MIN_ATOL= -1._EB LOGICAL :: EQUIV_RATIO_CHECK = .FALSE. -REAL(EB) :: MIN_EQUIV_RATIO=0.0_EB +REAL(EB) :: MIN_EQUIV_RATIO=0.1_EB REAL(EB) :: MAX_EQUIV_RATIO=20.0_EB LOGICAL :: DO_CHEM_LOAD_BALANCE = .FALSE. INTEGER :: MAX_CVODE_SUBSTEPS=100000 -REAL(EB) :: MAX_CHEM_TIME=1.E-6_EB INTEGER :: CVODE_MAX_TRY=4 LOGICAL :: IS_EXPONENT_LT_1 = .FALSE. @@ -902,5 +913,18 @@ MODULE CHEMCONS REAL(EB), ALLOCATABLE, DIMENSION(:,:) :: CVODE_SUBSTEP_DATA INTEGER :: TOTAL_SUBSTEPS_TAKEN -END MODULE CHEMCONS +! Adiabatic flame temperature calculation +CHARACTER(LABEL_LENGTH) :: FUEL_ID_FOR_AFT='null' +INTEGER :: I_FUEL,I_CO2,I_H2O,I_O2,I_N2 ! Store the index of the species in the ZZ array. +LOGICAL :: USE_MIXED_ZN_AFT_TMP = .TRUE. + +! Mixing +REAL(EB) :: ZETA_ARTIFICAL_MIN_LIMIT=0.99_EB +REAL(EB) :: ZETA_ARTIFICAL_MAX_LIMIT=0.9999_EB +REAL(EB) :: ZETA_FIRST_STEP_DIV=10._EB +! IGNITION ZONES (mainly for premixed flame) +INTEGER :: N_IGNITION_ZONES = 0 +TYPE(IGNITION_ZONE_TYPE), DIMENSION(MAX_IGNITION_ZONES) :: IGNITION_ZONES !< Coordinates of ignition zones used for detailed chemistry + +END MODULE CHEMCONS diff --git a/Source/data.f90 b/Source/data.f90 index b46fc0e5b66..86ec76e7cbc 100644 --- a/Source/data.f90 +++ b/Source/data.f90 @@ -677,6 +677,10 @@ SUBROUTINE DEFINE_OUTPUT_QUANTITIES OUTPUT_QUANTITY(144)%SHORT_NAME = 'Y_ELEM' OUTPUT_QUANTITY(144)%ELEM_ID_REQUIRED = .TRUE. +OUTPUT_QUANTITY(145)%NAME='EQUIVALENCE RATIO' +OUTPUT_QUANTITY(145)%UNITS='' +OUTPUT_QUANTITY(145)%SHORT_NAME = 'equivRatio' + OUTPUT_QUANTITY(150)%NAME = 'SUM LUMPED VOLUME FRACTIONS' OUTPUT_QUANTITY(150)%UNITS = '' OUTPUT_QUANTITY(150)%SHORT_NAME = 'sum X' diff --git a/Source/devc.f90 b/Source/devc.f90 index e7de967e69c..ff495d60e80 100644 --- a/Source/devc.f90 +++ b/Source/devc.f90 @@ -17,7 +17,7 @@ MODULE DEVICE_VARIABLES SPRAY_ANGLE(2,2),P0=0._EB,PX(3)=0._EB,PXX(3,3)=0._EB,VIEW_ANGLE,PROBE_DIAMETER INTEGER :: PDPA_M=0,PDPA_N=0,N_SMOKEVIEW_PARAMETERS=0,N_SMOKEVIEW_IDS=0,N_INSERT,I_VEL=0,PARTICLES_PER_SECOND LOGICAL :: PDPA_INTEGRATE=.TRUE.,PDPA_NORMALIZE=.TRUE.,HISTOGRAM_NORMALIZE=.TRUE.,HISTOGRAM=.FALSE., & - HISTOGRAM_CUMULATIVE=.FALSE.,SPARK=.FALSE.,TC=.TRUE. + HISTOGRAM_CUMULATIVE=.FALSE.,SPARK=.FALSE.,TC=.TRUE.,IGNITION_ZONE=.FALSE. REAL(EB) :: PDPA_START=0._EB,PDPA_END=1.E6_EB,PDPA_RADIUS=0.1_EB REAL(EB), ALLOCATABLE, DIMENSION(:) :: TABLE_ROW, V_FACTOR INTEGER :: PART_INDEX=-1,FLOW_RAMP_INDEX,SPRAY_PATTERN_INDEX,Z_INDEX=-999,Y_INDEX=-999,PRESSURE_RAMP_INDEX diff --git a/Source/dump.f90 b/Source/dump.f90 index 73a8552c0ff..b91fa870087 100644 --- a/Source/dump.f90 +++ b/Source/dump.f90 @@ -7316,7 +7316,7 @@ REAL(EB) RECURSIVE FUNCTION GAS_PHASE_OUTPUT(T,DT,NM,II,JJ,KK,IND,IND2,Y_INDEX,Z USE PHYSICAL_FUNCTIONS, ONLY: GET_MASS_FRACTION,FED,FIC,GET_SPECIFIC_HEAT,RELATIVE_HUMIDITY, & GET_CONDUCTIVITY,GET_MOLECULAR_WEIGHT,GET_MASS_FRACTION_ALL,GET_ENTHALPY,GET_SENSIBLE_ENTHALPY, & GET_VISCOSITY,GET_POTENTIAL_TEMPERATURE,GET_SPECIFIC_GAS_CONSTANT,& - SURFACE_DENSITY + SURFACE_DENSITY, CALC_EQUIV_RATIO USE COMP_FUNCTIONS, ONLY : CURRENT_TIME,SYSTEM_MEM_USAGE USE RADCONS, ONLY: WL_LOW, WL_HIGH, RADTMP USE RAD, ONLY: BLACKBODY_FRACTION @@ -7974,6 +7974,10 @@ REAL(EB) RECURSIVE FUNCTION GAS_PHASE_OUTPUT(T,DT,NM,II,JJ,KK,IND,IND2,Y_INDEX,Z GAS_PHASE_OUTPUT_RES = GAS_PHASE_OUTPUT_RES + & ZZ_GET(NS)*SPECIES_MIXTURE(NS)%ATOMS(ELEM_INDX)*ELEMENT(ELEM_INDX)%MASS/SPECIES_MIXTURE(NS)%MW ENDDO + CASE(145) ! EQUIVALENCE RATIO + ZZ_GET(1:N_TRACKED_SPECIES) = ZZ(II,JJ,KK,1:N_TRACKED_SPECIES) + GAS_PHASE_OUTPUT_RES = 0._EB + CALL CALC_EQUIV_RATIO(ZZ_GET(1:N_TRACKED_SPECIES), GAS_PHASE_OUTPUT_RES) CASE(150) ! SUM LUMPED VOLUME FRACTIONS ZZ_GET(1:N_TRACKED_SPECIES) = ZZ(II,JJ,KK,1:N_TRACKED_SPECIES) CALL GET_MOLECULAR_WEIGHT(ZZ_GET,MW) @@ -11609,10 +11613,10 @@ SUBROUTINE DUMP_CVODE_SUBSTEPS() DO COLI = 1, NCOLS IF (COLI == NCOLS) THEN ! Writing the last column without a trailing comma - WRITE(LU_CVODE_SUBSTEPS, '(F18.5)') CVODE_SUBSTEP_DATA(ROWI, COLI) + WRITE(LU_CVODE_SUBSTEPS, '(ES12.5)') CVODE_SUBSTEP_DATA(ROWI, COLI) ELSE ! Writing columns with commas - WRITE(LU_CVODE_SUBSTEPS, '(F18.5, A)', ADVANCE="NO") CVODE_SUBSTEP_DATA(ROWI, COLI), ',' + WRITE(LU_CVODE_SUBSTEPS, '(ES12.5, A)', ADVANCE="NO") CVODE_SUBSTEP_DATA(ROWI, COLI), ',' ENDIF ENDDO ENDDO diff --git a/Source/fire.f90 b/Source/fire.f90 index 4549e3f731d..a4b7069b225 100644 --- a/Source/fire.f90 +++ b/Source/fire.f90 @@ -53,7 +53,7 @@ SUBROUTINE COMBUSTION_LOAD_BALANCED(T,DT) ! Set CVODES options IF (.NOT. COMBUSTION_INIT) THEN COMBUSTION_INIT = .TRUE. - NVAR_TO_SEND = N_TRACKED_SPECIES +6 ! NS, TEMP, RHO, PRES, MU, DELTA, VOL + NVAR_TO_SEND = N_TRACKED_SPECIES +7 ! NS, TEMP, RHO, PRES, MU, DELTA, VOL, IGN_ZN NVAR_TO_RECEIVE = N_TRACKED_SPECIES +4 ! NS, Q_OUT, MIX_TIME_OUT, CHI_R_OUT, CHEM_SUBIT_TMP_OUT ENDIF @@ -107,6 +107,7 @@ SUBROUTINE COMBUSTION_GENERAL_LOAD_BALANCED(T,DT) TYPE (CC_CUTCELL_TYPE), POINTER :: CC LOGICAL :: IS_CHEM_ACTIVE REAL(EB) :: MIX_TIME_OUT, Q_OUT, CHI_R_OUT, MYTEMP, MYRHO, MYMU, DELTA, VOL, TNOW2 +INTEGER :: IGN_ZN Q_EXISTS = .FALSE. @@ -125,12 +126,13 @@ SUBROUTINE COMBUSTION_GENERAL_LOAD_BALANCED(T,DT) DO I=1,IBAR ZZ_GET = ZZ(I,J,K,1:N_TRACKED_SPECIES) PRES = PBAR(K,PRESSURE_ZONE(I,J,K)) + RHO(I,J,K)*(H(I,J,K)-KRES(I,J,K)) - CALL CHECK_CHEMICALLY_ACTIVE_STATE(ZZ_GET, TMP(I,J,K), I, J, K, .FALSE., IS_CHEM_ACTIVE) + CALL CHECK_CHEMICALLY_ACTIVE_STATE(ZZ_GET, TMP(I,J,K), I, J, K, .FALSE., IS_CHEM_ACTIVE, IGN_ZN) IF (STOP_STATUS/=NO_STOP) RETURN IF (.NOT. IS_CHEM_ACTIVE) CYCLE NCHEM_ACTIVE_CELLS_AND_CC = NCHEM_ACTIVE_CELLS_AND_CC + 1 NCHEM_ACTIVE_CELLS = NCHEM_ACTIVE_CELLS +1 CHEM_ACTIVE_CELLS(NCHEM_ACTIVE_CELLS,1:3)=[I, J ,K] + IF(IGN_ZN > 0) CHEM_ACTIVE_CELLS(NCHEM_ACTIVE_CELLS,4) = IGN_ZN ENDDO ENDDO ENDDO @@ -158,12 +160,13 @@ SUBROUTINE COMBUSTION_GENERAL_LOAD_BALANCED(T,DT) IF ( ABS(CUT_CELL(ICC)%VOLUME(JCC)/VCELL) < 1.E-12_EB ) CYCLE ZZ_GET = CUT_CELL(ICC)%ZZ(1:N_TRACKED_SPECIES,JCC) PRES = PBAR(K,PRESSURE_ZONE(I,J,K)) + RHO(I,J,K)*(H(I,J,K)-KRES(I,J,K)) - CALL CHECK_CHEMICALLY_ACTIVE_STATE(ZZ_GET, CUT_CELL(ICC)%TMP(JCC), I, J, K, .TRUE., IS_CHEM_ACTIVE) + CALL CHECK_CHEMICALLY_ACTIVE_STATE(ZZ_GET, CUT_CELL(ICC)%TMP(JCC), I, J, K, .TRUE., IS_CHEM_ACTIVE, IGN_ZN) IF (STOP_STATUS/=NO_STOP) RETURN IF (.NOT. IS_CHEM_ACTIVE) CYCLE NCHEM_ACTIVE_CELLS_AND_CC = NCHEM_ACTIVE_CELLS_AND_CC + 1 NCHEM_ACTIVE_CC = NCHEM_ACTIVE_CC +1 CHEM_ACTIVE_CC(NCHEM_ACTIVE_CC,1:2)=[ICC, JCC] + IF(IGN_ZN > 0) CHEM_ACTIVE_CC(NCHEM_ACTIVE_CC,3) = IGN_ZN ENDDO ENDDO ENDIF @@ -171,6 +174,8 @@ SUBROUTINE COMBUSTION_GENERAL_LOAD_BALANCED(T,DT) MESHES(NM)%NCHEM_ACTIVE_CC=NCHEM_ACTIVE_CC ENDDO + + !------ !STEP2: Solve chemistry by distributing the chemistry load accross all MPI processes for parallel runs. ! For 1 MPI process (serial) distribution is not needed. @@ -204,12 +209,12 @@ SUBROUTINE COMBUSTION_GENERAL_LOAD_BALANCED(T,DT) MYMU = REALS_TO_RECV_ARRAY(N_TRACKED_SPECIES+4,INDX) DELTA = REALS_TO_RECV_ARRAY(N_TRACKED_SPECIES+5,INDX) VOL = REALS_TO_RECV_ARRAY(N_TRACKED_SPECIES+6,INDX) - + IGN_ZN = INT(REALS_TO_RECV_ARRAY(N_TRACKED_SPECIES+7,INDX)) !*************************************************************************************** ! Call combustion integration routine for Cartesian cell (I,J,K) CALL COMBUSTION_MODEL( T,DT,ZZ_GET,Q_OUT,MIX_TIME_OUT,CHI_R_OUT,& CHEM_SUBIT_TMP_OUT,REAC_SOURCE_TERM_TMP,Q_REAC_TMP,& - MYTEMP,MYRHO,PRES,MYMU,DELTA,VOL,ZETA_0) + MYTEMP,MYRHO,PRES,MYMU,DELTA,VOL,ZETA_0,IGN_ZN) !*************************************************************************************** RESULTS_TO_SEND_ARRAY(1:N_TRACKED_SPECIES,INDX) = ZZ_GET @@ -249,6 +254,7 @@ SUBROUTINE COMBUSTION_GENERAL_LOAD_BALANCED(T,DT) DO NC=1,NCHEM_ACTIVE_CELLS I=CHEM_ACTIVE_CELLS(NC,1); J=CHEM_ACTIVE_CELLS(NC,2); K= CHEM_ACTIVE_CELLS(NC,3) + IGN_ZN=CHEM_ACTIVE_CELLS(NC,4) ZZ_GET = ZZ(I,J,K,1:N_TRACKED_SPECIES) PRES = PBAR(K,PRESSURE_ZONE(I,J,K)) + RHO(I,J,K)*(H(I,J,K)-KRES(I,J,K)) DZZ = ZZ_GET ! store old ZZ for divergence term @@ -257,7 +263,7 @@ SUBROUTINE COMBUSTION_GENERAL_LOAD_BALANCED(T,DT) CALL COMBUSTION_MODEL( T,DT,ZZ_GET,Q(I,J,K),MIX_TIME(I,J,K),CHI_R(I,J,K),& CHEM_SUBIT_TMP,REAC_SOURCE_TERM_TMP,Q_REAC_TMP,& TMP(I,J,K),RHO(I,J,K),PRES, MU(I,J,K),& - LES_FILTER_WIDTH(I,J,K),DX(I)*DY(J)*DZ(K),ZETA_0,IIC=I,JJC=J,KKC=K ) + LES_FILTER_WIDTH(I,J,K),DX(I)*DY(J)*DZ(K),ZETA_0,IGN_ZN,IIC=I,JJC=J,KKC=K ) !*************************************************************************************** !IF (STOP_STATUS/=NO_STOP) RETURN IF (OUTPUT_CHEM_IT) CHEM_SUBIT(I,J,K) = CHEM_SUBIT_TMP @@ -269,6 +275,7 @@ SUBROUTINE COMBUSTION_GENERAL_LOAD_BALANCED(T,DT) !$OMP DO SCHEDULE(DYNAMIC) DO NC=1,NCHEM_ACTIVE_CC ICC= CHEM_ACTIVE_CC(NC,1); JCC= CHEM_ACTIVE_CC(NC,2) + IGN_ZN=CHEM_ACTIVE_CC(NC,3) CC => CUT_CELL(ICC); I = CC%IJK(IAXIS); J = CC%IJK(JAXIS); K = CC%IJK(KAXIS) CC%CHI_R(JCC) = 0._EB ZZ_GET = CC%ZZ(1:N_TRACKED_SPECIES,JCC) @@ -281,7 +288,7 @@ SUBROUTINE COMBUSTION_GENERAL_LOAD_BALANCED(T,DT) CC%CHI_R(JCC),& CHEM_SUBIT_TMP,REAC_SOURCE_TERM_TMP,Q_REAC_TMP,& CC%TMP(JCC),CC%RHO(JCC),PRES,MU(I,J,K),& - LES_FILTER_WIDTH(I,J,K),CC%VOLUME(JCC),ZETA_0,IIC=I,JJC=J,KKC=K) + LES_FILTER_WIDTH(I,J,K),CC%VOLUME(JCC),ZETA_0,IGN_ZN,IIC=I,JJC=J,KKC=K) !*************************************************************************************** CALL SET_SPECIES_SOURCE_TERM_CUTCELL(DT, ICC, JCC, ZZ_GET, DZZ, REAC_SOURCE_TERM_TMP, Q_REAC_TMP) END DO @@ -349,27 +356,32 @@ SUBROUTINE CHECK_REACTION (ZZ_GET, DO_REACTION) END SUBROUTINE CHECK_REACTION -SUBROUTINE CHECK_CHEMICALLY_ACTIVE_STATE (ZZ_GET, TMP, I, J , K, IS_CUT_CELL, CHEM_ACTIVE) +SUBROUTINE CHECK_CHEMICALLY_ACTIVE_STATE (ZZ_GET, TMP, I, J , K, IS_CUT_CELL, CHEM_ACTIVE, IGN_ZN) +USE DEVICE_VARIABLES, ONLY: DEVICE USE PHYSICAL_FUNCTIONS, ONLY: IS_REALIZABLE, CALC_EQUIV_RATIO USE COMPLEX_GEOMETRY, ONLY : CC_CGSC, CC_GASPHASE -USE CHEMCONS, ONLY: EQUIV_RATIO_CHECK, MIN_EQUIV_RATIO, MAX_EQUIV_RATIO +USE CHEMCONS, ONLY: EQUIV_RATIO_CHECK,MIN_EQUIV_RATIO,MAX_EQUIV_RATIO,N_IGNITION_ZONES,IGNITION_ZONES,USE_MIXED_ZN_AFT_TMP + REAL(EB), INTENT(IN) :: ZZ_GET(1:N_TRACKED_SPECIES) REAL(EB), INTENT(IN) :: TMP INTEGER, INTENT(IN), OPTIONAL :: I, J, K LOGICAL, INTENT(IN) :: IS_CUT_CELL LOGICAL, INTENT(INOUT) :: CHEM_ACTIVE -LOGICAL :: DO_REACTION, REALIZABLE +INTEGER, INTENT(INOUT) :: IGN_ZN +LOGICAL :: DO_REACTION, REALIZABLE, LES_EQUIV_CHECK REAL(EB) :: EQUIV +INTEGER :: IZ CHEM_ACTIVE = .TRUE. +IGN_ZN = -1 +LES_EQUIV_CHECK = .FALSE. IF (CELL(CELL_INDEX(I,J,K))%SOLID) THEN CHEM_ACTIVE = .FALSE. RETURN ENDIF - IF (CC_IBM .AND. .NOT. IS_CUT_CELL) THEN ! Check if cell is regular gas phase cell, if not return. IF (CCVAR(I,J,K,CC_CGSC) /= CC_GASPHASE) THEN CHEM_ACTIVE = .FALSE. @@ -377,9 +389,42 @@ SUBROUTINE CHECK_CHEMICALLY_ACTIVE_STATE (ZZ_GET, TMP, I, J , K, IS_CUT_CELL, CH ENDIF ENDIF -IF (.NOT.ALL(REACTION%FAST_CHEMISTRY) .AND. TMP < FINITE_RATE_MIN_TEMP) THEN - CHEM_ACTIVE = .FALSE. - RETURN +IF (.NOT.ALL(REACTION%FAST_CHEMISTRY)) THEN + ! Check for ignition zones for detailed chemistry + IF (COMBUSTION_ODE_SOLVER==CVODE_SOLVER) THEN + IF (N_IGNITION_ZONES > 0) THEN + DO IZ=1,N_IGNITION_ZONES + IF (IGNITION_ZONES(IZ)%DEVC_INDEX>0) THEN + IF (.NOT.DEVICE(IGNITION_ZONES(IZ)%DEVC_INDEX)%CURRENT_STATE) THEN + CYCLE + ENDIF + ENDIF + IF (XC(I)>=IGNITION_ZONES(IZ)%X1 .AND. XC(I)<=IGNITION_ZONES(IZ)%X2 .AND. & + YC(J)>=IGNITION_ZONES(IZ)%Y1 .AND. YC(J)<=IGNITION_ZONES(IZ)%Y2 .AND. & + ZC(K)>=IGNITION_ZONES(IZ)%Z1 .AND. ZC(K)<=IGNITION_ZONES(IZ)%Z2) THEN + CALL CALC_EQUIV_RATIO(ZZ_GET(1:N_TRACKED_SPECIES), EQUIV) + ! No need to solve for no fuel (phi < MIN ) case and only fuel (phi is rich > MAX) case. + IF (EQUIV .GT. MIN_EQUIV_RATIO .AND. EQUIV .LT. MAX_EQUIV_RATIO) THEN + IGN_ZN = IZ + EXIT + ENDIF + ENDIF + ENDDO + ENDIF + ENDIF + + IF (IGN_ZN .LE. 0 .AND. SIM_MODE .NE. DNS_MODE .AND. USE_MIXED_ZN_AFT_TMP) THEN ! LES and other modes. Check equiv ratio + CALL CALC_EQUIV_RATIO(ZZ_GET(1:N_TRACKED_SPECIES), EQUIV) + ! No need to solve for no fuel (phi < MIN ) case and only fuel (phi is rich > MAX) case. + IF (EQUIV .GT. MIN_EQUIV_RATIO .AND. EQUIV .LT. MAX_EQUIV_RATIO) THEN + LES_EQUIV_CHECK = .TRUE. ! Chemically active + ENDIF + ENDIF + + IF (IGN_ZN .LE. 0 .AND. .NOT. LES_EQUIV_CHECK .AND. TMP < FINITE_RATE_MIN_TEMP) THEN + CHEM_ACTIVE = .FALSE. + RETURN + ENDIF ENDIF IF (CHECK_REALIZABILITY) THEN @@ -393,7 +438,6 @@ SUBROUTINE CHECK_CHEMICALLY_ACTIVE_STATE (ZZ_GET, TMP, I, J , K, IS_CUT_CELL, CH RETURN ENDIF ENDIF - CALL CHECK_REACTION (ZZ_GET, DO_REACTION) IF (.NOT.DO_REACTION) THEN CHEM_ACTIVE = .FALSE. @@ -408,7 +452,6 @@ SUBROUTINE CHECK_CHEMICALLY_ACTIVE_STATE (ZZ_GET, TMP, I, J , K, IS_CUT_CELL, CH RETURN ENDIF ENDIF - END SUBROUTINE CHECK_CHEMICALLY_ACTIVE_STATE @@ -566,6 +609,7 @@ SUBROUTINE DISTRIBUTE_CELLS_ACCROSS_MPI_PROCESSES (NRECEIVE_CELLS) REALS_TO_SEND_ARRAY(N_TRACKED_SPECIES+4,INDX) = MU(I,J,K) REALS_TO_SEND_ARRAY(N_TRACKED_SPECIES+5,INDX) = LES_FILTER_WIDTH(I,J,K) REALS_TO_SEND_ARRAY(N_TRACKED_SPECIES+6,INDX) = DX(I)*DY(J)*DZ(K) + REALS_TO_SEND_ARRAY(N_TRACKED_SPECIES+7,INDX) = REAL(CHEM_ACTIVE_CELLS(NC,4),EB) ! Is ignition zone RANK_TO=RANK_TO+1; IF(RANK_TO==N_MPI_PROCESSES+1) RANK_TO=1 ENDDO IF (CC_IBM) THEN @@ -587,6 +631,7 @@ SUBROUTINE DISTRIBUTE_CELLS_ACCROSS_MPI_PROCESSES (NRECEIVE_CELLS) REALS_TO_SEND_ARRAY(N_TRACKED_SPECIES+4,INDX) = MU(I,J,K) REALS_TO_SEND_ARRAY(N_TRACKED_SPECIES+5,INDX) = LES_FILTER_WIDTH(I,J,K) REALS_TO_SEND_ARRAY(N_TRACKED_SPECIES+6,INDX) = CC%VOLUME(JCC) + REALS_TO_SEND_ARRAY(N_TRACKED_SPECIES+7,INDX) = REAL(CHEM_ACTIVE_CC(NC,3),EB) RANK_TO=RANK_TO+1; IF(RANK_TO==N_MPI_PROCESSES+1) RANK_TO=1 ENDDO ENDIF @@ -715,11 +760,12 @@ END SUBROUTINE GATHER_CELLS_FROM_MPI_PROCESSES SUBROUTINE COMBUSTION_MODEL(T,DT,ZZ_GET,Q_OUT,MIX_TIME_OUT,CHI_R_OUT,CHEM_SUBIT_OUT,REAC_SOURCE_TERM_OUT,Q_REAC_OUT,& - TMP_IN,RHO_IN,PRES_IN,MU_IN,DELTA,CELL_VOLUME,ZETA_0_IN,IIC,JJC,KKC) + TMP_IN,RHO_IN,PRES_IN,MU_IN,DELTA,CELL_VOLUME,ZETA_0_IN,IGN_ZN,IIC,JJC,KKC) USE MATH_FUNCTIONS, ONLY: EVALUATE_RAMP USE PHYSICAL_FUNCTIONS, ONLY: GET_REALIZABLE_MF USE COMP_FUNCTIONS, ONLY: SHUTDOWN USE CHEMCONS, ONLY: ODE_MIN_ATOL +INTEGER, INTENT(IN) :: IGN_ZN INTEGER, INTENT(IN), OPTIONAL :: IIC,JJC,KKC REAL(EB), INTENT(IN) :: T,DT,RHO_IN,PRES_IN,MU_IN,DELTA,CELL_VOLUME,ZETA_0_IN REAL(EB), INTENT(OUT) :: Q_OUT,MIX_TIME_OUT,CHI_R_OUT,REAC_SOURCE_TERM_OUT(N_TRACKED_SPECIES),Q_REAC_OUT(N_REACTIONS) @@ -878,9 +924,9 @@ SUBROUTINE COMBUSTION_MODEL(T,DT,ZZ_GET,Q_OUT,MIX_TIME_OUT,CHI_R_OUT,CHEM_SUBIT_ DO NS =1,N_TRACKED_SPECIES ATOL(NS) = DBLE(SPECIES_MIXTURE(NS)%ODE_ABS_ERROR) ENDDO - IF (1==2) WRITE(LU_ERR,*) PRES_IN ! To avoid unused variable error. + IF (1==2) WRITE(LU_ERR,*) PRES_IN, IGN_ZN ! To avoid unused variable error. #ifdef WITH_SUNDIALS - CALL CVODE(ZZ_MIXED,TMP_IN,PRES_IN,ZETA_0, ZETA,TAU_MIX,CELL_MASS,T,DT_SUB,GLOBAL_ODE_REL_ERROR, ATOL) + CALL CVODE(ZZ_MIXED,TMP_IN,PRES_IN,ZETA_0, ZETA,TAU_MIX,CELL_MASS,IGN_ZN,T,DT_SUB,GLOBAL_ODE_REL_ERROR, ATOL) #endif ZETA_0 = ZETA Q_REAC_SUB = 0._EB @@ -923,6 +969,7 @@ SUBROUTINE COMBUSTION_MODEL(T,DT,ZZ_GET,Q_OUT,MIX_TIME_OUT,CHI_R_OUT,CHEM_SUBIT_ ENDDO INTEGRATION_LOOP + ! Compute heat release rate Q_OUT = -RHO_IN*SUM(SPECIES_MIXTURE%H_F*(ZZ_GET-ZZ_0))/DT ! FDS Tech Guide (5.47) @@ -989,27 +1036,45 @@ END SUBROUTINE COMBUSTION_MODEL !> \param ATOL is the absolute error tolerance array for the species (REAL_EB) #ifdef WITH_SUNDIALS -SUBROUTINE CVODE(ZZ, TMP_IN, PRES_IN, ZETA_IN, ZETA_OUT, TAU_MIX, CELL_MASS, T_CFD, DT, GLOBAL_ODE_REL_ERROR, ATOL) +SUBROUTINE CVODE(ZZ, TMP_IN, PRES_IN, ZETA_IN, ZETA_OUT, TAU_MIX, CELL_MASS, IGN_ZN, T_CFD, DT, GLOBAL_ODE_REL_ERROR, ATOL) USE PHYSICAL_FUNCTIONS, ONLY : GET_MOLECULAR_WEIGHT -USE CHEMCONS, ONLY: WRITE_CVODE_SUBSTEPS, MAX_CHEM_TIME - +USE CHEMCONS, ONLY: WRITE_CVODE_SUBSTEPS, ZETA_ARTIFICAL_MAX_LIMIT,ZETA_ARTIFICAL_MIN_LIMIT, ZETA_FIRST_STEP_DIV,& + USE_MIXED_ZN_AFT_TMP REAL(EB), INTENT(INOUT) :: ZZ(N_TRACKED_SPECIES) REAL(EB), INTENT(IN) :: ATOL(N_TRACKED_SPECIES) REAL(EB), INTENT(IN) :: TMP_IN,PRES_IN,ZETA_IN,TAU_MIX,CELL_MASS,T_CFD,DT,GLOBAL_ODE_REL_ERROR REAL(EB), INTENT(OUT) ::ZETA_OUT +INTEGER, INTENT(IN) :: IGN_ZN -REAL(EB) :: CC(N_TRACKED_SPECIES), CC_CHEM_TIME(N_TRACKED_SPECIES) -REAL(EB) :: MW, RHO_IN, RHO_OUT, T1, T2, ZETA0, TMP_IN_MOD, TMP_OUT, CHEM_TIME, DT_MOD +REAL(EB) :: CC(N_TRACKED_SPECIES), CC_CHEM_TIME(N_TRACKED_SPECIES), ZZ_IN(N_TRACKED_SPECIES) +REAL(EB) :: MW, RHO_IN, RHO_OUT, T1, T2, ZETA0, ZETA_IN_MOD, TMP_IN_MOD, TMP_OUT, & + CHEM_TIME, DT_MOD, ZETA_ARTF, ZETA_FINAL, ZETA_MAX_LIMIT, ZETA_MIN_LIMIT,AFT INTEGER :: NS, CVODE_CALL_OPTION -LOGICAL :: WRITE_SUBSTEPS +LOGICAL :: WRITE_SUBSTEPS, CALL_CHEM_AGAIN CVODE_CALL_OPTION = 1 ! CV_NORMAL WRITE_SUBSTEPS = .FALSE. DT_MOD = DT +ZETA_IN_MOD = ZETA_IN TMP_IN_MOD = TMP_IN +CALL_CHEM_AGAIN = .FALSE. + +IF(IGN_ZN > 0) THEN + CALL CALC_ADIABATIC_FLAME_TEMPERATURE(ZZ,TMP_IN,AFT) + TMP_IN_MOD = MAX(TMP_IN,AFT) + ZETA_IN_MOD = 0.0_EB +ELSE + IF (SIM_MODE .NE. DNS_MODE .AND. USE_MIXED_ZN_AFT_TMP) THEN + CALL CALC_ADIABATIC_FLAME_TEMPERATURE(ZZ,TMP_IN,AFT) + TMP_IN_MOD = MAX(TMP_IN,AFT) ! TO DO: Ideal would be a equilibrium temperature based on ZZ(:) and TMP_IN + ENDIF +ENDIF +ZETA_OUT = ZETA_IN_MOD*EXP(-DT/TAU_MIX) +IF(ZETA_OUT > ZETA_ARTIFICAL_MAX_LIMIT) RETURN ! The mixing can be ignored due to large mixing time. + CC = 0._EB -! Get the initial mass and concentration of mixed zone +! Calculate RHO based on actual temperrature, such that RHO and Concentration comes out to be same as in the cell. CALL GET_MOLECULAR_WEIGHT(ZZ,MW) RHO_IN = PRES_IN*MW/R0/TMP_IN ! [PR]= Pa, [MW] = g/mol, [R0]= J/K/kmol, [TMP]=K, [RHO]= kg/m3 DO NS =1,N_TRACKED_SPECIES @@ -1018,38 +1083,51 @@ SUBROUTINE CVODE(ZZ, TMP_IN, PRES_IN, ZETA_IN, ZETA_OUT, TAU_MIX, CELL_MASS, T_ WHERE(CC<0._EB) CC=0._EB ! Get the initial mass and concentration of mixed zone -IF(ZETA_IN > ONE_M_EPS) THEN +IF(ZETA_IN_MOD > ONE_M_EPS) THEN !With ZETA_IN =1 the CVODE ODE become too stiff to solve. Hence, performing negligible !artifical mixing based on a chemical time scale. - !1. First find a reasonable chemical time scale. - !2. Do cemistry on the chemical time scale - !3. Set the final zeta0 based on the chemical time + !1. Do cemistry and find a chemical time scale with a cvode call (one substep). + !2. Set the final zeta0 based on the chemical time T1 = 0._EB T2 = DT ZETA0 = 0._EB ! Assume completely mixed. CVODE_CALL_OPTION = 2 ! CV_ONE_STEP CUR_CFD_TIME = T_CFD ! Set current cfd time in cvode, for logging purpose. CC_CHEM_TIME(1:N_TRACKED_SPECIES)=CC(1:N_TRACKED_SPECIES) - CALL CVODE_SERIAL(CC_CHEM_TIME,ZZ, TMP_IN, PRES_IN, ZETA0, TAU_MIX, CELL_MASS, T1,T2, & + CALL CVODE_SERIAL(CC_CHEM_TIME,ZZ, TMP_IN_MOD, TMP_IN, PRES_IN, ZETA0, TAU_MIX, CELL_MASS, T1,T2, & GLOBAL_ODE_REL_ERROR, ATOL, TMP_OUT, CHEM_TIME, WRITE_SUBSTEPS, CVODE_CALL_OPTION) ! Find the chem time scale - IF (CHEM_TIME > MAX_CHEM_TIME) THEN ! Limit artifical mixing. + ! Check 1) too much artificial mixing (low zeta after first step) or + ! 2) too little mixing (high zeta after first step) to avoid steep problem in cvode. + ZETA_ARTF = ZETA_IN_MOD*EXP(-CHEM_TIME/TAU_MIX) ! Zeta after CHEM_TIME + ZETA_FINAL = ZETA_IN_MOD*EXP(-DT/ZETA_FIRST_STEP_DIV/TAU_MIX) ! Allowed final zeta after artifical mixing substep + ZETA_MIN_LIMIT = MAX(ZETA_FINAL,ZETA_ARTIFICAL_MIN_LIMIT) + ZETA_MAX_LIMIT = MAX(ZETA_FINAL,ZETA_ARTIFICAL_MAX_LIMIT) + IF (ZETA_ARTF < ZETA_MIN_LIMIT) THEN ! Limit too much artifical mixing to ZETA_ARTIFICAL_MAX_LIMIT. + T2 = TAU_MIX*(LOG(ZETA_IN_MOD) - LOG(ZETA_MIN_LIMIT)) + CALL_CHEM_AGAIN = .TRUE. + ELSEIF (ZETA_ARTF > ZETA_MAX_LIMIT) THEN ! Check too liitle mixing, then make little more mixing such + ! that cvode is not stiff in subsequent calls. + T2 = TAU_MIX*(LOG(ZETA_IN_MOD) - LOG(ZETA_MAX_LIMIT)) + CALL_CHEM_AGAIN = .TRUE. + ENDIF + + IF (CALL_CHEM_AGAIN) THEN T1 = 0._EB - T2 = MAX_CHEM_TIME + !T2 = T2 !Set above ZETA0 = 0._EB ! Assume completely mixed. CVODE_CALL_OPTION = 1 ! CV_NORMAL CUR_CFD_TIME = T_CFD ! Set current cfd time in cvode, for logging purpose. - CALL CVODE_SERIAL(CC,ZZ, TMP_IN, PRES_IN, ZETA0, TAU_MIX, CELL_MASS, T1,T2, & + CALL CVODE_SERIAL(CC,ZZ, TMP_IN_MOD, TMP_IN, PRES_IN, ZETA0, TAU_MIX, CELL_MASS, T1,T2, & GLOBAL_ODE_REL_ERROR, ATOL, TMP_OUT, CHEM_TIME, WRITE_SUBSTEPS, CVODE_CALL_OPTION) - CHEM_TIME = MAX_CHEM_TIME + CHEM_TIME = T2 ELSE CC(1:N_TRACKED_SPECIES)=CC_CHEM_TIME(1:N_TRACKED_SPECIES) ENDIF TMP_IN_MOD = TMP_OUT - ZETA0 = ZETA_IN*EXP(-CHEM_TIME/TAU_MIX) - !WRITE(LU_ERR,*)"T_CFD,TMP_IN, TMP_OUT=",T_CFD,TMP_IN, TMP_OUT + ZETA0 = ZETA_IN_MOD*EXP(-CHEM_TIME/TAU_MIX) DT_MOD = DT_MOD - CHEM_TIME ELSE - ZETA0 = ZETA_IN + ZETA0 = ZETA_IN_MOD ENDIF CVODE_CALL_OPTION = 1 @@ -1062,18 +1140,97 @@ SUBROUTINE CVODE(ZZ, TMP_IN, PRES_IN, ZETA_IN, ZETA_OUT, TAU_MIX, CELL_MASS, T_ T1 = 0._EB T2 = DT_MOD CUR_CFD_TIME = T_CFD ! Set current cfd time in cvode, for logging purpose. -CALL CVODE_SERIAL(CC,ZZ, TMP_IN_MOD, PRES_IN, ZETA0, TAU_MIX, CELL_MASS, T1,T2, GLOBAL_ODE_REL_ERROR, ATOL, & +ZZ_IN = ZZ +CALL CVODE_SERIAL(CC,ZZ, TMP_IN_MOD, TMP_IN, PRES_IN, ZETA0, TAU_MIX, CELL_MASS, T1,T2, GLOBAL_ODE_REL_ERROR, ATOL, & TMP_OUT, CHEM_TIME, WRITE_SUBSTEPS, CVODE_CALL_OPTION) + + ! Convert back to mass fraction (Check for negative concentration) WHERE(CC<0._EB) CC=0._EB ZZ(1:N_TRACKED_SPECIES) = CC(1:N_TRACKED_SPECIES)*SPECIES_MIXTURE(1:N_TRACKED_SPECIES)%MW RHO_OUT = SUM(ZZ) -ZZ = ZZ/RHO_OUT - -ZETA_OUT = ZETA_IN*EXP(-DT/TAU_MIX) +ZZ = ZZ/(RHO_OUT+TWO_EPSILON_EB) END SUBROUTINE CVODE + +!> \brief Constant pressure adiabatic flame temperature calculation +!> \param ZZ species mass fraction array +!> \param TMP_IN is the temperature +!> \param AFT is the adiabatic flame temperature (output) +SUBROUTINE CALC_ADIABATIC_FLAME_TEMPERATURE(ZZ,TMP_IN,AFT) +USE PHYSICAL_FUNCTIONS, ONLY: CALC_EQUIV_RATIO,GET_ENTHALPY,GET_SPECIFIC_HEAT,GET_TEMPERATURE +USE CHEMCONS, ONLY: I_FUEL +REAL(EB), INTENT(INOUT) :: ZZ(N_TRACKED_SPECIES) +REAL(EB), INTENT(IN) :: TMP_IN +REAL(EB), INTENT(OUT) :: AFT +REAL(EB) :: ZZ_REAC(N_TRACKED_SPECIES),ZZ_PROD(N_TRACKED_SPECIES) +REAL(EB) :: HS_IN + +IF (I_FUEL <= 0) THEN ! No FUEL_ID_FOR_AFT specified. + AFT = TMP_IN + RETURN +ENDIF +CALL CALC_AFT_REAC_AND_PROD(ZZ,ZZ_REAC,ZZ_PROD) +CALL GET_ENTHALPY(ZZ,HS_IN,TMP_IN) +AFT = TMP_IN +CALL GET_TEMPERATURE(AFT,HS_IN,ZZ_PROD) + +END SUBROUTINE CALC_ADIABATIC_FLAME_TEMPERATURE + +! Calculate Reactants and products +SUBROUTINE CALC_AFT_REAC_AND_PROD(ZZ,ZZ_REAC,ZZ_PROD) +USE PHYSICAL_FUNCTIONS, ONLY: CALC_EQUIV_RATIO +USE CHEMCONS, ONLY: I_FUEL,I_CO2,I_H2O,I_O2,I_N2 +REAL(EB), INTENT(IN) :: ZZ(N_TRACKED_SPECIES) +REAL(EB), INTENT(OUT) :: ZZ_REAC(N_TRACKED_SPECIES),ZZ_PROD(N_TRACKED_SPECIES) +REAL(EB) :: EQUIV, X,Y,Z,A,B,C,D,E, SUM_ZZ + + +CALL CALC_EQUIV_RATIO(ZZ(1:N_TRACKED_SPECIES), EQUIV) + +! Based on CxHyOz + a(O2+3.76N2) = bCO2 + cH2O + dCxHyOz + eO2 + 3.76aN2 +X=SPECIES_MIXTURE(I_FUEL)%ATOMS(6) !C +Y=SPECIES_MIXTURE(I_FUEL)%ATOMS(1) !H +Z=SPECIES_MIXTURE(I_FUEL)%ATOMS(8) !O +A=0.5_EB*((2.0_EB*X+0.5_EB*Y)/EQUIV -Z) +IF(ABS(EQUIV - 1.0_EB) <1E-3_EB) THEN ! Stoich + B = X + C = 0.5_EB*Y + D = 0._EB ! No fuel + E = 0._EB ! No O2 +ELSEIF (EQUIV > 1) THEN ! Rich + D = (2.0_EB*X+0.5_EB*Y-2.0_EB*A-Z)/(2.0_EB*X+0.5_EB*Y-Z) + B = (1._EB-D)*X + C = 0.5_EB*(1._EB-D)*Y + E = 0._EB ! No O2 +ELSE !EQUIV < 1, Lean + B = X + C = 0.5_EB*Y + D = 0._EB ! No fuel + E = A + 0.5*Z - B - 0.5_EB*C +ENDIF + +! Setup reactants +ZZ_REAC = 0.0_EB +ZZ_REAC(I_FUEL)=1._EB*SPECIES_MIXTURE(I_FUEL)%MW +ZZ_REAC(I_O2)=A*SPECIES_MIXTURE(I_O2)%MW +ZZ_REAC(I_N2)=3.76*A*SPECIES_MIXTURE(I_N2)%MW +SUM_ZZ=SUM(ZZ_REAC) +ZZ_REAC = ZZ_REAC/SUM_ZZ + +! Setup products +ZZ_PROD = 0.0_EB +ZZ_PROD(I_CO2)=B*SPECIES_MIXTURE(I_CO2)%MW +ZZ_PROD(I_H2O)=C*SPECIES_MIXTURE(I_H2O)%MW +ZZ_PROD(I_FUEL)=D*SPECIES_MIXTURE(I_FUEL)%MW +ZZ_PROD(I_O2)=E*SPECIES_MIXTURE(I_O2)%MW +ZZ_PROD(I_N2)=3.76_EB*A*SPECIES_MIXTURE(I_N2)%MW +SUM_ZZ=SUM(ZZ_PROD) +ZZ_PROD = ZZ_PROD/SUM_ZZ + + +END SUBROUTINE CALC_AFT_REAC_AND_PROD #endif SUBROUTINE CHECK_AUTO_IGNITION(EXTINCT,TMP_IN,AIT,IIC,JJC,KKC,REAC_INDEX) diff --git a/Source/func.f90 b/Source/func.f90 index 1ebd323d2b4..75fc1ac6597 100644 --- a/Source/func.f90 +++ b/Source/func.f90 @@ -2178,8 +2178,10 @@ SUBROUTINE CALC_EQUIV_RATIO (ZZ, EQUIV) DENOM = DENOM + ZZ(NS)*SPECIES_MIXTURE(NS)%OXA ENDDO -IF (DENOM < TWO_EPSILON_EB) THEN +IF (NUMER .LE. 0.0_EB) THEN EQUIV= 0._EB; +ELSEIF (DENOM .LE. 0.0_EB) THEN + EQUIV= 1000._EB; ! Set a high value ELSE EQUIV = NUMER/ DENOM; ENDIF diff --git a/Source/geom.f90 b/Source/geom.f90 index ea1207b23d7..216af77f507 100644 --- a/Source/geom.f90 +++ b/Source/geom.f90 @@ -1746,7 +1746,7 @@ SUBROUTINE SET_CUTCELLS_3D DO ICC=1,M%N_CUTCELL_MESH SUM_CC = SUM_CC + CC%NCELL ENDDO - ALLOCATE(M%CHEM_ACTIVE_CC(SUM_CC,2)) + ALLOCATE(M%CHEM_ACTIVE_CC(SUM_CC,3)) M%CHEM_ACTIVE_CC=-1 ENDDO MAIN_MESH_LOOP_4 diff --git a/Source/init.f90 b/Source/init.f90 index a9e56f9289d..bfc0108a179 100644 --- a/Source/init.f90 +++ b/Source/init.f90 @@ -572,7 +572,7 @@ SUBROUTINE INITIALIZE_MESH_VARIABLES_1(DT,NM) ALLOCATE(M%CHEM_SUBIT(0:IBP1,0:JBP1,0:KBP1),STAT=IZERO) ; CALL ChkMemErr('INIT','CHEM_SUBIT',IZERO) ; M%CHEM_SUBIT=0._EB ENDIF -ALLOCATE(M%CHEM_ACTIVE_CELLS(IBP1*JBP1*KBP1,3),STAT=IZERO) ; CALL ChkMemErr('INIT','CHEM_ACTIVE_CELLS',IZERO) +ALLOCATE(M%CHEM_ACTIVE_CELLS(IBP1*JBP1*KBP1,4),STAT=IZERO) ; CALL ChkMemErr('INIT','CHEM_ACTIVE_CELLS',IZERO) M%CHEM_ACTIVE_CELLS=-1 ALLOCATE(M%Q(0:IBP1,0:JBP1,0:KBP1),STAT=IZERO) ; CALL ChkMemErr('INIT','Q',IZERO) diff --git a/Source/mesh.f90 b/Source/mesh.f90 index 70b59efec43..938cd3ee08e 100644 --- a/Source/mesh.f90 +++ b/Source/mesh.f90 @@ -53,8 +53,8 @@ MODULE MESH_VARIABLES REAL(EB), ALLOCATABLE, DIMENSION(:,:,:) :: D_SOURCE!< Source terms in the expression for the divergence REAL(EB), ALLOCATABLE, DIMENSION(:,:,:) :: CSD2 !< \f$ C_s \Delta^2 \f$ in Smagorinsky turbulence expression REAL(EB), ALLOCATABLE, DIMENSION(:,:,:) :: CHEM_SUBIT !< Number of chemistry sub-iterations - INTEGER, ALLOCATABLE, DIMENSION(:,:) :: CHEM_ACTIVE_CELLS !< I , J ,K info of chemically active cells. - INTEGER, ALLOCATABLE, DIMENSION(:,:) :: CHEM_ACTIVE_CC !< ICC, JCC of chemically active cells. + INTEGER, ALLOCATABLE, DIMENSION(:,:) :: CHEM_ACTIVE_CELLS !< I , J ,K, igntion_zone info of chemically active cells. + INTEGER, ALLOCATABLE, DIMENSION(:,:) :: CHEM_ACTIVE_CC !< ICC, JCC, igntion_zone of chemically active cells. REAL(EB), ALLOCATABLE, DIMENSION(:,:,:) :: MIX_TIME !< Mixing-controlled combustion reaction time (s) REAL(EB), ALLOCATABLE, DIMENSION(:,:,:) :: STRAIN_RATE !< Strain rate \f$ |S|_{ijk} \f$ (1/s) REAL(EB), ALLOCATABLE, DIMENSION(:,:,:) :: D_Z_MAX !< \f$ \max D_\alpha \f$ diff --git a/Source/prec.f90 b/Source/prec.f90 index babd4e30025..6ee009db3f0 100644 --- a/Source/prec.f90 +++ b/Source/prec.f90 @@ -21,6 +21,7 @@ MODULE PRECISION_PARAMETERS INTEGER, PARAMETER :: MAX_INPUT_ID=40 !< Maximum number of CTRL INPUT_IDs INTEGER, PARAMETER :: N_ZONE_POINTS=100 !< Maximum number of declared ZONE points (deprecated) INTEGER, PARAMETER :: MAX_AIT_EXCLUSION_ZONES=10 !< Maximum number of AUTO_IGNITION_TEMPERATURE exclusion zones +INTEGER, PARAMETER :: MAX_IGNITION_ZONES=10 !< Maximum number of Ignition zones INTEGER, PARAMETER :: SMOKEVIEW_OBJECTS_DIMENSION=20 !< Number of parameters that can be passed to Smokeview to describe objects INTEGER, PARAMETER :: LABEL_LENGTH=60 !< Maximum length of most labels INTEGER, PARAMETER :: MESSAGE_LENGTH=200 !< Maximum length of error and warning labels diff --git a/Source/read.f90 b/Source/read.f90 index 99d123dfab4..de2085573d9 100644 --- a/Source/read.f90 +++ b/Source/read.f90 @@ -3434,8 +3434,21 @@ SUBROUTINE READ_SPEC ENDDO DO N1 = 1, N_TRACKED_SPECIES - SPECIES_MIXTURE(N1)%OXR = 2*(SPECIES_MIXTURE(N1)%ATOMS(1) * 0.25_EB + SPECIES_MIXTURE(N1)%ATOMS(6)) & - * ELEMENT(8)%MASS / SPECIES_MIXTURE(N1)%MW + SPECIES_MIXTURE(N1)%OXR = (SPECIES_MIXTURE(N1)%ATOMS(1) * 0.5_EB + & ! H (H2O) + SPECIES_MIXTURE(N1)%ATOMS(6) * 2.0_EB + & ! C (CO2) + SPECIES_MIXTURE(N1)%ATOMS(16) * 2.0_EB + & ! S (SO2) + SPECIES_MIXTURE(N1)%ATOMS(15) * 2.5_EB + & ! P (P4O10) + SPECIES_MIXTURE(N1)%ATOMS(26) * 1.5_EB + & ! Fe (Fe2O3) + SPECIES_MIXTURE(N1)%ATOMS(13) * 1.5_EB + & ! Al (Al2O3) + SPECIES_MIXTURE(N1)%ATOMS(14) * 2.0_EB + & ! Si (SiO2) + SPECIES_MIXTURE(N1)%ATOMS(22) * 2.0_EB + & ! Ti (TiO2) + SPECIES_MIXTURE(N1)%ATOMS(29) * 1.0_EB + & ! Cu (CuO) + SPECIES_MIXTURE(N1)%ATOMS(30) * 1.0_EB + & ! Zn (ZnO) + SPECIES_MIXTURE(N1)%ATOMS(11) * 0.5_EB + & ! Na (Na2O) + SPECIES_MIXTURE(N1)%ATOMS(19) * 0.5_EB + & ! K (K2O) + SPECIES_MIXTURE(N1)%ATOMS(20) * 1.0_EB ) & ! Ca (CaO) + * ELEMENT(8)%MASS / SPECIES_MIXTURE(N1)%MW + SPECIES_MIXTURE(N1)%OXA = SPECIES_MIXTURE(N1)%ATOMS(8) * ELEMENT(8)%MASS / SPECIES_MIXTURE(N1)%MW ENDDO @@ -4493,14 +4506,15 @@ END SUBROUTINE PROC_SPEC_2 !> \brief Read the COMBustion namelist line SUBROUTINE READ_COMB -USE CHEMCONS, ONLY: ODE_MIN_ATOL, EQUIV_RATIO_CHECK, MIN_EQUIV_RATIO, MAX_EQUIV_RATIO, DO_CHEM_LOAD_BALANCE +USE CHEMCONS, ONLY: ODE_MIN_ATOL, EQUIV_RATIO_CHECK, MIN_EQUIV_RATIO, MAX_EQUIV_RATIO, DO_CHEM_LOAD_BALANCE, & + FUEL_ID_FOR_AFT,USE_MIXED_ZN_AFT_TMP REAL(EB) :: ODE_REL_ERROR CHARACTER(LABEL_LENGTH) :: RAMP_ZETA_0='null' NAMELIST /COMB/ CHECK_REALIZABILITY,COMPUTE_ADIABATIC_FLAME_TEMPERATURE, DO_CHEM_LOAD_BALANCE, EQUIV_RATIO_CHECK, & - EXTINCTION_MODEL,FINITE_RATE_MIN_TEMP, FIXED_MIX_TIME,FREE_BURN_TEMPERATURE,& - INITIAL_UNMIXED_FRACTION, MAX_CHEMISTRY_SUBSTEPS, MAX_EQUIV_RATIO, MIN_EQUIV_RATIO, & + EXTINCTION_MODEL,FINITE_RATE_MIN_TEMP, FIXED_MIX_TIME,FREE_BURN_TEMPERATURE, & + FUEL_ID_FOR_AFT,INITIAL_UNMIXED_FRACTION, MAX_CHEMISTRY_SUBSTEPS, MAX_EQUIV_RATIO, MIN_EQUIV_RATIO, & N_FIXED_CHEMISTRY_SUBSTEPS, ODE_MIN_ATOL,ODE_REL_ERROR,ODE_SOLVER,SUPPRESSION,TAU_CHEM, & - TAU_FLAME,RAMP_ZETA_0,ZZ_MIN_GLOBAL + TAU_FLAME,RAMP_ZETA_0,USE_MIXED_ZN_AFT_TMP,ZZ_MIN_GLOBAL ODE_SOLVER = 'null' ODE_REL_ERROR = -1._EB @@ -4530,6 +4544,13 @@ SUBROUTINE READ_COMB 26 IF (IOS>0) THEN ; CALL SHUTDOWN('ERROR(101): Problem with COMB line.') ; RETURN ; ENDIF ENDDO COMB_LOOP2 25 REWIND(LU_INPUT) ; INPUT_FILE_LINE_NUMBER = 0 + IF(USE_MIXED_ZN_AFT_TMP) THEN + IF (TRIM(FUEL_ID_FOR_AFT) == 'null') THEN + WRITE(MESSAGE,'(A)') 'ERROR(*): FUEL_ID_FOR_AFT must be specified when USE_MIXED_ZN_AFT_TMP is true (default).' & + // NEW_LINE('A') // 'Either set USE_MIXED_ZN_AFT_TMP=FALSE, or provide FUEL_ID_FOR_AFT in the COMB line.' + CALL SHUTDOWN(MESSAGE) ; RETURN + ENDIF + ENDIF ENDIF ! Extinction Model @@ -4554,6 +4575,8 @@ SUBROUTINE READ_COMB ENDIF ENDIF + + FINITE_RATE_MIN_TEMP = FINITE_RATE_MIN_TEMP + TMPM ! Convert C to K for EXTINCTION 1 temperature cut-off @@ -5069,7 +5092,7 @@ END SUBROUTINE READ_REAC SUBROUTINE PROC_REAC_1 -USE CHEMCONS, ONLY: YP2ZZ, IS_EXPONENT_LT_1 +USE CHEMCONS, ONLY: YP2ZZ,IS_EXPONENT_LT_1,FUEL_ID_FOR_AFT,I_FUEL,I_CO2,I_H2O,I_O2,I_N2 USE PROPERTY_DATA, ONLY : PARSE_EQUATION, SHUTDOWN_ATOM REAL(EB) :: MASS_PRODUCT,MASS_REACTANT,REACTION_BALANCE(118),NU_Y(N_SPECIES) INTEGER :: NS,NS2, NR @@ -5507,6 +5530,30 @@ SUBROUTINE PROC_REAC_1 DZZ_CLIP = ZZ_MIN_GLOBAL * GLOBAL_ODE_REL_ERROR ENDIF +! Compute the index of key species for adiabatic flame temperature calculation. +IF(TRIM(ODE_SOLVER)=='CVODE') THEN + I_FUEL = -1 + I_O2 = -1 + I_N2 = -1 + I_CO2 = -1 + I_H2O = -1 + + DO NS=1,N_TRACKED_SPECIES + IF(TRIM(FUEL_ID_FOR_AFT)==TRIM(SPECIES_MIXTURE(NS)%ID) .OR. TRIM(FUEL_ID_FOR_AFT)==TRIM(SPECIES_MIXTURE(NS)%ALT_ID)) THEN + I_FUEL = NS + ELSEIF(TRIM(SPECIES_MIXTURE(NS)%ID) == "O2" .OR. TRIM(SPECIES_MIXTURE(NS)%ID) == "OXYGEN") THEN + I_O2 = NS + ELSEIF(TRIM(SPECIES_MIXTURE(NS)%ID) == "N2" .OR. TRIM(SPECIES_MIXTURE(NS)%ID) == "NITROGEN") THEN + I_N2 = NS + ELSEIF(TRIM(SPECIES_MIXTURE(NS)%ID) == "CO2" .OR. TRIM(SPECIES_MIXTURE(NS)%ID) == "CARBON DIOXIDE") THEN + I_CO2 = NS + ELSEIF(TRIM(SPECIES_MIXTURE(NS)%ID) == "H2O" .OR. TRIM(SPECIES_MIXTURE(NS)%ID) == "WATER VAPOR") THEN + I_H2O = NS + ENDIF + ENDDO + +ENDIF + END SUBROUTINE PROC_REAC_1 @@ -6486,9 +6533,10 @@ SUBROUTINE READ_PROP C_FACTOR,CHARACTERISTIC_VELOCITY,ORIFICE_DIAMETER,EMISSIVITY, & PARTICLE_VELOCITY,FLOW_RATE,FLOW_TAU,GAUGE_EMISSIVITY,GAUGE_TEMPERATURE,INITIAL_TEMPERATURE,K_FACTOR,& LENGTH,SPRAY_ANGLE(2,2),OFFSET,OPERATING_PRESSURE,RTI,PDPA_START,PDPA_END,PDPA_RADIUS,MASS_FLOW_RATE,& - SPRAY_PATTERN_MU,SPRAY_PATTERN_BETA,HISTOGRAM_LIMITS(2),P0,PX(3),PXX(3,3),TIME_CONSTANT,VIEW_ANGLE,PROBE_DIAMETER + SPRAY_PATTERN_MU,SPRAY_PATTERN_BETA,HISTOGRAM_LIMITS(2),P0,PX(3),PXX(3,3),TIME_CONSTANT,VIEW_ANGLE, & + PROBE_DIAMETER INTEGER ::I,N,NN,PDPA_M,PDPA_N,PARTICLES_PER_SECOND,VELOCITY_COMPONENT,HISTOGRAM_NBINS,FED_ACTIVITY -LOGICAL :: PDPA_INTEGRATE,PDPA_NORMALIZE,HISTOGRAM_NORMALIZE,HISTOGRAM,HISTOGRAM_CUMULATIVE,SPARK,TC +LOGICAL :: PDPA_INTEGRATE,PDPA_NORMALIZE,HISTOGRAM_NORMALIZE,HISTOGRAM,HISTOGRAM_CUMULATIVE,SPARK,TC,IGNITION_ZONE CHARACTER(LABEL_LENGTH) :: SMOKEVIEW_ID(SMOKEVIEW_OBJECTS_DIMENSION),QUANTITY='null',PART_ID='null',FLOW_RAMP='null', & SPRAY_PATTERN_TABLE='null',SPEC_ID='null',& PRESSURE_RAMP='null',SMOKEVIEW_PARAMETERS(SMOKEVIEW_OBJECTS_DIMENSION), & @@ -6498,7 +6546,7 @@ SUBROUTINE READ_PROP NAMELIST /PROP/ ACTIVATION_OBSCURATION,ACTIVATION_TEMPERATURE,ALPHA_C,ALPHA_E,BETA_C,BETA_E,CALIBRATION_CONSTANT,& CHARACTERISTIC_VELOCITY,C_FACTOR,DENSITY,DIAMETER,EMISSIVITY,FED_ACTIVITY,FLOW_RAMP,FLOW_RATE,FLOW_TAU, & GAUGE_EMISSIVITY,GAUGE_TEMPERATURE,HEAT_TRANSFER_COEFFICIENT,HISTOGRAM,HISTOGRAM_CUMULATIVE, & - HISTOGRAM_LIMITS,HISTOGRAM_NBINS,HISTOGRAM_NORMALIZE,ID, & + HISTOGRAM_LIMITS,HISTOGRAM_NBINS,HISTOGRAM_NORMALIZE,ID, IGNITION_ZONE, & INITIAL_TEMPERATURE,K_FACTOR,LENGTH,MASS_FLOW_RATE,OFFSET,OPERATING_PRESSURE,ORIFICE_DIAMETER,P0,& PARTICLES_PER_SECOND,PARTICLE_VELOCITY,PART_ID,PDPA_END,& PDPA_INTEGRATE,PDPA_M,PDPA_N,PDPA_NORMALIZE,PDPA_RADIUS,& @@ -6596,6 +6644,7 @@ SUBROUTINE READ_PROP IF (PY%SMOKEVIEW_PARAMETERS(I)/='null') PY%N_SMOKEVIEW_PARAMETERS = PY%N_SMOKEVIEW_PARAMETERS + 1 ENDDO PY%SPARK = SPARK + PY%IGNITION_ZONE = IGNITION_ZONE PY%SPEC_ID = SPEC_ID IF (PART_ID/='null' .AND. SPRAY_PATTERN_TABLE /= 'null') THEN CALL GET_TABLE_INDEX(SPRAY_PATTERN_TABLE,SPRAY_PATTERN,PY%SPRAY_PATTERN_INDEX) @@ -6840,6 +6889,7 @@ SUBROUTINE SET_PROP_DEFAULTS SMOKEVIEW_ID = 'null' SMOKEVIEW_PARAMETERS = 'null' SPARK = .FALSE. +IGNITION_ZONE = .FALSE. SPEC_ID = 'null' SPRAY_ANGLE(1,1) = 60._EB ! degrees SPRAY_ANGLE(2,1) = 75._EB ! degrees @@ -9390,6 +9440,7 @@ SUBROUTINE PROC_SURF_2 CALL SHUTDOWN(MESSAGE) ; RETURN ENDIF SF%MASS_FLUX(NS) = SF%MASS_FRACTION(NS)*RN%HOC_COMPLETE + WRITE(LU_ERR,*)"RN%HOC_COMPLETE=",RN%HOC_COMPLETE FUEL_MF = FUEL_MF + SF%MASS_FRACTION(NS) ENDIF ENDIF @@ -9413,6 +9464,7 @@ SUBROUTINE PROC_SURF_2 ELSE RN => REACTION(1) SF%MASS_FLUX(RN%FUEL_SMIX_INDEX) = SF%HRRPUA/RN%HOC_COMPLETE + WRITE(LU_ERR,*)"1 RN%HOC_COMPLETE=",RN%HOC_COMPLETE IF (SF%N_LAYERS > 0 .AND. SF%THERMAL_BC_INDEX==THERMALLY_THICK) THEN IF (MATERIAL(SF%MATL_INDEX(1))%HEAT_OF_COMBUSTION(1,1) > 0._EB) & SF%M_DOT_G_PP_ACTUAL_FAC = RN%HOC_COMPLETE / MATERIAL(SF%MATL_INDEX(1))%HEAT_OF_COMBUSTION(1,1) @@ -13474,7 +13526,7 @@ END SUBROUTINE READ_ZONE SUBROUTINE READ_DEVC USE DEVICE_VARIABLES, ONLY: DEVICE_TYPE,SUBDEVICE_TYPE,DEVICE,N_DEVC,N_DEVC_TIME,N_DEVC_LINE,MAX_DEVC_LINE_POINTS,& - DEVC_PIPE_OPERATING + DEVC_PIPE_OPERATING, PROPERTY USE GEOMETRY_FUNCTIONS, ONLY: TRANSFORM_COORDINATES,SEARCH_OTHER_MESHES INTEGER :: N,NN,NM,MESH_NUMBER=0,N_DEVC_READ,IOR,TRIP_DIRECTION,VELO_INDEX,POINTS,I_POINT,PIPE_INDEX,ORIENTATION_INDEX, & N_INTERVALS,MOVE_INDEX,IIG,JJG,KKG,NOM,ERROR_CODE,LP_TAG @@ -13499,6 +13551,7 @@ SUBROUTINE READ_DEVC TIME_AVERAGED,TIME_HISTORY,TIME_PERIOD,TRIP_DIRECTION,UNITS,VELO_INDEX,XB,XBP,XYZ,X_ID,Y_ID,Z_ID,XYZ_UNITS INTEGER, ALLOCATABLE, DIMENSION(:,:) :: MESH_DEVICE_ARRAY INTEGER, ALLOCATABLE, DIMENSION(:) :: MESH_DEVICE +INTEGER :: PROP_INDEX ! Read the input file and count the number of DEVC lines @@ -13506,6 +13559,7 @@ SUBROUTINE READ_DEVC N_DEVC_READ = 0 N_DEVC_TIME = 0 N_DEVC_LINE = 0 +PROP_INDEX = -1 REWIND(LU_INPUT) ; INPUT_FILE_LINE_NUMBER = 0 COUNT_DEVC_LOOP: DO @@ -13613,6 +13667,11 @@ SUBROUTINE READ_DEVC .OR. QUANTITY=='LAYER HEIGHT' .OR. QUANTITY=='UPPER TEMPERATURE' .OR. QUANTITY=='LOWER TEMPERATURE') XB_XYZ= .FALSE. IF (CTRL_ID/='null' .OR. DEVC_ID/='null' .OR. DUCT_ID/='null' .OR. NODE_ID(1)/='null' .OR. INIT_ID/='null') XB_XYZ= .FALSE. IF (SPATIAL_STATISTIC/='null' .AND. SPATIAL_STATISTIC/='INTERPOLATION') XB_XYZ= .FALSE. + ! Check for ignition zone + IF (PROP_ID/='null') THEN + CALL GET_PROPERTY_INDEX(PROP_INDEX,'DEVC',PROP_ID) + IF (PROPERTY(PROP_INDEX)%IGNITION_ZONE) XB_XYZ= .FALSE. + ENDIF IF (POINTS==1 .AND. SPATIAL_STATISTIC=='null' .AND. ALL(XB>-1E6_EB) .AND. ALL(XYZ<=-1E6_EB) .AND. XB_XYZ) THEN XYZ(1) = 0.5_EB*(XB(1)+XB(2)) XYZ(2) = 0.5_EB*(XB(3)+XB(4)) @@ -14802,6 +14861,7 @@ END SUBROUTINE PROC_OBST SUBROUTINE PROC_DEVC USE COMP_FUNCTIONS, ONLY: CHANGE_UNITS +USE CHEMCONS, ONLY: N_IGNITION_ZONES,IGNITION_ZONES,FUEL_ID_FOR_AFT USE GEOMETRY_FUNCTIONS, ONLY: SEARCH_OTHER_MESHES USE PHYSICAL_FUNCTIONS, ONLY: GET_VISCOSITY,GET_CONDUCTIVITY USE CONTROL_VARIABLES @@ -14873,6 +14933,40 @@ SUBROUTINE PROC_DEVC ENDDO ENDIF + IF (PROPERTY(DV%PROP_INDEX)%IGNITION_ZONE) THEN + N_IGNITION_ZONES = N_IGNITION_ZONES + 1 + IF (N_IGNITION_ZONES > MAX_IGNITION_ZONES) THEN + WRITE(MESSAGE,'(3A,I3,A)') 'ERROR: DEVC ',TRIM(DV%ID),': Total ', MAX_IGNITION_ZONES,' ignition zones are allowed.' + CALL SHUTDOWN(MESSAGE) ; RETURN + ENDIF + IF (DV%X1 > -1E6_EB) THEN !XB + IGNITION_ZONES(N_IGNITION_ZONES)%X1 = DV%X1 + IGNITION_ZONES(N_IGNITION_ZONES)%X2 = DV%X2 + IGNITION_ZONES(N_IGNITION_ZONES)%Y1 = DV%Y1 + IGNITION_ZONES(N_IGNITION_ZONES)%Y2 = DV%Y2 + IGNITION_ZONES(N_IGNITION_ZONES)%Z1 = DV%Z1 + IGNITION_ZONES(N_IGNITION_ZONES)%Z2 = DV%Z2 + ELSEIF (DV%X > -1E6_EB .AND. DV%Y > -1E6_EB .AND. DV%Z > -1E6_EB .AND. PROCESS(DV%MESH)==MY_RANK) THEN !XYZ + M => MESHES(DV%MESH) + CALL GET_IJK(DV%X,DV%Y,DV%Z,DV%MESH,XI,YJ,ZK,II,JJ,KK) + IGNITION_ZONES(N_IGNITION_ZONES)%X1 = M%X(II-1) + IGNITION_ZONES(N_IGNITION_ZONES)%X2 = M%X(II) + IGNITION_ZONES(N_IGNITION_ZONES)%Y1 = M%Y(JJ-1) + IGNITION_ZONES(N_IGNITION_ZONES)%Y2 = M%Y(JJ) + IGNITION_ZONES(N_IGNITION_ZONES)%Z1 = M%Z(KK-1) + IGNITION_ZONES(N_IGNITION_ZONES)%Z2 = M%Z(KK) + ENDIF + IGNITION_ZONES(N_IGNITION_ZONES)%DEVC_INDEX = N + IGNITION_ZONES(N_IGNITION_ZONES)%DEVC_ID = DV%ID + ENDIF + ENDIF + + IF(TRIM(ODE_SOLVER)=='CVODE' .AND. N_IGNITION_ZONES >= 1) THEN + IF (TRIM(FUEL_ID_FOR_AFT) == 'null') THEN + WRITE(MESSAGE,'(A)') 'ERROR(*): FUEL_ID_FOR_AFT must be specified when IGNITION_ZONE(s) are speciefied.' & + // NEW_LINE('A') // 'Provide FUEL_ID_FOR_AFT in the COMB line.' + CALL SHUTDOWN(MESSAGE) ; RETURN + ENDIF ENDIF ! Check if the output QUANTITY exists and is appropriate diff --git a/Utilities/Input_Libraries/Chemical_Mechanisms/FDS/Ethylene_TianfengLu.fds b/Utilities/Input_Libraries/Chemical_Mechanisms/FDS/Ethylene_TianfengLu.fds index eb03f2582ee..54276f4a7ec 100644 --- a/Utilities/Input_Libraries/Chemical_Mechanisms/FDS/Ethylene_TianfengLu.fds +++ b/Utilities/Input_Libraries/Chemical_Mechanisms/FDS/Ethylene_TianfengLu.fds @@ -1,4 +1,5 @@ -&SPEC ID='N2',BACKGROUND=T, +&SPEC ID='NITROGEN',BACKGROUND=T, + ALT_ID='N2', PR_GAS= 0.708 , FORMULA='N2.0', SIGMALJ= 3.621 , @@ -9,7 +10,8 @@ POLYNOMIAL_COEFF(1:7,2)= 2.92664,0.0014879768,-5.68476e-07,1.0097038e-10,-6.753351e-15,-922.7977,5.980528, ENTHALPY_OF_FORMATION= 0.00142 , / -&SPEC ID='H2', +&SPEC ID='HYDROGEN', + ALT_ID='H2', PR_GAS= 0.69 , FORMULA='H2.0', SIGMALJ= 2.92 , @@ -20,7 +22,8 @@ POLYNOMIAL_COEFF(1:7,2)= 3.3372792,-4.94024731e-05,4.99456778e-07,-1.79566394e-10,2.00255376e-14,-950.158922,-3.20502331, ENTHALPY_OF_FORMATION= 0.0 , / -&SPEC ID='H', +&SPEC ID='HYDROGEN ATOM', + ALT_ID='H', PR_GAS= 0.666 , FORMULA='H1.0', SIGMALJ= 2.05 , @@ -31,7 +34,8 @@ POLYNOMIAL_COEFF(1:7,2)= 2.50000001,-2.30842973e-11,1.61561948e-14,-4.73515235e-18,4.98197357e-22,25473.6599,-0.446682914, ENTHALPY_OF_FORMATION= 217.99743 , / -&SPEC ID='O', +&SPEC ID='OXYGEN ATOM', + ALT_ID='O', PR_GAS= 0.67 , FORMULA='O1.0', SIGMALJ= 2.75 , @@ -42,7 +46,8 @@ POLYNOMIAL_COEFF(1:7,2)= 2.56942078,-8.59741137e-05,4.19484589e-08,-1.00177799e-11,1.22833691e-15,29217.5791,4.78433864, ENTHALPY_OF_FORMATION= 249.17392 , / -&SPEC ID='O2', +&SPEC ID='OXYGEN', + ALT_ID='O2', PR_GAS= 0.712 , FORMULA='O2.0', SIGMALJ= 3.458 , @@ -53,7 +58,8 @@ POLYNOMIAL_COEFF(1:7,2)= 3.28253784,0.00148308754,-7.57966669e-07,2.09470555e-10,-2.16717794e-14,-1088.45772,5.45323129, ENTHALPY_OF_FORMATION= 0.0 , / -&SPEC ID='OH', +&SPEC ID='HYDROXYL RADICAL', + ALT_ID='OH', PR_GAS= 0.763 , FORMULA='H1.0O1.0', SIGMALJ= 2.75 , @@ -64,7 +70,9 @@ POLYNOMIAL_COEFF(1:7,2)= 3.09288767,0.000548429716,1.26505228e-07,-8.79461556e-11,1.17412376e-14,3858.657,4.4766961, ENTHALPY_OF_FORMATION= 39.34692 , / -&SPEC ID='H2O', +&SPEC ID='WATER VAPOR', + ALT_ID='H2O', + RADCAL_ID='WATER VAPOR', PR_GAS= 0.736 , FORMULA='H2.0O1.0', SIGMALJ= 2.605 , @@ -75,7 +83,8 @@ POLYNOMIAL_COEFF(1:7,2)= 3.03399249,0.00217691804,-1.64072518e-07,-9.7041987e-11,1.68200992e-14,-30004.2971,4.9667701, ENTHALPY_OF_FORMATION= -241.82489 , / -&SPEC ID='HO2', +&SPEC ID='HYDROPEROXY RADICAL', + ALT_ID='HO2', PR_GAS= 0.755 , FORMULA='H1.0O2.0', SIGMALJ= 3.458 , @@ -86,7 +95,8 @@ POLYNOMIAL_COEFF(1:7,2)= 4.0172109,0.00223982013,-6.3365815e-07,1.1424637e-10,-1.07908535e-14,111.856713,3.78510215, ENTHALPY_OF_FORMATION= 12.55194 , / -&SPEC ID='H2O2', +&SPEC ID='HYDROGEN PEROXIDE', + ALT_ID='H2O2', PR_GAS= 0.736 , FORMULA='H2.0O2.0', SIGMALJ= 3.458 , @@ -97,7 +107,8 @@ POLYNOMIAL_COEFF(1:7,2)= 4.16500285,0.00490831694,-1.90139225e-06,3.71185986e-10,-2.87908305e-14,-17861.7877,2.91615662, ENTHALPY_OF_FORMATION= -135.87937 , / -&SPEC ID='CH', +&SPEC ID='METHYLIDYNE', + ALT_ID='CH', PR_GAS= 0.763 , FORMULA='C1.0H1.0', SIGMALJ= 2.75 , @@ -108,7 +119,8 @@ POLYNOMIAL_COEFF(1:7,2)= 2.87846473,0.000970913681,1.44445655e-07,-1.30687849e-10,1.76079383e-14,71012.4364,5.48497999, ENTHALPY_OF_FORMATION= 597.33526 , / -&SPEC ID='CH2', +&SPEC ID='METHYLENE', + ALT_ID='CH2', PR_GAS= 0.763 , FORMULA='C1.0H2.0', SIGMALJ= 3.8 , @@ -130,7 +142,9 @@ POLYNOMIAL_COEFF(1:7,2)= 2.29203842,0.00465588637,-2.01191947e-06,4.17906e-10,-3.39716365e-14,50925.9997,8.62650169, ENTHALPY_OF_FORMATION= 429.89045 , / -&SPEC ID='CH3', +&SPEC ID='METHYL RADICAL', + ALT_ID='CH3', + RADCAL_ID='METHANE', PR_GAS= 0.761 , FORMULA='C1.0H3.0', SIGMALJ= 3.8 , @@ -141,7 +155,9 @@ POLYNOMIAL_COEFF(1:7,2)= 2.28571772,0.00723990037,-2.98714348e-06,5.95684644e-10,-4.67154394e-14,16775.5843,8.48007179, ENTHALPY_OF_FORMATION= 146.89932 , / -&SPEC ID='CH4', +&SPEC ID='METHANE', + ALT_ID='CH4', + RADCAL_ID='METHANE', PR_GAS= 0.709 , FORMULA='C1.0H4.0', SIGMALJ= 3.746 , @@ -152,7 +168,9 @@ POLYNOMIAL_COEFF(1:7,2)= 0.074851495,0.0133909467,-5.73285809e-06,1.22292535e-09,-1.0181523e-13,-9468.34459,18.437318, ENTHALPY_OF_FORMATION= -74.59965 , / -&SPEC ID='CO', +&SPEC ID='CARBON MONOXIDE', + ALT_ID='CO', + RADCAL_ID='CARBON MONOXIDE', PR_GAS= 0.722 , FORMULA='C1.0O1.0', SIGMALJ= 3.65 , @@ -163,7 +181,9 @@ POLYNOMIAL_COEFF(1:7,2)= 2.71518561,0.00206252743,-9.98825771e-07,2.30053008e-10,-2.03647716e-14,-14151.8724,7.81868772, ENTHALPY_OF_FORMATION= -110.52949 , / -&SPEC ID='CO2', +&SPEC ID='CARBON DIOXIDE', + ALT_ID='CO2', + RADCAL_ID='CARBON DIOXIDE', PR_GAS= 0.726 , FORMULA='C1.0O2.0', SIGMALJ= 3.763 , @@ -174,7 +194,8 @@ POLYNOMIAL_COEFF(1:7,2)= 3.85746029,0.00441437026,-2.21481404e-06,5.23490188e-10,-4.72084164e-14,-48759.166,2.27163806, ENTHALPY_OF_FORMATION= -393.5082 , / -&SPEC ID='HCO', +&SPEC ID='FORMYL RADICAL', + ALT_ID='HCO', PR_GAS= 0.759 , FORMULA='C1.0H1.0O1.0', SIGMALJ= 3.59 , @@ -185,7 +206,8 @@ POLYNOMIAL_COEFF(1:7,2)= 2.77217438,0.00495695526,-2.48445613e-06,5.89161778e-10,-5.33508711e-14,4011.91815,9.79834492, ENTHALPY_OF_FORMATION= 41.9998 , / -&SPEC ID='CH2O', +&SPEC ID='FORMALDEHYDE', + ALT_ID='CH2O', PR_GAS= 0.727 , FORMULA='C1.0H2.0O1.0', SIGMALJ= 3.59 , @@ -196,7 +218,9 @@ POLYNOMIAL_COEFF(1:7,2)= 1.76069008,0.00920000082,-4.42258813e-06,1.00641212e-09,-8.8385564e-14,-13995.8323,13.656323, ENTHALPY_OF_FORMATION= -108.5795 , / -&SPEC ID='CH3O', +&SPEC ID='METHOXY RADICAL', + ALT_ID='CH3O', + RADCAL_ID='METHANOL', PR_GAS= 0.732 , FORMULA='C1.0H3.0O1.0', SIGMALJ= 3.69 , @@ -207,7 +231,9 @@ POLYNOMIAL_COEFF(1:7,2)= 3.770799,0.007871497,-2.656384e-06,3.944431e-10,-2.112616e-14,127.83252,2.929575, ENTHALPY_OF_FORMATION= 16.3036 , / -&SPEC ID='C2H2', +&SPEC ID='ACETYLENE', + ALT_ID='C2H2', + RADCAL_ID='ETHYLENE', PR_GAS= 0.733 , FORMULA='C2.0H2.0', SIGMALJ= 4.1 , @@ -219,6 +245,7 @@ ENTHALPY_OF_FORMATION= 228.19895 , / &SPEC ID='H2CC', + RADCAL_ID='ETHYLENE', PR_GAS= 0.738 , FORMULA='C2.0H2.0', SIGMALJ= 4.1 , @@ -229,7 +256,9 @@ POLYNOMIAL_COEFF(1:7,2)= 4.278034,0.0047562804,-1.6301009e-06,2.5462806e-10,-1.4886379e-14,48316.688,0.64023701, ENTHALPY_OF_FORMATION= 414.78627 , / -&SPEC ID='C2H3', +&SPEC ID='VINYL RADICAL', + ALT_ID='C2H3', + RADCAL_ID='ETHYLENE', PR_GAS= 0.751 , FORMULA='C2.0H3.0', SIGMALJ= 4.1 , @@ -240,7 +269,9 @@ POLYNOMIAL_COEFF(1:7,2)= 3.016724,0.0103302292,-4.68082349e-06,1.01763288e-09,-8.62607041e-14,34612.8739,7.78732378, ENTHALPY_OF_FORMATION= 299.73878 , / -&SPEC ID='C2H4', +&SPEC ID='ETHYLENE', + ALT_ID='C2H4', + RADCAL_ID='ETHYLENE', PR_GAS= 0.741 , FORMULA='C2.0H4.0', SIGMALJ= 3.971 , @@ -251,7 +282,8 @@ POLYNOMIAL_COEFF(1:7,2)= 2.03611116,0.0146454151,-6.71077915e-06,1.47222923e-09,-1.25706061e-13,4939.88614,10.3053693, ENTHALPY_OF_FORMATION= 52.49976 , / -&SPEC ID='C2H5', +&SPEC ID='ETHYL RADICAL', + ALT_ID='C2H5', PR_GAS= 0.743 , FORMULA='C2.0H5.0', SIGMALJ= 4.302 , @@ -262,7 +294,9 @@ POLYNOMIAL_COEFF(1:7,2)= 1.95465642,0.0173972722,-7.98206668e-06,1.75217689e-09,-1.49641576e-13,12857.52,13.4624343, ENTHALPY_OF_FORMATION= 118.65769 , / -&SPEC ID='C2H6', +&SPEC ID='ETHANE', + ALT_ID='C2H6', + RADCAL_ID='ETHANE', PR_GAS= 0.742 , FORMULA='C2.0H6.0', SIGMALJ= 4.302 , @@ -273,7 +307,8 @@ POLYNOMIAL_COEFF(1:7,2)= 1.0718815,0.0216852677,-1.00256067e-05,2.21412001e-09,-1.9000289e-13,-11426.3932,15.1156107, ENTHALPY_OF_FORMATION= -83.85116 , / -&SPEC ID='HCCO', +&SPEC ID='KETENYL RADICAL', + ALT_ID='HCCO', PR_GAS= 0.755 , FORMULA='C2.0H1.0O1.0', SIGMALJ= 2.5 , @@ -284,7 +319,8 @@ POLYNOMIAL_COEFF(1:7,2)= 5.6282058,0.0040853401,-1.5934547e-06,2.8626052e-10,-1.9407832e-14,19327.215,-3.9302595, ENTHALPY_OF_FORMATION= 177.41087 , / -&SPEC ID='CH2CO', +&SPEC ID='KETENE', + ALT_ID='CH2CO', PR_GAS= 0.736 , FORMULA='C2.0H2.0O1.0', SIGMALJ= 3.97 , @@ -295,7 +331,8 @@ POLYNOMIAL_COEFF(1:7,2)= 4.51129732,0.00900359745,-4.16939635e-06,9.23345882e-10,-7.94838201e-14,-7551.05311,0.632247205, ENTHALPY_OF_FORMATION= -47.69978 , / -&SPEC ID='CH2CHO', +&SPEC ID='VINYLOXY RADICAL', + ALT_ID='CH2CHO', PR_GAS= 0.75 , FORMULA='C2.0H3.0O1.0', SIGMALJ= 3.97 , @@ -306,7 +343,9 @@ POLYNOMIAL_COEFF(1:7,2)= 5.9756699,0.0081305914,-2.7436245e-06,4.0703041e-10,-2.1760171e-14,490.32178,-5.0320879, ENTHALPY_OF_FORMATION= 25.3372 , / -&SPEC ID='CH3CHO', +&SPEC ID='ETHANAL', + ALT_ID='CH3CHO', + RADCAL_ID='METHANOL', PR_GAS= 0.735 , FORMULA='C2.0H4.0O1.0', SIGMALJ= 3.97 , @@ -318,6 +357,7 @@ ENTHALPY_OF_FORMATION= -166.18923 , / &SPEC ID='aC3H5', + RADCAL_ID='METHANOL', PR_GAS= 0.751 , FORMULA='C3.0H5.0', SIGMALJ= 4.982 , @@ -329,6 +369,7 @@ ENTHALPY_OF_FORMATION= 171.15062 , / &SPEC ID='C3H6', + RADCAL_ID='METHANOL', PR_GAS= 0.747 , FORMULA='C3.0H6.0', SIGMALJ= 4.982 , @@ -340,6 +381,7 @@ ENTHALPY_OF_FORMATION= 20.45459 , / &SPEC ID='nC3H7', + RADCAL_ID='METHANOL', PR_GAS= 0.749 , FORMULA='C3.0H7.0', SIGMALJ= 4.982 , diff --git a/Utilities/Input_Libraries/Chemical_Mechanisms/FDS/Methane_TianfengLu.fds b/Utilities/Input_Libraries/Chemical_Mechanisms/FDS/Methane_TianfengLu.fds index 90d3d9c9ba7..57db04aae7f 100644 --- a/Utilities/Input_Libraries/Chemical_Mechanisms/FDS/Methane_TianfengLu.fds +++ b/Utilities/Input_Libraries/Chemical_Mechanisms/FDS/Methane_TianfengLu.fds @@ -1,4 +1,5 @@ -&SPEC ID='N2',BACKGROUND=T, +&SPEC ID='NITROGEN',BACKGROUND=T, + ALT_ID='N2' PR_GAS= 0.708 , FORMULA='N2.0', SIGMALJ= 3.621 , @@ -7,8 +8,10 @@ POLYNOMIAL_TEMP= 300.0,1000.0,5000.0, POLYNOMIAL_COEFF(1:7,1)= 3.298677,0.0014082404,-3.963222e-06,5.641515e-09,-2.444854e-12,-1020.8999,3.950372, POLYNOMIAL_COEFF(1:7,2)= 2.92664,0.0014879768,-5.68476e-07,1.0097038e-10,-6.753351e-15,-922.7977,5.980528, - ENTHALPY_OF_FORMATION= 0.00142 / -&SPEC ID='H2', + ENTHALPY_OF_FORMATION= 0.00142 , +/ +&SPEC ID='HYDROGEN', + ALT_ID='H2' PR_GAS= 0.69 , FORMULA='H2.0', SIGMALJ= 2.92 , @@ -17,8 +20,10 @@ POLYNOMIAL_TEMP= 200.0,1000.0,3500.0, POLYNOMIAL_COEFF(1:7,1)= 2.34433112,0.00798052075,-1.9478151e-05,2.01572094e-08,-7.37611761e-12,-917.935173,0.683010238, POLYNOMIAL_COEFF(1:7,2)= 3.3372792,-4.94024731e-05,4.99456778e-07,-1.79566394e-10,2.00255376e-14,-950.158922,-3.20502331, - ENTHALPY_OF_FORMATION= 0.0 / -&SPEC ID='H', + ENTHALPY_OF_FORMATION= 0.0 , +/ +&SPEC ID='HYDROGEN ATOM', + ALT_ID='H' PR_GAS= 0.666 , FORMULA='H1.0', SIGMALJ= 2.05 , @@ -27,8 +32,10 @@ POLYNOMIAL_TEMP= 200.0,1000.0,3500.0, POLYNOMIAL_COEFF(1:7,1)= 2.5,7.05332819e-13,-1.99591964e-15,2.30081632e-18,-9.27732332e-22,25473.6599,-0.446682853, POLYNOMIAL_COEFF(1:7,2)= 2.50000001,-2.30842973e-11,1.61561948e-14,-4.73515235e-18,4.98197357e-22,25473.6599,-0.446682914, - ENTHALPY_OF_FORMATION= 217.99743 / -&SPEC ID='O', + ENTHALPY_OF_FORMATION= 217.99743 , +/ +&SPEC ID='OXYGEN ATOM', + ALT_ID='O' PR_GAS= 0.67 , FORMULA='O1.0', SIGMALJ= 2.75 , @@ -37,8 +44,10 @@ POLYNOMIAL_TEMP= 200.0,1000.0,3500.0, POLYNOMIAL_COEFF(1:7,1)= 3.1682671,-0.00327931884,6.64306396e-06,-6.12806624e-09,2.11265971e-12,29122.2592,2.05193346, POLYNOMIAL_COEFF(1:7,2)= 2.56942078,-8.59741137e-05,4.19484589e-08,-1.00177799e-11,1.22833691e-15,29217.5791,4.78433864, - ENTHALPY_OF_FORMATION= 249.17392 / -&SPEC ID='O2', + ENTHALPY_OF_FORMATION= 249.17392 , +/ +&SPEC ID='OXYGEN', + ALT_ID='O2' PR_GAS= 0.712 , FORMULA='O2.0', SIGMALJ= 3.458 , @@ -47,8 +56,10 @@ POLYNOMIAL_TEMP= 200.0,1000.0,3500.0, POLYNOMIAL_COEFF(1:7,1)= 3.78245636,-0.00299673416,9.84730201e-06,-9.68129509e-09,3.24372837e-12,-1063.94356,3.65767573, POLYNOMIAL_COEFF(1:7,2)= 3.28253784,0.00148308754,-7.57966669e-07,2.09470555e-10,-2.16717794e-14,-1088.45772,5.45323129, - ENTHALPY_OF_FORMATION= 0.0 / -&SPEC ID='OH', + ENTHALPY_OF_FORMATION= 0.0 , +/ +&SPEC ID='HYDROXYL RADICAL', + ALT_ID='OH' PR_GAS= 0.763 , FORMULA='H1.0O1.0', SIGMALJ= 2.75 , @@ -57,8 +68,10 @@ POLYNOMIAL_TEMP= 200.0,1000.0,3500.0, POLYNOMIAL_COEFF(1:7,1)= 3.99201543,-0.00240131752,4.61793841e-06,-3.88113333e-09,1.3641147e-12,3615.08056,-0.103925458, POLYNOMIAL_COEFF(1:7,2)= 3.09288767,0.000548429716,1.26505228e-07,-8.79461556e-11,1.17412376e-14,3858.657,4.4766961, - ENTHALPY_OF_FORMATION= 39.34692 / -&SPEC ID='H2O', + ENTHALPY_OF_FORMATION= 39.34692 , +/ +&SPEC ID='WATER VAPOR', + ALT_ID='H2O' PR_GAS= 0.736 , FORMULA='H2.0O1.0', SIGMALJ= 2.605 , @@ -67,8 +80,10 @@ POLYNOMIAL_TEMP= 200.0,1000.0,3500.0, POLYNOMIAL_COEFF(1:7,1)= 4.19864056,-0.0020364341,6.52040211e-06,-5.48797062e-09,1.77197817e-12,-30293.7267,-0.849032208, POLYNOMIAL_COEFF(1:7,2)= 3.03399249,0.00217691804,-1.64072518e-07,-9.7041987e-11,1.68200992e-14,-30004.2971,4.9667701, - ENTHALPY_OF_FORMATION= -241.82489 / -&SPEC ID='HO2', + ENTHALPY_OF_FORMATION= -241.82489 , +/ +&SPEC ID='HYDROPEROXY RADICAL', + ALT_ID='HO2' PR_GAS= 0.755 , FORMULA='H1.0O2.0', SIGMALJ= 3.458 , @@ -77,8 +92,10 @@ POLYNOMIAL_TEMP= 200.0,1000.0,3500.0, POLYNOMIAL_COEFF(1:7,1)= 4.30179801,-0.00474912051,2.11582891e-05,-2.42763894e-08,9.29225124e-12,294.80804,3.71666245, POLYNOMIAL_COEFF(1:7,2)= 4.0172109,0.00223982013,-6.3365815e-07,1.1424637e-10,-1.07908535e-14,111.856713,3.78510215, - ENTHALPY_OF_FORMATION= 12.55194 / -&SPEC ID='H2O2', + ENTHALPY_OF_FORMATION= 12.55194 , +/ +&SPEC ID='HYDROGEN PEROXIDE', + ALT_ID='H2O2' PR_GAS= 0.736 , FORMULA='H2.0O2.0', SIGMALJ= 3.458 , @@ -87,8 +104,10 @@ POLYNOMIAL_TEMP= 200.0,1000.0,3500.0, POLYNOMIAL_COEFF(1:7,1)= 4.27611269,-0.000542822417,1.67335701e-05,-2.15770813e-08,8.62454363e-12,-17702.5821,3.43505074, POLYNOMIAL_COEFF(1:7,2)= 4.16500285,0.00490831694,-1.90139225e-06,3.71185986e-10,-2.87908305e-14,-17861.7877,2.91615662, - ENTHALPY_OF_FORMATION= -135.87937 / -&SPEC ID='C', + ENTHALPY_OF_FORMATION= -135.87937 , +/ +&SPEC ID='SOOTg', + ALT_ID='C' PR_GAS= 0.666 , FORMULA='C1.0', SIGMALJ= 3.298 , @@ -97,8 +116,10 @@ POLYNOMIAL_TEMP= 200.0,1000.0,3500.0, POLYNOMIAL_COEFF(1:7,1)= 2.55423955,-0.000321537724,7.33792245e-07,-7.32234889e-10,2.66521446e-13,85443.8832,4.53130848, POLYNOMIAL_COEFF(1:7,2)= 2.49266888,4.79889284e-05,-7.2433502e-08,3.74291029e-11,-4.87277893e-15,85451.2953,4.80150373, - ENTHALPY_OF_FORMATION= 716.67672 / -&SPEC ID='CH', + ENTHALPY_OF_FORMATION= 716.67672 , +/ +&SPEC ID='METHYLIDYNE', + ALT_ID='CH' PR_GAS= 0.763 , FORMULA='C1.0H1.0', SIGMALJ= 2.75 , @@ -107,8 +128,10 @@ POLYNOMIAL_TEMP= 200.0,1000.0,3500.0, POLYNOMIAL_COEFF(1:7,1)= 3.48981665,0.000323835541,-1.68899065e-06,3.16217327e-09,-1.40609067e-12,70797.2934,2.08401108, POLYNOMIAL_COEFF(1:7,2)= 2.87846473,0.000970913681,1.44445655e-07,-1.30687849e-10,1.76079383e-14,71012.4364,5.48497999, - ENTHALPY_OF_FORMATION= 597.33526 / -&SPEC ID='CH2', + ENTHALPY_OF_FORMATION= 597.33526 , +/ +&SPEC ID='METHYLENE', + ALT_ID='CH2' PR_GAS= 0.763 , FORMULA='C1.0H2.0', SIGMALJ= 3.8 , @@ -117,8 +140,10 @@ POLYNOMIAL_TEMP= 200.0,1000.0,3500.0, POLYNOMIAL_COEFF(1:7,1)= 3.76267867,0.000968872143,2.79489841e-06,-3.85091153e-09,1.68741719e-12,46004.0401,1.56253185, POLYNOMIAL_COEFF(1:7,2)= 2.87410113,0.00365639292,-1.40894597e-06,2.60179549e-10,-1.87727567e-14,46263.604,6.17119324, - ENTHALPY_OF_FORMATION= 392.33353 / -&SPEC ID='CH2(S)', + ENTHALPY_OF_FORMATION= 392.33353 , +/ +&SPEC ID='METHYLENEs', + ALT_ID='CH2(S)' PR_GAS= 0.759 , FORMULA='C1.0H2.0', SIGMALJ= 3.8 , @@ -127,8 +152,10 @@ POLYNOMIAL_TEMP= 200.0,1000.0,3500.0, POLYNOMIAL_COEFF(1:7,1)= 4.19860411,-0.00236661419,8.2329622e-06,-6.68815981e-09,1.94314737e-12,50496.8163,-0.769118967, POLYNOMIAL_COEFF(1:7,2)= 2.29203842,0.00465588637,-2.01191947e-06,4.17906e-10,-3.39716365e-14,50925.9997,8.62650169, - ENTHALPY_OF_FORMATION= 429.89045 / -&SPEC ID='CH3', + ENTHALPY_OF_FORMATION= 429.89045 , +/ +&SPEC ID='METHYL RADICAL', + ALT_ID='CH3' PR_GAS= 0.761 , FORMULA='C1.0H3.0', SIGMALJ= 3.8 , @@ -137,8 +164,10 @@ POLYNOMIAL_TEMP= 200.0,1000.0,3500.0, POLYNOMIAL_COEFF(1:7,1)= 3.6735904,0.00201095175,5.73021856e-06,-6.87117425e-09,2.54385734e-12,16444.9988,1.60456433, POLYNOMIAL_COEFF(1:7,2)= 2.28571772,0.00723990037,-2.98714348e-06,5.95684644e-10,-4.67154394e-14,16775.5843,8.48007179, - ENTHALPY_OF_FORMATION= 146.89932 / -&SPEC ID='CH4', + ENTHALPY_OF_FORMATION= 146.89932 , +/ +&SPEC ID='METHANE', + ALT_ID='CH4' PR_GAS= 0.709 , FORMULA='C1.0H4.0', SIGMALJ= 3.746 , @@ -147,8 +176,10 @@ POLYNOMIAL_TEMP= 200.0,1000.0,3500.0, POLYNOMIAL_COEFF(1:7,1)= 5.14987613,-0.0136709788,4.91800599e-05,-4.84743026e-08,1.66693956e-11,-10246.6476,-4.64130376, POLYNOMIAL_COEFF(1:7,2)= 0.074851495,0.0133909467,-5.73285809e-06,1.22292535e-09,-1.0181523e-13,-9468.34459,18.437318, - ENTHALPY_OF_FORMATION= -74.59965 / -&SPEC ID='CO', + ENTHALPY_OF_FORMATION= -74.59965 , +/ +&SPEC ID='CARBON MONOXIDE', + ALT_ID='CO' PR_GAS= 0.722 , FORMULA='C1.0O1.0', SIGMALJ= 3.65 , @@ -157,8 +188,10 @@ POLYNOMIAL_TEMP= 200.0,1000.0,3500.0, POLYNOMIAL_COEFF(1:7,1)= 3.57953347,-0.00061035368,1.01681433e-06,9.07005884e-10,-9.04424499e-13,-14344.086,3.50840928, POLYNOMIAL_COEFF(1:7,2)= 2.71518561,0.00206252743,-9.98825771e-07,2.30053008e-10,-2.03647716e-14,-14151.8724,7.81868772, - ENTHALPY_OF_FORMATION= -110.52949 / -&SPEC ID='CO2', + ENTHALPY_OF_FORMATION= -110.52949 , +/ +&SPEC ID='CARBON DIOXIDE', + ALT_ID='CO2' PR_GAS= 0.726 , FORMULA='C1.0O2.0', SIGMALJ= 3.763 , @@ -167,8 +200,10 @@ POLYNOMIAL_TEMP= 200.0,1000.0,3500.0, POLYNOMIAL_COEFF(1:7,1)= 2.35677352,0.00898459677,-7.12356269e-06,2.45919022e-09,-1.43699548e-13,-48371.9697,9.90105222, POLYNOMIAL_COEFF(1:7,2)= 3.85746029,0.00441437026,-2.21481404e-06,5.23490188e-10,-4.72084164e-14,-48759.166,2.27163806, - ENTHALPY_OF_FORMATION= -393.5082 / -&SPEC ID='HCO', + ENTHALPY_OF_FORMATION= -393.5082 , +/ +&SPEC ID='FORMYL RADICAL', + ALT_ID='HCO' PR_GAS= 0.759 , FORMULA='C1.0H1.0O1.0', SIGMALJ= 3.59 , @@ -177,8 +212,10 @@ POLYNOMIAL_TEMP= 200.0,1000.0,3500.0, POLYNOMIAL_COEFF(1:7,1)= 4.22118584,-0.00324392532,1.37799446e-05,-1.33144093e-08,4.33768865e-12,3839.56496,3.39437243, POLYNOMIAL_COEFF(1:7,2)= 2.77217438,0.00495695526,-2.48445613e-06,5.89161778e-10,-5.33508711e-14,4011.91815,9.79834492, - ENTHALPY_OF_FORMATION= 41.9998 / -&SPEC ID='CH2O', + ENTHALPY_OF_FORMATION= 41.9998 , +/ +&SPEC ID='FORMALDEHYDE', + ALT_ID='CH2O' PR_GAS= 0.727 , FORMULA='C1.0H2.0O1.0', SIGMALJ= 3.59 , @@ -187,8 +224,10 @@ POLYNOMIAL_TEMP= 200.0,1000.0,3500.0, POLYNOMIAL_COEFF(1:7,1)= 4.79372315,-0.00990833369,3.73220008e-05,-3.79285261e-08,1.31772652e-11,-14308.9567,0.6028129, POLYNOMIAL_COEFF(1:7,2)= 1.76069008,0.00920000082,-4.42258813e-06,1.00641212e-09,-8.8385564e-14,-13995.8323,13.656323, - ENTHALPY_OF_FORMATION= -108.5795 / -&SPEC ID='CH2OH', + ENTHALPY_OF_FORMATION= -108.5795 , +/ +&SPEC ID='HYDROXYMETHYL RADICAL', + ALT_ID='CH2OH' PR_GAS= 0.741 , FORMULA='C1.0H3.0O1.0', SIGMALJ= 3.69 , @@ -197,8 +236,10 @@ POLYNOMIAL_TEMP= 200.0,1000.0,3500.0, POLYNOMIAL_COEFF(1:7,1)= 3.86388918,0.00559672304,5.93271791e-06,-1.04532012e-08,4.36967278e-12,-3193.91367,5.47302243, POLYNOMIAL_COEFF(1:7,2)= 3.69266569,0.00864576797,-3.7510112e-06,7.87234636e-10,-6.48554201e-14,-3242.50627,5.81043215, - ENTHALPY_OF_FORMATION= -14.62779 / -&SPEC ID='CH3O', + ENTHALPY_OF_FORMATION= -14.62779 , +/ +&SPEC ID='METHOXY RADICAL', + ALT_ID='CH3O' PR_GAS= 0.732 , FORMULA='C1.0H3.0O1.0', SIGMALJ= 3.69 , @@ -207,8 +248,10 @@ POLYNOMIAL_TEMP= 300.0,1000.0,3000.0, POLYNOMIAL_COEFF(1:7,1)= 2.106204,0.007216595,5.338472e-06,-7.377636e-09,2.07561e-12,978.6011,13.152177, POLYNOMIAL_COEFF(1:7,2)= 3.770799,0.007871497,-2.656384e-06,3.944431e-10,-2.112616e-14,127.83252,2.929575, - ENTHALPY_OF_FORMATION= 16.3036 / -&SPEC ID='CH3OH', + ENTHALPY_OF_FORMATION= 16.3036 , +/ +&SPEC ID='METHANOL', + ALT_ID='CH3OH' PR_GAS= 0.741 , FORMULA='C1.0H4.0O1.0', SIGMALJ= 3.626 , @@ -217,8 +260,10 @@ POLYNOMIAL_TEMP= 200.0,1000.0,3500.0, POLYNOMIAL_COEFF(1:7,1)= 5.71539582,-0.0152309129,6.52441155e-05,-7.10806889e-08,2.61352698e-11,-25642.7656,-1.50409823, POLYNOMIAL_COEFF(1:7,2)= 1.78970791,0.0140938292,-6.36500835e-06,1.38171085e-09,-1.1706022e-13,-25374.8747,14.5023623, - ENTHALPY_OF_FORMATION= -200.93908 / -&SPEC ID='C2H2', + ENTHALPY_OF_FORMATION= -200.93908 , +/ +&SPEC ID='ACETYLENE', + ALT_ID='C2H2' PR_GAS= 0.733 , FORMULA='C2.0H2.0', SIGMALJ= 4.1 , @@ -227,8 +272,10 @@ POLYNOMIAL_TEMP= 200.0,1000.0,3500.0, POLYNOMIAL_COEFF(1:7,1)= 0.808681094,0.0233615629,-3.55171815e-05,2.80152437e-08,-8.50072974e-12,26428.9807,13.9397051, POLYNOMIAL_COEFF(1:7,2)= 4.14756964,0.00596166664,-2.37294852e-06,4.67412171e-10,-3.61235213e-14,25935.9992,-1.23028121, - ENTHALPY_OF_FORMATION= 228.19895 / -&SPEC ID='C2H3', + ENTHALPY_OF_FORMATION= 228.19895 , +/ +&SPEC ID='VINYL RADICAL', + ALT_ID='C2H3' PR_GAS= 0.751 , FORMULA='C2.0H3.0', SIGMALJ= 4.1 , @@ -237,8 +284,10 @@ POLYNOMIAL_TEMP= 200.0,1000.0,3500.0, POLYNOMIAL_COEFF(1:7,1)= 3.21246645,0.00151479162,2.59209412e-05,-3.57657847e-08,1.47150873e-11,34859.8468,8.51054025, POLYNOMIAL_COEFF(1:7,2)= 3.016724,0.0103302292,-4.68082349e-06,1.01763288e-09,-8.62607041e-14,34612.8739,7.78732378, - ENTHALPY_OF_FORMATION= 299.73878 / -&SPEC ID='C2H4', + ENTHALPY_OF_FORMATION= 299.73878 , +/ +&SPEC ID='ETHYLENE', + ALT_ID='C2H4' PR_GAS= 0.741 , FORMULA='C2.0H4.0', SIGMALJ= 3.971 , @@ -247,8 +296,10 @@ POLYNOMIAL_TEMP= 200.0,1000.0,3500.0, POLYNOMIAL_COEFF(1:7,1)= 3.95920148,-0.00757052247,5.70990292e-05,-6.91588753e-08,2.69884373e-11,5089.77593,4.09733096, POLYNOMIAL_COEFF(1:7,2)= 2.03611116,0.0146454151,-6.71077915e-06,1.47222923e-09,-1.25706061e-13,4939.88614,10.3053693, - ENTHALPY_OF_FORMATION= 52.49976 / -&SPEC ID='C2H5', + ENTHALPY_OF_FORMATION= 52.49976 , +/ +&SPEC ID='ETHYL RADICAL', + ALT_ID='C2H5' PR_GAS= 0.743 , FORMULA='C2.0H5.0', SIGMALJ= 4.302 , @@ -257,8 +308,10 @@ POLYNOMIAL_TEMP= 200.0,1000.0,3500.0, POLYNOMIAL_COEFF(1:7,1)= 4.30646568,-0.00418658892,4.97142807e-05,-5.99126606e-08,2.30509004e-11,12841.6265,4.70720924, POLYNOMIAL_COEFF(1:7,2)= 1.95465642,0.0173972722,-7.98206668e-06,1.75217689e-09,-1.49641576e-13,12857.52,13.4624343, - ENTHALPY_OF_FORMATION= 118.65769 / -&SPEC ID='C2H6', + ENTHALPY_OF_FORMATION= 118.65769 , +/ +&SPEC ID='ETHANE', + ALT_ID='C2H6' PR_GAS= 0.742 , FORMULA='C2.0H6.0', SIGMALJ= 4.302 , @@ -267,8 +320,10 @@ POLYNOMIAL_TEMP= 200.0,1000.0,3500.0, POLYNOMIAL_COEFF(1:7,1)= 4.29142492,-0.0055015427,5.99438288e-05,-7.08466285e-08,2.68685771e-11,-11522.2055,2.66682316, POLYNOMIAL_COEFF(1:7,2)= 1.0718815,0.0216852677,-1.00256067e-05,2.21412001e-09,-1.9000289e-13,-11426.3932,15.1156107, - ENTHALPY_OF_FORMATION= -83.85116 / -&SPEC ID='HCCO', + ENTHALPY_OF_FORMATION= -83.85116 , +/ +&SPEC ID='KETENYL RADICAL', + ALT_ID='HCCO' PR_GAS= 0.755 , FORMULA='C2.0H1.0O1.0', SIGMALJ= 2.5 , @@ -277,8 +332,10 @@ POLYNOMIAL_TEMP= 300.0,1000.0,4000.0, POLYNOMIAL_COEFF(1:7,1)= 2.2517214,0.017655021,-2.3729101e-05,1.7275759e-08,-5.0664811e-12,20059.449,12.490417, POLYNOMIAL_COEFF(1:7,2)= 5.6282058,0.0040853401,-1.5934547e-06,2.8626052e-10,-1.9407832e-14,19327.215,-3.9302595, - ENTHALPY_OF_FORMATION= 177.41087 / -&SPEC ID='CH2CO', + ENTHALPY_OF_FORMATION= 177.41087 , +/ +&SPEC ID='KETENE', + ALT_ID='CH2CO' PR_GAS= 0.736 , FORMULA='C2.0H2.0O1.0', SIGMALJ= 3.97 , @@ -287,8 +344,10 @@ POLYNOMIAL_TEMP= 200.0,1000.0,3500.0, POLYNOMIAL_COEFF(1:7,1)= 2.1358363,0.0181188721,-1.73947474e-05,9.34397568e-09,-2.01457615e-12,-7042.91804,12.215648, POLYNOMIAL_COEFF(1:7,2)= 4.51129732,0.00900359745,-4.16939635e-06,9.23345882e-10,-7.94838201e-14,-7551.05311,0.632247205, - ENTHALPY_OF_FORMATION= -47.69978 / -&SPEC ID='CH2CHO', + ENTHALPY_OF_FORMATION= -47.69978 , +/ +&SPEC ID='VINYLOXY RADICAL', + ALT_ID='CH2CHO' PR_GAS= 0.735 , FORMULA='C2.0H3.0O1.0', SIGMALJ= 3.97 , @@ -297,7 +356,8 @@ POLYNOMIAL_TEMP= 300.0,1000.0,5000.0, POLYNOMIAL_COEFF(1:7,1)= 3.409062,0.010738574,1.891492e-06,-7.158583e-09,2.867385e-12,1521.4766,9.55829, POLYNOMIAL_COEFF(1:7,2)= 5.97567,0.008130591,-2.743624e-06,4.070304e-10,-2.176017e-14,490.3218,-5.045251, - ENTHALPY_OF_FORMATION= 25.10209 / + ENTHALPY_OF_FORMATION= 25.10209 , +/ &REAC ID='R1', REACTYPE='THREE-BODY-ARRHENIUS', REVERSE=T, @@ -921,7 +981,6 @@ T3_TROE= 100.0 , SPEC_ID_NU= 'CH3O','H' , 'CH3OH' , NU= -1.0,-1.0 , 1.0 / - Reaction with same element both side: 60 &REAC ID='R61', REACTYPE='ARRHENIUS', REVERSE=T, @@ -1641,7 +1700,6 @@ N_T= 0.0 , SPEC_ID_NU= 'CH2','HCCO' , 'C2H3','CO' , NU= -1.0,-1.0 , 1.0,1.0 / - Reaction with same element both side: 132 &REAC ID='R133', REACTYPE='ARRHENIUS', REVERSE=T, @@ -1695,7 +1753,6 @@ T3_TROE= 208.0 , SPEC_ID_NU= 'CH2(S)','H2O' , 'CH3OH' , NU= -1.0,-1.0 , 1.0 / - Reaction with same element both side: 137 &REAC ID='R138', REACTYPE='ARRHENIUS', REVERSE=T, @@ -1723,7 +1780,6 @@ N_T= 0.0 , SPEC_ID_NU= 'CH2(S)','CH4' , 'CH3' , NU= -1.0,-1.0 , 2.0 / - Reaction with same element both side: 140 &REAC ID='R141', REACTYPE='ARRHENIUS', REVERSE=T, @@ -1733,7 +1789,6 @@ N_T= 0.0 , SPEC_ID_NU= 'CH2(S)','CO' , 'CH2','CO' , NU= -1.0,-1.0 , 1.0,1.0 / - Reaction with same element both side: 141 &REAC ID='R142', REACTYPE='ARRHENIUS', REVERSE=T, diff --git a/Validation/Common_Run_All.sh b/Validation/Common_Run_All.sh index 0145f78b91e..464e1fab222 100755 --- a/Validation/Common_Run_All.sh +++ b/Validation/Common_Run_All.sh @@ -83,7 +83,7 @@ while getopts 'bCe:EhIj:m:o:Oq:r:suvVw:xyz' OPTION do case $OPTION in b) - DEBUG="-b " + DEBUG="-T db " ;; C) CHECK=1