Study the effect of preheating of air on the adiabatic flame temperature and combustion efficiency.
Aim –
- Study the effect of air preheating temperature on the Adiabatic Flame temperature in Methane – Air Combustion.
- Analyzing the effect of preheating temperature on the combustion efficiency assuming constant exit temperature in the furnace (Combustion products – CO2, H2O and N2)
Theory –
The combustion products after exiting from the furnace, still have high enthalpy which goes unutilized. To utilize this available energy, recuperators are generally employed after energy recovery systems (like turbine in a power plant). The recuperator is usually designed as a finned tubes heat exchanger in order to improve the heat transfer coefficient on the tube external side where vapor flows.
A general schematic diagram of recuperator implementation in a gas turbine power plant is shown below –

This current study focuses on the effect of air preheating on the adiabatic flame temperature and combustion efficiency.
Adiabatic Flame temperature determination –
Cantera library has been utilized in Python to determine the adiabatic flame temperature of constant pressure methane – air combustion (stoichiometric) at different temperatures of air.
Combustion Efficiency –
Applying energy balance in the combustor, we get
`m_f h_f+m_ah_a=m_p h_p+Q_u+Q_(loss)`
Assuming the process to be adiabatic, we get,
`Q_u=m_f h_f+m_ah_a -(m_a+m_f)h_p`
The combustion efficiency is given as
`η_c=Q_u/(m_f*LHV_f )`
In the above equations,
`m_f` - Mass of fuel in kg
`m_a` - Mass of air in kg
`m_p` - Mass of products in kg
`h_f` - Enthalpy of fuel in J/kg
`h_a` - Enthalpy of air in J/kg
`h_p` - Enthalpy of products in J/kg
`Q_u` - Useful Energy in J
`Q_loss` - Energy Loss in J
`eta _c`- Combustion efficiency
`LHV_f` - Lower heating Value of fuel in MJ/kg `~~` 50
Solution Algorithm
- Input the variables, namely, temperature and pressure of the reactants and products.
- Import the gri mechanism file. Utilize the Solutions and Quantity class of Cantera library for including the properties required for the calculation of AFT and enthalpies. The quantity class allows to create the methane and air mixture (O2 and N2) separately. A mixture can be simply created by simply adding the two objects. The properties of the new object are then calculated by Quantity class itself. This new class is then imported in the equilibrate routine of Solutions class.
- Using the equilibrate function of the Solutions class to calculate the adiabatic flame temperature of the reactant mixture.
- The above steps are repeated for different air temperatures
Results
From the below graph, it can be concluded that both, combustion efficiency and AFT increase linearly with the increase in preheating temperature.
As the air preheating temperature is increased, the enthalpy of the reactants increase. Thus, by definition, the AFT (temperature at which enthalpy of reactants and products is same) also increases in constant pressure combustion.
With the increase in preheating temperature, the enthalpy of reactants increases. In our study, the enthalpy of products remains constant due to constant exit temperature. Therefore, the combustion efficiency increases linearly.
Practically, the exit temperature of the furnace can’t be held as constant due to the complex phenomenon occurring during fuel combustion. Also, if we observe the combustion efficiency curve, it can be concluded that from this study, the combustion efficiency of above 100% is also possible (which is certainly not true). In practical applications, the preheat temperature is a function of the furnace exit temperature which has not been considered in our case. Thus, this study is only suitable from theoretical context.

PYTHON CODE -
"""
This code demonstrates how mixtures can be effectively ahndled with cantera
With the understanding of this, a combustion analysis can be carried out more easily with variable equivalence ratio
"""
import cantera as ct
import numpy as np
import matplotlib.pyplot as plt
T_air = np.linspace(298.15,600,10) #defines initial temp for air object
P_air = 101325 #defines initial press for air object
T_fuel =298.15 #defines initial temp for fuel object
P_fuel = 101325 #defines initial press for fuel object
T_prod = 1700 #defines temp for prod object
P_prod = 101325 #defines press for prod object
T_aft = [] #Saves AFT at different preheating temp
eff_app = [] #Saves efficiency at different preheating temp
gas = ct.Solution('gri30.cti') #gas object inherits the information of the Solution class of cantera library.
for i in range(len(T_air)):
air = ct.Quantity(gas) #Quantity is another class in the cantera library which provides additional properties to control
air.TPX = T_air[i],P_air,{"O2":0.21,"N2":0.79} #Reactant side temp, pressure and mole fraction of o2 and n2
#For stoichiometric combustion of methane
air.moles = 9.52
air_mass = air.mass
fuel = ct.Quantity(gas)
fuel.TPX = T_fuel,P_fuel,'CH4:1'
fuel.moles = 1
fuel_mass = fuel.mass
LHV_fuel = 50e06 #J/kg
prod = ct.Quantity(gas)
prod.TPX = T_prod,P_prod,{"CO2":0.095,"H2O":0.190,"N2":0.715}
prod.moles = 10.52
prod_mass = prod.mass
h_air = air.enthalpy_mass #Specific enthalpy in J/kg
h_fuel = fuel.enthalpy_mass
h_prod = prod.enthalpy_mass
Q = air_mass*h_air + fuel_mass*h_fuel - prod_mass*h_prod
eff = (Q/(fuel_mass*LHV_fuel))*100 #Efficiency in %
mix = air+fuel #This calculates the state of the mixture when the objects defined in the quantity class are added or combined
mix.equilibrate('HP','auto') #For AFT
T_aft.append(mix.T)
eff_app.append(eff)
plt.subplot(211)
plt.plot(T_air,T_aft,'b*-')
plt.ylabel('Temperature in Kelvin')
plt.title('Adiabatic Flame temperature vs Inlet air temperature')
plt.text(T_air[0], T_aft[-3],"Minimum AFT = {0:.2f} K when air temperature = {1:.2f} K".format(T_aft[0],T_air[0]) , style='italic',bbox={'facecolor': 'black', 'alpha': 0.8, 'pad': 5}, color = "white")
plt.text(T_air[0], T_aft[-5],"Maximum AFT = {0:.2f} K when air temperature = {1:.2f} K".format(T_aft[-1],T_air[-1]) , style='italic',bbox={'facecolor': 'black', 'alpha': 0.8, 'pad': 5}, color = "white")
plt.grid('on')
plt.subplot(212)
plt.plot(T_air,eff_app,'r*-')
plt.ylabel('Combustion Efficiency')
plt.xlabel('Preheating temperature in Kelvin')
plt.title('Combustion efficiency vs Inlet air temperature')
plt.text(T_air[0], eff_app[-3],"Minimum Efficiency = {0:.2f} % when air temperature = {1:.2f} K".format(eff_app[0],T_air[0]) , style='italic',bbox={'facecolor': 'black', 'alpha': 0.8, 'pad': 5}, color = "white")
plt.text(T_air[0], eff_app[-5],"Maximum Efficiency = {0:.2f} % when air temperature = {1:.2f} K".format(eff_app[-1],T_air[-1]) , style='italic',bbox={'facecolor': 'black', 'alpha': 0.8, 'pad': 5}, color = "white")
plt.grid('on')
plt.show()