Combustion stoichiometry¶
- Combustion occurs between Fuel and Air (or oxidizer)
- Need to get the mixing ratio / stoichiometry right.
Air properties¶
- Use $x$ for mole fraction, and $y$ for mass fraction.
Species | x | y |
---|---|---|
N$_2$ | 0.7809 | 0.75532 |
O$_2$ | 0.2095 | 0.23144 |
Ar | 0.0096 | 0.01324 |
- Lump Ar with N$_2$:
Species | x | y |
---|---|---|
N$_2$ | 0.79 | 0.77 |
O$_2$ | 0.21 | 0.23 |
- n$_{N2}$/n$_{O2}$ = 3.76
- n$_{air}$/n$_{O2}$ = 4.76
Mean molecular weight¶
- M = 28.96 kg/kmol
- M = 29 kg/kmol
- Make sure these last two equations are intuitive
- $M$ (=) kg/kmol.
- $M = m/n.$
- $M = \sum_k x_k M_k,$
- Take a 1 kmol basis. Then $n=1$ and $n_k=x_k$.
- $m = \sum_km_k = \sum_kn_kM_k = \sum_kx_kM_k.$
- So, $M = m/n = \sum_kx_kM_k.$
- $M = 1/(\sum_k y_k/M_k)$.
- Take a 1 kg basis. Then $m=1$ and $m_k=y_k$.
- $n = \sum_kn_k = \sum_km_k/M_k = \sum_ky_k/M_k.$
- So, $M=m/n = 1/(\sum_k y_k/M_k)$.
Convert x to y¶
$$ x_kM_k = y_kM,$$$$ y_k = \frac{x_kM_k}{M},$$$$ x_k = \frac{y_kM}{M_k}.$$- Intuitively
- $x_k$ to $y_k$: (kmol$_k$/kmol) to (kg$_k$/kg).
Stoichiometry¶
- Rich (too much fuel)
- Lean (too much air)
- Stoichiometric (just right)
Air-to-fuel ratio¶
$$ \frac{A}{F} = \frac{m_{air}}{m_{fuel}}.$$- Mass Basis
- $0 \le A/F \le \infty$
Equivalence ratio¶
$$\Phi = \frac{F/A}{(F/A)_{stoic}}$$- Mass or mole basis (same).
- $0 \le \Phi \le \infty$
- $\Phi=0$ is lean, $\Phi>1$ is rich.
- $\Phi$ is common in practical applications.
Mixture fraction¶
$$\xi = \frac{m_f}{m_f + m_a}$$- Notation, $\xi$, or $f$, or $Z$ is common.
- $\xi$ is the mass fraction of local material originating in the fuel ($\xi=1$) stream.
- $0\le \xi\le 1$
- $\xi=0$ is pure air, $\xi=1$ is pure fuel.
- $\xi$ is common in modeling.
- $\xi$ can be defined in terms of any two distinct streams, not just fuel and air.
Convert between $\xi$ and $\phi$¶
$$\xi = \frac{F}{F+A} = \frac{F/A}{F/A + 1} = \frac{\Phi(F/A)_{st}}{\Phi(F/A)_{st}+1} \rightarrow \Phi = \frac{\xi}{1-\xi}\frac{1}{(F/A)_{st}}$$But,
$$\xi_{st} = \frac{(F/A)_{st}}{(F/A)_{st}+1} \rightarrow (F/A)_{st} = \frac{\xi_{st}}{1-\xi_{st}}\rightarrow$$$$\Phi = \frac{\xi(1-\xi_{st})}{\xi_{st}(1-\xi)}$$Mixing¶
- $\xi$ defines a linear state of mixing between two streams.
- This is true for conserved quantities (termed conserved scalars), like elemental masses, or for species in the absence of reaction.
- Conserved quantities are elemental masses, enthalpy (in the absence of heat losses), and linear combinations of these.
- Consider elemental carbon. Denote FS as "fuel stuff" (meaning mass that originated in the $\xi=1$ stream), and AS as "air stuff" (meaning mass that originated in the $\xi=0$ stream).
or $$y_C = (1-\xi)y_{C,\xi=0} + (\xi)y_{C,\xi=1}.$$
- In general, simple mixing (no reaction) of some scalar $\psi$ is given by
- We can rearrange the above expression to give:
* This shows that $\xi$ is a centered and scaled version of $\psi$ that varies between 0 and 1.
Products of complete combustion (PCC)¶
- Given a set of stream definitions (species compositions $y_{k,0}$ for $\xi=0$ and $y_{k,1}$ for $\xi=1$), we can compute the stoichiometric mixture fraction $\xi_{st}$.
- At the stoichiometric point, the only species are $N_2$, $H_2O$, and $CO_2$.
- We presume that we have just enough $O_2$ (including considerations of fuel oxygen) present to convert all the $H$ atoms to $H_2O$, and all the $C$ atoms to $CO_2$.
- Any fuel nitrogen is assumed to form $N_2$ and takes no oxygen, but this can be changed if want.
- Then the stoichiometric product composition is set directly from the stoichiometric elemental composition.
- Elements are conserved, so stoichiometric elemental mass fractions are given by
- If we take one kg of mass, then the moles of elements are given by:
- Then, the stoichiometric moles of product species are
and from this we can compute the stoichiometric mole fractions and corresponding mass fractions.
- It turns out that, for PCC, all species mass fractions are linear in $\xi$ in the lean region between $0\le\xi\le\xi_{st}$ and linear in $\xi$ the rich region between $\xi_{st}\le\xi\le 1$.
- The lines are determined in the two regions using values at two points: $y_{k,0}$ and $y_{k,st}$ in the lean region; and $y_{k,st}$, and $y_{k,1}$ in the rich region. That is,
Show the linearity¶
Show that $y_k(\xi)$ is linear in $\xi$ in the lean and rich regions.
- Consider streams composed as:
- $\xi=0$: $C_xH_yO_zN_w$.
- $\xi=1$: $C_\alpha H_\beta O_\gamma N_\delta$.
- Assume a basis of one mass unit. Then $y_k=m_k$.
- Nitrogen doesn't interact with any other species so $2N\rightarrow N_2$, and it's mass fraction is obviously linear in $\xi$ given the above $\psi$ relations.
Lean
- The only possible species are $CO_2$, $H_2O$, $O_2$, and $N_2$.
- The moles of element $k$ are given by
which are linear in $\xi$.
- All $C$ forms $CO_2$. All $H$ forms $H_2O$.
- $n_{CO2}=n_C$; $y_{CO2}=m_{CO2}=n_{C}M_{CO2}$, hence $y_{CO2}$ is linear in $\xi$.
- $n_{H2O}=n_H/2$; $y_{H2O}=m_{H2O}=n_{H}M_{H2O}/2$, hence $y_{H2O}$ is linear in $\xi$.
- $n_{O2} = n_O/2 - n_{CO2} - n_{H2O}/2$; $y_{O2}=m_{O2}=n_{O2}M_{O2}$, hence $y_{O2}$ is linear in $\xi$ since its component parts are.
Rich
- The only possible species are $CO_2$, $H_2O$, $N_2$, and $C_\alpha H_\beta O_\gamma N_\delta$.
- The moles of element $k$ are again given by
which are linear in $\xi$.
- That is $n_O$, $n_C$, and $n_H$ are each linear in $\xi$. A balance on each gives:
- This is a linear system, so solving for $n_{CO2}$, $n_{H2O}$ and $n_{C_\alpha H_\beta O_\gamma N_\delta}$ will give each as linear combinations of $n_C$, $n_H$, and $n_O$, which are in turn linear in $\xi$.
- We can then multiply these by the respective species molecular weights to get masses, hence mass fractions.
Example¶
- See the Python streams.py class that includes a number of convenience functions.
- NOTE: save the file as is, don't copy and paste from it.
In [2]:
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import cantera as ct
from streams import streams
In [3]:
#---------------------- set the streams
P = 101325 # Pa
X0 = "O2:1, N2:3.76"
X1 = "CH4:1"
T0 = 300 # K
T1 = 300 # K
#---------------------- define the ξ grid and get PCC
nξ = 1000
ξ = np.linspace(0,1,nξ)
s = streams(X0, X1, T0, T1, P, "gri30.yaml")
print(f"ξst = {s.ξst}")
Y = np.zeros((s.gas.n_species,nξ))
for i in range(nξ):
Y[:,i] = s.get_pCC(ξ[i])
#---------------------- plot results
plt.rc('font', size=14)
plt.plot(ξ,Y[s.gas.species_index("CO2"),:], label='CO2')
plt.plot(ξ,Y[s.gas.species_index("H2O"),:], label='H2O')
plt.plot(ξ,Y[s.gas.species_index("O2"),:], label='O2')
plt.plot(ξ,Y[s.gas.species_index("N2"),:], label='N2')
plt.plot(ξ,Y[s.gas.species_index("CH4"),:], label='CH4')
leg = plt.legend()
leg.draw_frame(False)
plt.xlabel(r'$\xi$',fontsize=20)
plt.ylabel(r'$Y_i$',fontsize=20);
plt.xlim([0,1])
plt.ylim([0,1]);
ξst = 0.05518666598235155
In [ ]: