Challenge

Week 4 - Combustion Efficiency Calculation after Preheating

Aim: Write a Python code to calculate combustion efficiency of a heat recuperator on pre-heating.

Objectives:

  • Determine and visualize the effect of pre-heating on AFT
  • Determine and visualize the effect of pre-heating on combustion efficiency and fuel savings (if any)

Theory and Procedure:

In general, the heat exchangers used in regeneration may be classified as either regenerators or recuperators. Recuperators is a type of heat exchanger has separate flow paths for each fluid along their own passages and heat is transferred through the separating walls. Recuperators are often used in power engineering to increase the overall efficiency of thermodynamic cycles. Many recuperators are designed as counter-flow heat exchangers.

Types of Recuperators:

Cut-out section of recuperated microturbine:

In the given challenge, we need to analyze to effect of preheating on AFT and combustion efficiency.

For the first part, we analyze how preheating affects AFT. This is done by creating instances of fuel and air by using Quantity class. The reaction that follows:

The initial conditions for the mixture is set as per STP. The number of moles of methane are 1 and for air (2(oxygen) + 7.52(nitrogen)) is 9.52 moles. The preheating temperature is varied and pressure is kept constant at 1atm. The flue gas instance is created, which is mixture of air and fuel instances, which is then equilibrated under constant enthalpy and pressure to calculate AFT.

Further, we need to check combustion efficiency under pre-heating. This indicates how efficiently heat content of a fuel is converted to useful heat. For adiabatic chamber, heat released is given as:

But, acording to principle of conservation of mass:

The efficiency is given as:

`LHV` denotes lower heat value of combustion reaction (assumed to be `50 MJ/kg`.) The exhaust can be estimated from the products and the exit temperature is set to `1700K`. Fuel savings is calculated by the efficiencies;

Fuel savings = `1 - (eta0)/(eta1)

`eta0` = efficiency without pre-heating

`eta1` = efficiency after pre-heating

Code:

#Heat Recuperator - Combustion Efficincy Calculation After Pre-heating

"""
Effect of Pre-heating on AFT
Reaction: CH4 + 2(O2 + 3.76N2) <=> CO2 + 2H2O + 7.52N2
"""
from matplotlib.pyplot import *
from numpy import *
import cantera

# Creating the gas instance from the gri30 mechanism file
gas = cantera.Solution('gri30.cti')

# Creating the fuel and air instance from the gas
fuel = cantera.Quantity(gas)
fuel.TPX = 298.15, cantera.one_atm, {'CH4':1}
fuel.moles = 1
air = cantera.Quantity(gas)

# Defining the pre-heating conditions
T_pre = linspace(298, 600, 51)
T_aft = []
plot_interval = 5

# Calculating AFT for different pre-heating temperatures
for T in T_pre:
	air.TPX = T, cantera.one_atm, {'O2':0.21, 'N2':0.79}
	air.moles = 2 + (2*3.76)
	flue = fuel + air
	flue.equilibrate('HP','auto')
	T_aft.append(flue.T)

# Printing and plotting the results
print('\nEffect of Pre-heating on AFT')
print('-----------------------------')
print('AFT with no pre-heating = ' + str(round(T_aft[0],2)) + ' K')
slope = (T_aft[1]-T_aft[0])/(T_pre[1]-T_pre[0])
print('Rate of change of AFT with pre-heating = ' + str(round(slope,2)) + ' Kelvin per Kelvin\n')
T_pre_plot = [T_pre[i] for i in range(0,len(T_pre),plot_interval)]
T_aft_plot = [T_aft[i] for i in range(0,len(T_aft),plot_interval)]
fig, ax = subplots()
plot(T_pre_plot, T_aft_plot,'-o',color='red', linewidth=2)
grid('both', linestyle='--', linewidth=1.2)
xlabel('Pre-heating Temperature [K]', fontsize=14)
ylabel('Adiabatic Flame Temperature [K]', fontsize=14)
title('Effect of Air Pre-heating on AFT', fontsize=16, fontweight='bold')
x_ticks = [250, 300, 350, 400, 450, 500, 550, 600, 650]
ax.set_xticklabels(x_ticks, rotation=0, fontsize=12)
y_ticks = [2200, 2220, 2240, 2260, 2280, 2300, 2320, 2340, 2360]
ax.set_yticklabels(y_ticks, rotation=0, fontsize=11)
savefig('Effect_of_Air_Pre-heating_on_AFT.png')
show()

"""
Effect of Pre-heating on Combustion Efficiency
Reaction: CH4 + 2(O2 + 3.76N2) <=> CO2 + 2H2O + 7.52N2
"""
#Creating gas instance from the gri30 mechanism file
gas = cantera.Solution('gri30.cti')

#Creating the fuel and air instance from the gas
fuel = cantera.Quantity(gas)
fuel.TPX = 298.15, cantera.one_atm, {'CH4':1}
fuel.moles = 1
h_fuel = fuel.enthalpy_mass
air = cantera.Quantity(gas)

# Creating the estimated products instance from the gas
est_prod = cantera.Quantity(gas)
n_tot = 1 + 2 + (2*3.76)
n_co2 = 1/n_tot
n_h2o = 2/n_tot
n_n2 = 7.52/n_tot
est_prod.TPX = 1700, cantera.one_atm, {'CO2':n_co2, 'H2O':n_h2o, 'N2':n_n2}
est_prod.moles = n_tot
h_est_prod = est_prod.enthalpy_mass

# Defining the pre-heating conditions
T_pre = linspace(298, 600, 51)
LHV = 50e6
eff = []
fuel_saving = []
plot_interval = 5

# Calculating efficiency for different pre-heating temperatures
for T in T_pre:
	air.TPX = T, cantera.one_atm, {'O2':0.21, 'N2':0.79}
	air.moles = 2 + (2*3.76)
	air_fuel_ratio = air.mass/fuel.mass
	h_air = air.enthalpy_mass

	Q_spec = air_fuel_ratio*(h_air - h_est_prod) + h_fuel - h_est_prod

	eff.append(Q_spec/LHV*100)
	# Calculating the fuel saving from the efficiency
	fuel_saving.append((1 - (eff[0]/eff[-1]))*100)

# Printing and plotting the results
print('\nEffect of Pre-heating on Combustion Efficiency')
print('----------------------------------------------')
print('Efficiency without pre-heating = ' + str(round(eff[0],2)) + '%')
print('Efficiency at pre-heating of 600 K = ' + str(round(eff[-1],2)) + '%')
slope = (eff[1]-eff[0])/(T_pre[1]-T_pre[0])
print('Rate of change of efficiency with pre-heating = ' + str(round(slope,4)) + ' %/K')
print('Fuel saving at pre-heating of 600 K = ' + str(round(fuel_saving[-1],2))+ '%\n')
T_pre_plot = [T_pre[i] for i in range(0,len(T_pre),plot_interval)]
eff_plot = [eff[i] for i in range(0,len(eff),plot_interval)]
fuel_saving_plot = [fuel_saving[i] for i in range(0,len(fuel_saving),plot_interval)]

figure(1)
fig, ax = subplots()
plot(T_pre_plot, eff_plot,'-o',color='red', linewidth=2)
grid('both', linestyle='--', linewidth=1.2)
xlabel('Pre-heating Temperature [K]', fontsize=10)
ylabel('Combustion Efficiency [%]', fontsize=10)
title('Effect of Air Pre-heating on Combustion Efficiency',fontsize=12,fontweight='bold')
x_ticks = [250, 300, 350, 400, 450, 500, 550, 600, 650]
ax.set_xticklabels(x_ticks, rotation=0, fontsize=10)
y_ticks = [32, 34, 36, 38, 40, 42, 44, 46]
ax.set_yticklabels(y_ticks, rotation=0, fontsize=10)
savefig('Effect_of_Air_Pre-heating_on_Combustion_Efficiency.png')
show()

figure(2)
fig, ax = subplots()
plot(T_pre_plot, fuel_saving_plot,'-o',color='red', linewidth=2)
grid('both', linestyle='--', linewidth=1.2)
xlabel('Pre-heating Temperature [K]', fontsize=10)
ylabel('Fuel Savings [%]', fontsize=10)
title('Effect of Air Pre-heating on Fuel Savings',fontsize=12,fontweight='bold')
x_ticks = [250, 300, 350, 400, 450, 500, 550, 600, 650]
ax.set_xticklabels(x_ticks, rotation=0, fontsize=10)
y_ticks = [-5, 0, 5, 10, 15, 20, 25, 30]
ax.set_yticklabels(y_ticks, rotation=0, fontsize=10)
savefig('Effect_of_Air_Pre-heating_on _Fuel_Savings.png')
show()

Output:

Result:

  • AFT and preheating has a linear relation (slope of 0.43) hence, more heat is liberated as heat is added in combustion process.
  • Efficiency without preheating was 33.87% and after preheating @ 600K it became 44.53%.
  • Fuel savings to had a linear relation to preheating which increased to 23.93% on preheating @ 600K.
  • Hence, preheating is beneficial.

Questions:

Q1: What is the effect of preheating on AFT?

`->` Explained above along wih plots.

Q2: Does preheating help with fuel saving? If yes, how does combustion efficiency go up as a function of pre-heating temperature? Assume that the furnace exit temperature is 1700K.

  1. Write the formula for combustion efficiency
  2. Plot the effect of pre-heat temeprature on combustion efficiency
  3. Is it right or wrong to assume a fixed furnace exit temperature? Explain your answer.

`->` The formula used for efficiency

A fixed furnace exit temperature helps us determine enthalpy of product species, and hence, we are able to benchmark the results. Moreover, the given temperature could also be an average after estimating all loses.

References:

Material: Python Code, Notebooks and Plots can be accessed here

Your portfolio, next

Ship work like this
in your own course.

Talk to a career counsellor

Free 20-minute call. We'll map the right course to where you want to work.

By submitting you agree to our Terms and Privacy Policy.

Talk to a career counsellor

Free 20-minute call. We'll map the right course to where you want to work.

By submitting you agree to our Terms and Privacy Policy.