Figure 4.22:

Molar flowrate of ethane, ethylene and NO versus reactor volume for ethane pyrolysis example.

Figure 4.22

Code for Figure 4.22

Text of the GNU GPL.

main.py


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# Converted from ethane_NO_1.m
import numpy as np
from scipy.integrate import solve_ivp
from misc import save_ascii

A0 = np.array([1e14, 1e12, 3e14, 3.4e12, 1e12, 1e13])
Ea = np.array([217600., 0., 165300., 28500., 0., 200800.])
R  = 8.3144    # J/gmol-K
R1 = 82.057    # cc-atm/gmol-K
T  = 1050.0    # K
P  = 1.0       # atm
y1f = 0.95; y2f = 0.05
C1f = y1f*P/(R1*T)
C2f = y2f*P/(R1*T)
Qf  = 600.0    # cc/sec
N1f = C1f*Qf; N2f = C2f*Qf

class Params:
    pass
p = Params()
p.P = P; p.T = T; p.R1 = R1
k_vals = A0 * np.exp(-Ea/(R*T))
p.k1  = k_vals[0]; p.k_1 = k_vals[1]
p.k2  = k_vals[2]; p.k3  = k_vals[3]
p.k4  = k_vals[4]; p.k_4 = k_vals[5]

def rxrate(v, N, p):
    C = N/np.sum(N) * p.P/(p.R1*p.T)
    r1 = p.k1*C[0]*C[1] - p.k_1*C[2]*C[3]
    r2 = p.k2*C[2]
    r3 = p.k3*C[0]*C[4]
    r4 = p.k4*C[1]*C[4] - p.k_4*C[3]
    return np.array([
        -r1 - r3,
        -r1 - r4,
         r1 - r2 + r3,
         r1 + r4,
         r2 - r3 - r4,
         r2,
         r3
    ])

N0 = np.array([N1f, N2f, 0., 0., 0., 0., 0.])
v = np.linspace(0, 1500, 200)
sqeps = np.sqrt(np.finfo(float).eps)
sol = solve_ivp(lambda v, x: rxrate(v, x, p), [0, 1500], N0,
                method='Radau', t_eval=v, rtol=sqeps, atol=sqeps)
N = sol.y.T
table = np.column_stack([v, N])
save_ascii('ethane_NO_1.dat', table)