Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
102 changes: 56 additions & 46 deletions Source/fire.f90
Original file line number Diff line number Diff line change
Expand Up @@ -1186,73 +1186,83 @@ SUBROUTINE CALC_AFT_REAC_AND_PROD(ZZ,ZZ_REAC,ZZ_PROD)

REAL(EB), INTENT(IN) :: ZZ(N_TRACKED_SPECIES)
REAL(EB), INTENT(OUT) :: ZZ_REAC(N_TRACKED_SPECIES),ZZ_PROD(N_TRACKED_SPECIES)
REAL(EB) :: ZZ_EQUIV(N_TRACKED_SPECIES)
REAL(EB) :: EQUIV, X,Y,Z,A,B,C,D,E, SUM_ZZ
REAL(EB) :: ZZ_MASS, ZZ_FUEL_O2_MASS
REAL(EB) :: REAC_MASS, PROD_MASS, FUEL_MASS, O2_MASS, CO2_MASS, H2O_MASS
INTEGER :: NS

CALL CALC_EQUIV_RATIO(ZZ(1:N_TRACKED_SPECIES), EQUIV)
IF (SIM_MODE /= DNS_MODE .AND. USE_MIXED_ZN_AFT_TMP) THEN
EQUIV = MAX(1._EB,EQUIV)
ENDIF
REAL(EB), PARAMETER:: EQUIV_TOL=1.E-4_EB

! Adjust for diluents
ZZ_FUEL_O2_MASS = 0._EB
ZZ_MASS = SUM(ZZ(1:N_TRACKED_SPECIES))
ZZ_EQUIV = 0.0_EB
ZZ_REAC(1:N_TRACKED_SPECIES) = ZZ(1:N_TRACKED_SPECIES)
ZZ_PROD(1:N_TRACKED_SPECIES) = ZZ(1:N_TRACKED_SPECIES)
DO NS=1, N_TRACKED_SPECIES
IF (SPECIES_MIXTURE(NS)%OXR > TWO_EPSILON_EB) THEN ! FUEL
IF (SPECIES_MIXTURE(NS)%OXR > TWO_EPSILON_EB .AND. &
ABS(SPECIES_MIXTURE(NS)%EQUIV - 1.0_EB) > EQUIV_TOL) THEN ! FUEL
ZZ_REAC(NS) = 0._EB
ZZ_PROD(NS) = 0._EB
ZZ_FUEL_O2_MASS = ZZ_FUEL_O2_MASS + ZZ(NS)
ZZ_EQUIV(NS) = ZZ(NS)
ENDIF
ENDDO
ZZ_REAC(I_O2) = 0._EB
ZZ_PROD(I_O2) = 0._EB
ZZ_EQUIV(I_O2) = ZZ(I_O2)
ZZ_FUEL_O2_MASS = ZZ_FUEL_O2_MASS + ZZ(I_O2)

! Based on CxHyOz + aO2 = bCO2 + cH2O + dCxHyOz + eO2
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._EB*X+0.5_EB*Y)/EQUIV -Z) ! a is a function of equivalence ratio
IF (ABS(EQUIV - 1.0_EB) < TWO_EPSILON_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._EB*X+0.5_EB*Y-2._EB*A-Z)/(2._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
IF (ZZ_FUEL_O2_MASS > TWO_EPSILON_EB) THEN
SUM_ZZ=SUM(ZZ_EQUIV)
ZZ_EQUIV = ZZ_EQUIV/(SUM_ZZ + TWO_EPSILON_EB)
CALL CALC_EQUIV_RATIO(ZZ_EQUIV(1:N_TRACKED_SPECIES), EQUIV)
IF (SIM_MODE /= DNS_MODE .AND. USE_MIXED_ZN_AFT_TMP) THEN
EQUIV = MAX(1._EB,EQUIV)
ENDIF

! Setup reactants
FUEL_MASS = 1._EB*SPECIES_MIXTURE(I_FUEL)%MW
O2_MASS = A*SPECIES_MIXTURE(I_O2)%MW
REAC_MASS = FUEL_MASS+O2_MASS
ZZ_REAC(I_FUEL)=FUEL_MASS/REAC_MASS*ZZ_FUEL_O2_MASS
ZZ_REAC(I_O2)=O2_MASS/REAC_MASS*ZZ_FUEL_O2_MASS
SUM_ZZ=SUM(ZZ_REAC)
ZZ_REAC = ZZ_REAC/SUM_ZZ

! Setup products
CO2_MASS = B*SPECIES_MIXTURE(I_CO2)%MW
H2O_MASS = C*SPECIES_MIXTURE(I_H2O)%MW
FUEL_MASS = D*SPECIES_MIXTURE(I_FUEL)%MW
O2_MASS = E*SPECIES_MIXTURE(I_O2)%MW
PROD_MASS = CO2_MASS+H2O_MASS+FUEL_MASS+O2_MASS
ZZ_PROD(I_CO2)=ZZ_PROD(I_CO2)+CO2_MASS/PROD_MASS*ZZ_FUEL_O2_MASS
ZZ_PROD(I_H2O)=ZZ_PROD(I_H2O)+H2O_MASS/PROD_MASS*ZZ_FUEL_O2_MASS
ZZ_PROD(I_FUEL)=FUEL_MASS/PROD_MASS*ZZ_FUEL_O2_MASS
ZZ_PROD(I_O2)=O2_MASS/PROD_MASS*ZZ_FUEL_O2_MASS
! Based on CxHyOz + aO2 = bCO2 + cH2O + dCxHyOz + eO2
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._EB*X+0.5_EB*Y)/EQUIV -Z) ! a is a function of equivalence ratio
IF (ABS(EQUIV - 1.0_EB) < EQUIV_TOL) 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._EB*X+0.5_EB*Y-2._EB*A-Z)/(2._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
FUEL_MASS = 1._EB*SPECIES_MIXTURE(I_FUEL)%MW
O2_MASS = A*SPECIES_MIXTURE(I_O2)%MW
REAC_MASS = FUEL_MASS+O2_MASS
ZZ_REAC(I_FUEL)=FUEL_MASS/REAC_MASS*ZZ_FUEL_O2_MASS
ZZ_REAC(I_O2)=O2_MASS/REAC_MASS*ZZ_FUEL_O2_MASS
SUM_ZZ=SUM(ZZ_REAC)
ZZ_REAC = ZZ_REAC/SUM_ZZ

! Setup products
CO2_MASS = B*SPECIES_MIXTURE(I_CO2)%MW
H2O_MASS = C*SPECIES_MIXTURE(I_H2O)%MW
FUEL_MASS = D*SPECIES_MIXTURE(I_FUEL)%MW
O2_MASS = E*SPECIES_MIXTURE(I_O2)%MW
PROD_MASS = CO2_MASS+H2O_MASS+FUEL_MASS+O2_MASS
ZZ_PROD(I_CO2)=ZZ_PROD(I_CO2)+CO2_MASS/PROD_MASS*ZZ_FUEL_O2_MASS
ZZ_PROD(I_H2O)=ZZ_PROD(I_H2O)+H2O_MASS/PROD_MASS*ZZ_FUEL_O2_MASS
ZZ_PROD(I_FUEL)=FUEL_MASS/PROD_MASS*ZZ_FUEL_O2_MASS
ZZ_PROD(I_O2)=O2_MASS/PROD_MASS*ZZ_FUEL_O2_MASS
ENDIF
SUM_ZZ=SUM(ZZ_PROD)
ZZ_PROD = ZZ_PROD/SUM_ZZ

Expand Down
1 change: 1 addition & 0 deletions Source/read.f90
Original file line number Diff line number Diff line change
Expand Up @@ -3458,6 +3458,7 @@ SUBROUTINE READ_SPEC
* ELEMENT(8)%MASS / SPECIES_MIXTURE(N1)%MW

SPECIES_MIXTURE(N1)%OXA = SPECIES_MIXTURE(N1)%ATOMS(8) * ELEMENT(8)%MASS / SPECIES_MIXTURE(N1)%MW
SPECIES_MIXTURE(N1)%EQUIV = SPECIES_MIXTURE(N1)%OXR/(SPECIES_MIXTURE(N1)%OXA+TWO_EPSILON_EB)
ENDDO

!If SOOT_OXIDATION is enabled make sure to save accumulation on the wall and check that it is an AEROSOL species
Expand Down
1 change: 1 addition & 0 deletions Source/type.f90
Original file line number Diff line number Diff line change
Expand Up @@ -650,6 +650,7 @@ MODULE TYPES
REAL(EB), ALLOCATABLE, DIMENSION(:) :: R50
REAL(EB) :: OXR !< Required oxygen for complete combustion (gm/gm-species)
REAL(EB) :: OXA !< Available oxygen for combustion (gm/gm-species)
REAL(EB) :: EQUIV !< Species equiv ratio OXR/OXA


END TYPE SPECIES_MIXTURE_TYPE
Expand Down
Loading