Mittestatsionaarsed reaktorid

Mudeli lihtsustamiseks sageli võtame eeldust, et reaktor töötab statsionaarses režiimis, aga mõnikord toimuvad olulised muutused ajas ja ei saa seda eeldust võtta.

Tuletis aja suhtes

Mittestatsionaarses olukorras on oluline, kuidas reaktor reageerib muutustele. Bilansides on tuletis aja suhtes, mis näitab, kuidas parameetreid muutuvad ajas. Näiteks, kui reaktsiooni kiirus ei ole tasakaalus ühendi kogustega, mis sisenevad ja lahkuvad reaktoris, siis ühend hakkab kogunema või kaduma reaktorist. Ehk, kontsentratsioon muutub segus reaktsiooni tõttu. Energiabilansis võib samuti arvesse võtta energiataseme kasvamine või kahanemine, mis omakorda muudab temperatuuri reaktoris.

Vaatame täpsemalt moolbilansi ja seda osa, mis kajastab muutust ajas.

\[ \frac{dn_A}{dt} = \dot n_{A0} - \dot n_A + \int r_A dV \]

Siin bilansis \( \frac{dn_A}{dt} \) näitab, kuidas ühe ühendi moolide arv reaktoris muutub ajas. Tihti väljendame tuletist hoopis kontsentratsiooni järgi sedasi:

\[ V \frac{dC_A}{dt} = \dot n_{A0} - \dot n_A + \int r_A dV \]

Kui reaktori maht (V) muutub ka ajas, siis see peab tuletise sisse jääma.

Bilansist näeme, et muutuste kiirus sõltub tavaliselt reaktori mahust. Ehk, kui reaktor on suurem, siis kontsentratsioonid reaktoris muutuvad aeglasemalt, kui kõik muud tingimused reaktorites on samad. Sarnast asja võib näha energiabilansist.

\[ \sum_i n_i C_{p,i} \frac{dT}{dt} = \sum_i \dot n_{0,i} C_{p,i} (T - T_0) + r_A V \Delta H_{rxn} + \dot n_{faasimuutus} \Delta H_{faasimuutus} + Q \]

Ained nõuavad teatud energia kogust selleks, et temperatuur tõuseks ühe kraadi võrra. Sellepärast, energiabilansi vasakul poolel esineb iga ühendi moolide arv (ni) ja soojusmahtuvus (Cp). Kui reaktoris ainete kogused on suuremad või kui ainetel on kõrgemad soojusmahtuvus, siis temperatuur reaktoris muutub selle võrra aeglasemalt.

Mõjud väljaspoolt

Protsessid reaktoris võivad põhjustada muutusi ajas, aga paljud muutused tekivad just mõjudest, mis tulevad väljaspoolt reaktorist. Näiteks, kui reaktorit pannakse tööle alguses reaktor on külm ja lisatakse rohkem soojust selleks, et tõsta reaktori temperatuuri. Või saab toimuda häired süsteemis, mis põhjustavad kõikumisi. Näiteks, reagendi kontsentratsioon sisenevas voos mingil määral varieerub, mis omakorda põhjustab muutusi reaktori töös. Samuti temperatuur reaktoris peaaegu alati kõigub kuna soojusläbikanne reaktori ja ümbruse vahel ei ole päris stabiilne. Kui sellised kõikumised on piisavalt väikesed võime otsustada, et need pole olulised ja võime ikkagi võtta eeldust, et reaktor töötab statsionaarses režiimis. Kuid mõnikord on vaja täpsemalt modelleerima neid muutusi.

Kui muutus tuleb väljaspoolt, siis on vaja lisa informatsiooni sellest, kuidas massi- või soojusläbikanne reaktori ja ümbruse vahel muutub ajas. Seda saab kirjeldada valemiga, ehk ühe konkreetse väärtuse asemel oleks nüüd matemaatiline valem, mis sõltuks ajast ja annaks parameetri väärtust igal ajahetkel. Kui lahendadakse numbriliste meetoditega, siis saab valida diskreetseid hetkeid ajas, mille juures arvutust teha. Sellisel juhul saab otse määrata parameetri väärtust nendel ajahetketel, mida valitakse.

Näide

Metüülbromiidi saamiseks viiakse läbi pöördumatu vedelfaasiline lihtreaktsioon poolperioodilises reaktoris:

\[ CNBr + CH_3NH_2 \rightarrow CH_3Br + NCNH_2 \]

Alguses on juba reaktoris 5 liitrit lahust, mis sisaldab 0,05 mol/l ainet A (CNBr). Siis hakatakse lisama lahust, mis sisaldab aine B (CH3NH2) kontsentratsioonis 0,025 mol/l. Leida broomtsüaniidi (A) konversiooniastme sõltuvust ajast. Samuti leida broomtsüaniidi, metüülamiini ja metüülbromiidi kontsentratsiooni sõltuvust ajast.

Teist lahust lisatakse mahtkuluga 0,05 l s-1. Reaktsiooni kiiruskonstant antud tingimustel on 2,2 l s-1 mol-1.

Alustame moolbilansiga. Kuna eeldame, et reaktisooni kiirus on sama igal pool reaktoris, siis me ei pea integreerima mahu suhtes.

\[ \frac{dn_A}{dt} = r_A V \]

Kuigi aine B lisatakse pidevalt reaktorisse, antud moolbilanss on aine A jaoks ja sellepärast ei esine moolkulu reaktorisse.

Seejärel võime lisada reaktsiooni kiiruse valemi.

\[ \frac{dn_A}{dt} = -k C_A C_B V \]

Antud ülesandes vedeliku maht reaktoris pidevalt suureneb kuna on poolperioodiline reaktor. Sellepärast antud juhul oleks vist mugavam asendada kontsentratsioone moolide arvuga kuna kontsentratsioon muutub mahuga.

\[ \frac{dn_A}{dt} = -k \frac{n_A}{V} \frac{n_B}{V} V \]

Lisaks, reaktsiooni kiirus sõltub kahest ainest ja seega on võibolla lihtsam lahendada, kui asendada moolide arvu konversiooniastmega.

\[ -n_{A0} \frac{dX_A}{dt} = -k \frac{n_{A0} (1 - X_A)}{V} \frac{C_{B0} \dot v_{sisse} t - n_{A0} X_A}{V} V \]

Siis saame valemit lihtsustada kuna mõned nA0 ja V muutujad taanduvad välja.

\[ \frac{dX_A}{dt} = -k (1 - X_A) (C_{B0} \dot v_{sisse} t - n_{A0} X_A) \frac{1}{V} \]

Märka, kuidas aine B jaoks me ei saa lihtsalt kasutada aine B moolide arv reaktisooni alguses kuna aine B lisatakse pidevalt juurde. Selle asemel, me peame iga ajahetkel arvutama, kui palju ainet B on siiamaani lisatud korrutades B kontsentratsiooni sisenevas voos mahtkulu ja ajaga.

Nüüd võime kasutada Gekko paketti selleks, et lahendada diferentsiaalvõrrandit. Esiteks, loome Gekko mudelit ja defineerime meie parameetreid.

m = GEKKO()

CA0 = m.Param(value=0.05) # mol/L
CB0 = m.Param(value=0.025) # mol/L
V0 = m.Param(value=5) # L
k = m.Param(value=2.2) # L/s/mol
v_in = 0.05 # L/s
nA0 = m.Param(value=CA0.value * V0.value)

Seejärel võime anda Gekkole need ajahetked, mille juures sooviksime, et lahendust oleks arvutatud.

npts = 1000
t_lõpp = 400
m.time = np.linspace(0, t_lõpp, npts) # s

Siis on vaja ka defineerida muutujat, mida me tahame leida, ehk konversiooniaste. Ja paneme esialgseks väärtuseks 0 kuna konversiooniaste on alguses 0.

XA = m.Var(0)

Paneme ka kirja diferentsiaalvõrrandit, mida me varem koostasime. .dt() näitab Gekkole, et võtame antud muutuja tuletist aja suhtes.

m.Equation(XA.dt() == k * (1 - XA) * (FB0 - nA0 * XA) / V)

Nüüd mudel on koostatud ja võime lahendada seda. IMODE ütleb Gekkole, et teeme dünaamilist simulatsiooni (ehk parameetrid muutuvad ajas või ruumalas). Loome ka joonist selleks, et kuvada, kuidas aine A konversiooniaste muutub ajas.

m.options.IMODE = 4
m.solve(disp=False)

plt.figure()
plt.plot(m.time, XA.value)
plt.xlabel('Aeg (s)')
plt.ylabel('X$_A$')
plt.show()

Teades nüüd XA iga ajahetkel, võime arvutada broomtsüaniidi, metüülamiini ja metüülbromiidi kontsentratsiooni. Teeme joonist, et seda näidata.

CB = (FB0.value - nA0.value * np.asarray(XA.value)) / np.asarray(V.value)
CC = (nA0.value * np.asarray(XA.value)) / np.asarray(V.value)
CA = nA0.value * (1 - np.asarray(XA.value)) / np.asarray(V.value)

plt.figure()
plt.plot(m.time, CA, label='CA')
plt.plot(m.time, CB, label='CB')
plt.plot(m.time, CC, label='CC')
plt.xlabel('Aeg (s)')
plt.ylabel('Kontsentratsioon (mol L$^{-1}$)')
plt.legend(frameon=False)
plt.show()

Pythoni fail, mida kasutasime siin lahendamiseks, on kättesaadav Githubist.