Skip to content

Commit dad4f0e

Browse files
authored
Merge pull request #15142 from cxp484/master
FDS Source: Slight modification to AFT calculation
2 parents 766b073 + 3f36d38 commit dad4f0e

File tree

3 files changed

+58
-46
lines changed

3 files changed

+58
-46
lines changed

Source/fire.f90

Lines changed: 56 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1186,73 +1186,83 @@ SUBROUTINE CALC_AFT_REAC_AND_PROD(ZZ,ZZ_REAC,ZZ_PROD)
11861186

11871187
REAL(EB), INTENT(IN) :: ZZ(N_TRACKED_SPECIES)
11881188
REAL(EB), INTENT(OUT) :: ZZ_REAC(N_TRACKED_SPECIES),ZZ_PROD(N_TRACKED_SPECIES)
1189+
REAL(EB) :: ZZ_EQUIV(N_TRACKED_SPECIES)
11891190
REAL(EB) :: EQUIV, X,Y,Z,A,B,C,D,E, SUM_ZZ
11901191
REAL(EB) :: ZZ_MASS, ZZ_FUEL_O2_MASS
11911192
REAL(EB) :: REAC_MASS, PROD_MASS, FUEL_MASS, O2_MASS, CO2_MASS, H2O_MASS
11921193
INTEGER :: NS
1193-
1194-
CALL CALC_EQUIV_RATIO(ZZ(1:N_TRACKED_SPECIES), EQUIV)
1195-
IF (SIM_MODE /= DNS_MODE .AND. USE_MIXED_ZN_AFT_TMP) THEN
1196-
EQUIV = MAX(1._EB,EQUIV)
1197-
ENDIF
1194+
REAL(EB), PARAMETER:: EQUIV_TOL=1.E-4_EB
11981195

11991196
! Adjust for diluents
12001197
ZZ_FUEL_O2_MASS = 0._EB
12011198
ZZ_MASS = SUM(ZZ(1:N_TRACKED_SPECIES))
1199+
ZZ_EQUIV = 0.0_EB
12021200
ZZ_REAC(1:N_TRACKED_SPECIES) = ZZ(1:N_TRACKED_SPECIES)
12031201
ZZ_PROD(1:N_TRACKED_SPECIES) = ZZ(1:N_TRACKED_SPECIES)
12041202
DO NS=1, N_TRACKED_SPECIES
1205-
IF (SPECIES_MIXTURE(NS)%OXR > TWO_EPSILON_EB) THEN ! FUEL
1203+
IF (SPECIES_MIXTURE(NS)%OXR > TWO_EPSILON_EB .AND. &
1204+
ABS(SPECIES_MIXTURE(NS)%EQUIV - 1.0_EB) > EQUIV_TOL) THEN ! FUEL
12061205
ZZ_REAC(NS) = 0._EB
12071206
ZZ_PROD(NS) = 0._EB
12081207
ZZ_FUEL_O2_MASS = ZZ_FUEL_O2_MASS + ZZ(NS)
1208+
ZZ_EQUIV(NS) = ZZ(NS)
12091209
ENDIF
12101210
ENDDO
12111211
ZZ_REAC(I_O2) = 0._EB
12121212
ZZ_PROD(I_O2) = 0._EB
1213+
ZZ_EQUIV(I_O2) = ZZ(I_O2)
12131214
ZZ_FUEL_O2_MASS = ZZ_FUEL_O2_MASS + ZZ(I_O2)
12141215

1215-
! Based on CxHyOz + aO2 = bCO2 + cH2O + dCxHyOz + eO2
1216-
X=SPECIES_MIXTURE(I_FUEL)%ATOMS(6) !C
1217-
Y=SPECIES_MIXTURE(I_FUEL)%ATOMS(1) !H
1218-
Z=SPECIES_MIXTURE(I_FUEL)%ATOMS(8) !O
1219-
A=0.5_EB*((2._EB*X+0.5_EB*Y)/EQUIV -Z) ! a is a function of equivalence ratio
1220-
IF (ABS(EQUIV - 1.0_EB) < TWO_EPSILON_EB) THEN ! Stoich
1221-
B = X
1222-
C = 0.5_EB*Y
1223-
D = 0._EB ! No fuel
1224-
E = 0._EB ! No O2
1225-
ELSEIF (EQUIV > 1) THEN ! Rich
1226-
D = (2._EB*X+0.5_EB*Y-2._EB*A-Z)/(2._EB*X+0.5_EB*Y-Z)
1227-
B = (1._EB-D)*X
1228-
C = 0.5_EB*(1._EB-D)*Y
1229-
E = 0._EB ! No O2
1230-
ELSE !EQUIV < 1, Lean
1231-
B = X
1232-
C = 0.5_EB*Y
1233-
D = 0._EB ! No fuel
1234-
E = A + 0.5*Z - B - 0.5_EB*C
1235-
ENDIF
1216+
IF (ZZ_FUEL_O2_MASS > TWO_EPSILON_EB) THEN
1217+
SUM_ZZ=SUM(ZZ_EQUIV)
1218+
ZZ_EQUIV = ZZ_EQUIV/(SUM_ZZ + TWO_EPSILON_EB)
1219+
CALL CALC_EQUIV_RATIO(ZZ_EQUIV(1:N_TRACKED_SPECIES), EQUIV)
1220+
IF (SIM_MODE /= DNS_MODE .AND. USE_MIXED_ZN_AFT_TMP) THEN
1221+
EQUIV = MAX(1._EB,EQUIV)
1222+
ENDIF
12361223

1237-
! Setup reactants
1238-
FUEL_MASS = 1._EB*SPECIES_MIXTURE(I_FUEL)%MW
1239-
O2_MASS = A*SPECIES_MIXTURE(I_O2)%MW
1240-
REAC_MASS = FUEL_MASS+O2_MASS
1241-
ZZ_REAC(I_FUEL)=FUEL_MASS/REAC_MASS*ZZ_FUEL_O2_MASS
1242-
ZZ_REAC(I_O2)=O2_MASS/REAC_MASS*ZZ_FUEL_O2_MASS
1243-
SUM_ZZ=SUM(ZZ_REAC)
1244-
ZZ_REAC = ZZ_REAC/SUM_ZZ
1245-
1246-
! Setup products
1247-
CO2_MASS = B*SPECIES_MIXTURE(I_CO2)%MW
1248-
H2O_MASS = C*SPECIES_MIXTURE(I_H2O)%MW
1249-
FUEL_MASS = D*SPECIES_MIXTURE(I_FUEL)%MW
1250-
O2_MASS = E*SPECIES_MIXTURE(I_O2)%MW
1251-
PROD_MASS = CO2_MASS+H2O_MASS+FUEL_MASS+O2_MASS
1252-
ZZ_PROD(I_CO2)=ZZ_PROD(I_CO2)+CO2_MASS/PROD_MASS*ZZ_FUEL_O2_MASS
1253-
ZZ_PROD(I_H2O)=ZZ_PROD(I_H2O)+H2O_MASS/PROD_MASS*ZZ_FUEL_O2_MASS
1254-
ZZ_PROD(I_FUEL)=FUEL_MASS/PROD_MASS*ZZ_FUEL_O2_MASS
1255-
ZZ_PROD(I_O2)=O2_MASS/PROD_MASS*ZZ_FUEL_O2_MASS
1224+
! Based on CxHyOz + aO2 = bCO2 + cH2O + dCxHyOz + eO2
1225+
X=SPECIES_MIXTURE(I_FUEL)%ATOMS(6) !C
1226+
Y=SPECIES_MIXTURE(I_FUEL)%ATOMS(1) !H
1227+
Z=SPECIES_MIXTURE(I_FUEL)%ATOMS(8) !O
1228+
A=0.5_EB*((2._EB*X+0.5_EB*Y)/EQUIV -Z) ! a is a function of equivalence ratio
1229+
IF (ABS(EQUIV - 1.0_EB) < EQUIV_TOL) THEN ! Stoich
1230+
B = X
1231+
C = 0.5_EB*Y
1232+
D = 0._EB ! No fuel
1233+
E = 0._EB ! No O2
1234+
ELSEIF (EQUIV > 1) THEN ! Rich
1235+
D = (2._EB*X+0.5_EB*Y-2._EB*A-Z)/(2._EB*X+0.5_EB*Y-Z)
1236+
B = (1._EB-D)*X
1237+
C = 0.5_EB*(1._EB-D)*Y
1238+
E = 0._EB ! No O2
1239+
ELSE !EQUIV < 1, Lean
1240+
B = X
1241+
C = 0.5_EB*Y
1242+
D = 0._EB ! No fuel
1243+
E = A + 0.5*Z - B - 0.5_EB*C
1244+
ENDIF
1245+
1246+
! Setup reactants
1247+
FUEL_MASS = 1._EB*SPECIES_MIXTURE(I_FUEL)%MW
1248+
O2_MASS = A*SPECIES_MIXTURE(I_O2)%MW
1249+
REAC_MASS = FUEL_MASS+O2_MASS
1250+
ZZ_REAC(I_FUEL)=FUEL_MASS/REAC_MASS*ZZ_FUEL_O2_MASS
1251+
ZZ_REAC(I_O2)=O2_MASS/REAC_MASS*ZZ_FUEL_O2_MASS
1252+
SUM_ZZ=SUM(ZZ_REAC)
1253+
ZZ_REAC = ZZ_REAC/SUM_ZZ
1254+
1255+
! Setup products
1256+
CO2_MASS = B*SPECIES_MIXTURE(I_CO2)%MW
1257+
H2O_MASS = C*SPECIES_MIXTURE(I_H2O)%MW
1258+
FUEL_MASS = D*SPECIES_MIXTURE(I_FUEL)%MW
1259+
O2_MASS = E*SPECIES_MIXTURE(I_O2)%MW
1260+
PROD_MASS = CO2_MASS+H2O_MASS+FUEL_MASS+O2_MASS
1261+
ZZ_PROD(I_CO2)=ZZ_PROD(I_CO2)+CO2_MASS/PROD_MASS*ZZ_FUEL_O2_MASS
1262+
ZZ_PROD(I_H2O)=ZZ_PROD(I_H2O)+H2O_MASS/PROD_MASS*ZZ_FUEL_O2_MASS
1263+
ZZ_PROD(I_FUEL)=FUEL_MASS/PROD_MASS*ZZ_FUEL_O2_MASS
1264+
ZZ_PROD(I_O2)=O2_MASS/PROD_MASS*ZZ_FUEL_O2_MASS
1265+
ENDIF
12561266
SUM_ZZ=SUM(ZZ_PROD)
12571267
ZZ_PROD = ZZ_PROD/SUM_ZZ
12581268

Source/read.f90

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3458,6 +3458,7 @@ SUBROUTINE READ_SPEC
34583458
* ELEMENT(8)%MASS / SPECIES_MIXTURE(N1)%MW
34593459

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

34633464
!If SOOT_OXIDATION is enabled make sure to save accumulation on the wall and check that it is an AEROSOL species

Source/type.f90

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -650,6 +650,7 @@ MODULE TYPES
650650
REAL(EB), ALLOCATABLE, DIMENSION(:) :: R50
651651
REAL(EB) :: OXR !< Required oxygen for complete combustion (gm/gm-species)
652652
REAL(EB) :: OXA !< Available oxygen for combustion (gm/gm-species)
653+
REAL(EB) :: EQUIV !< Species equiv ratio OXR/OXA
653654

654655

655656
END TYPE SPECIES_MIXTURE_TYPE

0 commit comments

Comments
 (0)