import numpy as np
from scipy.integrate import solve_ivp
import matplotlib.pyplot as plt
# constants
= 8.314 # J/ (mol K)
R = 0.082 # atm dm^3/ (mol K)
RATM = 523 # K
TRR
# Components
# 0: ethylene
# 1: oxygen
# 2: ethylene oxide
# 3: CO2
# 4: water
# 5: nitrogen
# Heats of formation at 298 K in J/mol
= np.array([-52470, 0, -52640, -393500, -285830, 0])
HF
# Specific Heat Capacities J/mol K
= np.array([65, 30, 80, 45, 35, 30])
CP
# reactions
# 0. C2H4 + 1/2 O2 -> C2H4O
# 1. C2H4 + 3O2 -> 2CO2 + 2H2O
# Stoichiometry
= np.array([
NU -1, -0.5, 1, 0, 0, 0], # Reaction 0: C2H4 + 0.5 O2 -> C2H4O
[-1, -3, 0, 2, 2, 0] # Reaction 1: C2H4 + 3 O2 -> 2 CO2 + 2 H2O
[
])
# Adsorption constants (1/atm)
= 6.5, 4.33
KE0, KE1
# Heat of reaction at reference temperature J/mol
= np.dot(NU, HF)
DELTA_HR_TR
# Functions
= lambda t: 0.15 * np.exp((60700/R) * ((1/TRR) - (1/t)))
k0e = lambda t: 0.0888 * np.exp((73200/R) * ((1/TRR) - (1/t)))
k1e
# rates
= lambda t, pe, po: k0e(t) * pe * po**0.58 / (1 + KE0*pe)**2
r0e = lambda t, pe, po: k1e(t) * pe * po**0.3 / (1 + KE1*pe)**2
r1e
def pbr(w,y,*args):
# convert dependent variables
= y[:-1]
f = y[-1]
t
# convert args
= args
(pt, ua, ta)
# total molar flow rate
= np.sum(f)
ft
# mol fr.
= f/ft
phi
# partial pressures
= pt * phi
p
# extract partial pressure for ethylene and oxygen
= p[0]
pe = p[1]
po
# calculate reaction rates
= r0e(t,pe,po)
r0 = r1e(t,pe,po)
r1
# Could also be written as an array
# r = np.array([r1e(t,pe,po), r2e(t,pe,po)])
# calculate rates of individual species
= -r0 -r1
r_e = -0.5 * r0 - 3 * r1
r_o = r0
r_eo = 2 * r1
r_co2 = 2 * r1
r_h2o = 0
r_n2
# could also be written as
# ri = np.dot(NU.T, r)
# write mole balances
# dfdw = ri
= r_e
df_e = r_o
df_o = r_eo
df_eo = r_co2
df_co2 = r_h2o
df_h2o = r_n2
df_n2
# energy balance
= np.dot(NU,CP)
delta_cp = DELTA_HR_TR + delta_cp * (t - 298)
delta_hr
# non-isothermal case
# replace dtdw with appropriate expression
= -r0 * delta_hr[0] - r1 * delta_hr[1]
qg = ua * (t - ta)
qr
= np.sum(f * CP)
sum_fcp
= (qg - qr)/sum_fcp
dtdw
# dydw = np.append(dfdw,dtdw)
= [df_e, df_o, df_eo, df_co2, df_h2o, df_n2, dtdw]
dydw
return dydw
# Problem data
# Heat transfer properties
= 300 # J/kg-cat s K
ua
= 250 + 273.15 # k
ta
# Inlet pressure and temperature
= 250 + 273.15 # K
t0 = 2 # atm
p0
# inlet flow rate mol/s
= 0.0093
ft0
# Inlet volume (mol) fraction
= np.array([0.06,0.12,0,0,0,0.82])
phi
# Inlet molar flow rates for components mol/s
= phi*ft0
f0
# total catalyst weight kg
= 0.1
wcat
# Differential equations
# 0: dF_e/dW
# 1: dF_o/dW
# 2: dF_eo/dW
# 3: dF_co2/dW
# 4: dF_h2o/dW
# 5: dF_n2/dW
# 6: dT/dW
= np.append(f0,t0)
initial_conditions = (p0, ua, ta)
args
= wcat
w_final
= solve_ivp(pbr,
sol 0, w_final],
[
initial_conditions, =args,
args='LSODA',
method=True)
dense_output
# Extract solution
= np.linspace(0,w_final, 1000)
w
# molar flow rate
= sol.sol(w)[:-1]
f
= f[0]
f_e = f[1]
f_o = f[2]
f_eo = f[3]
f_co2 = f[4]
f_h2o = f[5]
f_n2
# temperature
= sol.sol(w)[-1]
t
# Calculate conversion, selectivity, max temperature etc. as required # after
# this point
Portfolio 07: Reaction mechanism and catalysis
CHEN3010/ CHEN5040: chemical reaction engineering
Introduction
Typically, an unpromoted, supported silver on \alpha-alumina catalyst reaches about 50% etylene oxide ( EO ) selectivity. However, this selectivity can be significantly enhanced to around 90% with the addition of promoters like Cl, Cs, Re, Mo, Mn, and S (Pu et al. 2019).
Enhanced selectivity has a major implication in reducing \ce{ CO2 } emissions as this process alone contribute about 9.3 million metric tons annually, making up 0.03% of global \ce{ CO2 } emissions (Ghanta and Subramaniam 2017).
Understanding the different oxygen species that participate in both selective and unselective ethylene oxidation pathways is crucial for developing highly selective EO catalysts, which will improve economic efficiency and help reduce \ce{ CO2 } emissions.
Recently, a team from Lehigh University has published study explaining the reaction mechanism for ethylene epoxidation by supported Ag/\alpha-Al_2O_3 catalysts (Pu et al. 2024).
As a budding chemical engineer, you are tasked with understanding and summarizing the study for your manager. You are not expected to use AI tools for this assessment.
Questions
Provide a summary of the study of Pu et al. (2024). Along with summary, your answer should address the following questions: (10 marks)
- What were the different experimental techniques used in the study and how they were useful in understanding reaction mechanism, catalyst characterizing and/or testing?
- How were the Density functional theory (DFT) calculations used in understanding kinetics?
- What is the difference between Eley-Rideal and Langmuir-Hinshelwood kinetics?
Long term deactivation of the catalyst (10 marks)
Over period, catalyst deactivation occurs due to variety of reasons. Montrasi et al. (1983) studied activity of spent catalyst after 6 years of use in an industrial plant and compared it to that of a fresh catalyst. They reported a change in apparent activation energies.
For simplicity, we can divide the long term deactivation into three periods of catalyst activity (p1, p2, and p3). The relative activity of the catalyst in periods 2 and 3 to that in period 1 can be written as
r_{i, p2} = f_{i, p2} r_{i, p1} \qquad r_{i, p3} = f_{i, p3} r_{i, p1} \tag{1}
r_{i,p} is the rate of reaction i during period p (either reaction 1 or reaction 2). f_{i, p} is the deactivation factor for reaction i during period p. The values of f_i for reactions 1 and 2 (as described in portfolio 6) are as follows.
f_{1,p2} = 0.52; f_{1, p3} = 0.37; \\ f_{2,p2} = 0.49; f_{2, p3} = 0.32 \tag{2}
Calculate the conversion, yield, and selectivity at the end of each period. You can adapt the code given in appendix for solving this question. Use all other data as provided in portfolio 6.
Appendix
= 1 - f_e/f0[0]
x = f_eo/f_co2
sel
print (f'Final conversion: {x[-1]:.3f}; Final selectivity: {sel[-1]:.3f}\n')
="Conversion")
plt.plot(w,x, label
0],w[-1])
plt.xlim(w[0,1)
plt.ylim(
plt.grid()
'Catalyst weight ($kg$)')
plt.xlabel('Conversion')
plt.ylabel(
plt.show()
="Temperature")
plt.plot(w,t, label
0],w[-1])
plt.xlim(w[
plt.grid()
'Catalyst weight ($kg$)')
plt.xlabel('Temperature')
plt.ylabel(
plt.show()
References
Citation
@online{untitled,
author = {},
title = {Portfolio 07: {Reaction} Mechanism and Catalysis},
url = {https://cre.smilelab.dev//content/portfolio/07-reaction-mechanism-and-catalysis},
langid = {en}
}