On s’intéresse à la synthèse de l’ammoniac par le procédé Haber-Bosch, qui combine l’azote et l’hydrogène selon la réaction chimique
La réaction est réalisée dans un réacteur piston adiabatique de section , de longueur à la pression .
La vitesse volumique de réaction à la position dans le réacteur dépend des pressions partielles et s’écrit
On se place dans l’approximation d’Ellingham. L’écoulement est supposé lent et horizontal. Le réacteur ne comporte aucune pièce mobile.
1/ Exprimer la constante de vitesse de réaction en fonction de l’énergie d’activation et de la température .
La loi d’Arrhenius s’écrit
où est le facteur préexponentiel.
2/ Exprimer les pressions partielles des différentes espèces en fonction des débits molaires et de la pression . En déduire l’écriture d’une fonction Python r(F_N2, F_H2, F_NH3, T) qui calcule la vitesse volumique de réaction.
La constante d’équilibre s’écrit
import numpy as np
R = 8.314 # J/(mol·K)
DrH = -92.2e3
DrS = -198
P = 200e5 # en Pa
A = 1e-8 # facteur préexponentiel
E_a = 160e3 # en J/mol
def r(F_N2, F_H2, F_NH3, T):
P_N2 = F_N2 / (F_N2 + F_H2 + F_NH3) * P
P_H2 = F_H2 / (F_N2 + F_H2 + F_NH3) * P
P_NH3 = F_NH3 / (F_N2 + F_H2 + F_NH3) * P
k = A * np.exp(-E_a / (R * T))
K = np.exp(- (DrH - T * DrS) / (R * T))
return k * (P_N2 * P_H2**3 - P_NH3**2 * 1e5**2 / K)3/ En effectuant des bilans de matière sur une tranche élémentaire du réacteur, montrer que les débits molaires des différentes espèces vérifient
On fait un bilan de matière de sur une tranche d’épaisseur de réacteur en régime stationnaire :
D’où l’équation demandée
C’est le même principe pour et , avec les coefficients stœchiométriques appropriés.
4/ En effectuant un bilan d’enthalpie sur une tranche élémentaire du réacteur, montrer que la température dans le réacteur vérifie
Le réacteur est adiabatique et sans pièce mobile : le PPI appliqué à une tranche d’épaisseur en régime stationnaire annule le flux d’enthalpie total,
Le premier terme est l’échauffement du mélange à composition figée (seconde loi de Joule, le débit massique de l’espèce valant ), le second l’effet thermique de la réaction. Sur la tranche, , d’où
On souhaite déterminer numériquement les profils de débits molaires et de température dans le réacteur. Le problème est sous la forme d’un problème d’Euler, on le résout en utilisant la fonction solve_ivp du module scipy.integrate. Cette fonction renvoie un objet solution contenant notamment solution.t (les positions dans le réacteur) et solution.y (les valeurs des variables d’état aux différentes positions).
5/ Compléter le code Python suivant.
S = 5e-4 # m^2
M_N2 = 28e-3 # kg/mol
M_H2 = 2e-3 # kg/mol
M_NH3 = 17e-3 # kg/mol
c_P_N2 = 1040 # J/(kg·K)
c_P_H2 = 2230 # J/(kg·K)
c_P_NH3 = 2175 # J/(kg·K)
def f(t,Y):
F_N2, F_H2, F_NH3, T = Y
dF_N2 = ...
dF_H2 = ...
dF_NH3 = ...
dT = ...
return [dF_N2, dF_H2, dF_NH3, dT]S = 5e-4 # m^2
M_N2 = 28e-3 # kg/mol
M_H2 = 2e-3 # kg/mol
M_NH3 = 17e-3 # kg/mol
c_P_N2 = 1040 # J/(kg·K)
c_P_H2 = 2230 # J/(kg·K)
c_P_NH3 = 2175 # J/(kg·K)
def f(t,Y):
F_N2, F_H2, F_NH3, T = Y
r_val = r(F_N2, F_H2, F_NH3, T)
dF_N2 = - S * r_val
dF_H2 = - 3 * S * r_val
dF_NH3 = 2 * S * r_val
dT = (- r_val * S * DrH) / (F_N2 * M_N2 * c_P_N2 + F_H2 * M_H2 * c_P_H2 + F_NH3 * M_NH3 * c_P_NH3)
return [dF_N2, dF_H2, dF_NH3, dT]Les réactifs sont introduits dans le réacteur dans les proportions stœchiométriques, sans ammoniac initialement et avec un débit volumique total de et une température de .
6/ Compléter le code Python suivant pour résoudre numériquement le problème.
T_0 = ...
F_N2_0 = ...
F_H2_0 = ...
F_NH3_0 = ...
L = 6
Y0 = [F_N2_0, F_H2_0, F_NH3_0, T_0]
from scipy.integrate import solve_ivp
solution = solve_ivp(f, [0, L], Y0, "BDF")D’après l’équation d’état des gaz parfaits, le débit molaire en entrée est
On en déduit les débits molaires initiaux
T_0 = 500
D_V = 4000 / 3600 # en m^3/s
F_N2_0 = P * D_V / (4 * R * T_0)
F_H2_0 = 3 * P * D_V / (4 * R * T_0)
F_NH3_0 = 07/ Que vaut le taux de conversion de l’azote dans le réacteur ? Quelle température est atteinte à la sortie du réacteur ?
Le taux de conversion de l’azote est
F_N2_L = solution.y[0,-1]
X_N2 = (F_N2_0 - F_N2_L) / F_N2_0
print("Taux de conversion de l'azote :", X_N2)
T_L = solution.y[3,-1]
print("Température à la sortie du réacteur :", T_L)Données
| Espèce | |||
| Masse molaire () | |||
| Capacité thermique massique à pression constante () |