KineticReaction#
- class qsdsan.processes.KineticReaction(rate_reactant, n, k, t, reaction, reactant=None, C0=None, components=None, **kwargs)#
A general class used to to handle reactions with common kinetics where the reaction rate is controlled by the molar concentration of a single component (i.e., the rate reactant) so the concentration can be analytically solved.
With a rate constant of k and time of t, for nth-order reaction of the rate reactant with a starting molar concentration of \([C]_0\), the rate law is given as
\[-\frac{d[C]}{dt} = k*[C]^n\]and the integrated rate law is (n!=1)
\[[C]^{1-n} = [C]_0^{1-n} - (1-n)*k*t\]when n==1, the integrated rate law is
\[[C]= [C]_0*e^{-k*t}\]The linear plot that can be used to determine k is \([C]^g\) vs. t when n!=1 and \(ln([C])\) vs. t when n==1.
Half-life of the component is (n!=1)
\[t_{\frac{1}{2}} = \frac{[C]_0^g*(1-2^{n-1})}{(1-n)*k}\]when n==1, the half-life is
\[t_{\frac{1}{2}} = \frac{ln(2)}{k}\]Note
Only single-phase reaction is supported, and it only be used to react a stream (i.e., property array cannot be used).
- Parameters:
rate_reactant (str) – ID of the rate-limiting component of the rate equation (None for 0th order), for reactions of second order and up, it only applies for the special situation where the rate is controlled by the concentration of a single component.
n (int) – Order of the kinetic reaction, can be a non-negative integer.
k (float) – Kinetic rate constant, unit should match the one used for C/C0 and t (\(\frac{{mol}^g}{unit\\ of\\ t}\)).
t (float) – Time of the reaction for conversion calculation.
reaction (dict or str) – A dictionary of stoichiometric coefficients or a stoichiometric equation written as: i1 R1 + … + in Rn -> j1 P1 + … + jm Pm
reactant (str) – ID of reactant component, will be set to the rate_reactant if not given.
Examples
>>> import qsdsan as qs >>> from qsdsan.processes import KineticReaction as KRxn
>>> kwargs = dict(phase='g', particle_size='Dissolved gas', ... degradability='Undegradable', organic=False) >>> SO2Cl2 = qs.Component('SO2Cl2', **kwargs) >>> SO2 = qs.Component('SO2', **kwargs) >>> Cl2 = qs.Component('Cl2', **kwargs) >>> qs.set_thermo(qs.Components((SO2Cl2, SO2, Cl2))) >>> s1 = qs.Stream('s1', SO2Cl2=100, SO2=10, Cl2=5)
Let’s look at the decomposition of sulfuryl chloride (SO2Cl2) to SO2 and Cl2, which is a first order equation at 320°C [1]
>>> rxn = KRxn('SO2Cl2', n=1, k=2.2e-5, t=1e5, reaction='SO2Cl2 -> SO2 + Cl2') >>> # The conversion is 0 at this stage (because we don't know the concentration of SO2Cl2 yet) >>> rxn.show() KineticReaction (by mol): stoichiometry reactant X[%] SO2Cl2 -> SO2 + Cl2 SO2Cl2 0.00 >>> # React the stream >>> rxn(s1) >>> s1.show() Stream: s1 phase: 'l', T: 298.15 K, P: 101325 Pa flow (kmol/hr): SO2Cl2 11.1 SO2 98.9 Cl2 93.9 >>> rxn.show() # now we know the conversion KineticReaction (by mol): stoichiometry reactant X[%] SO2Cl2 -> SO2 + Cl2 SO2Cl2 88.92 >>> # You can check the rate equation, integrated rate equation, and half-life >>> # of the component >>> rxn.rate_equation -2.2e-5*C(t) - Derivative(C(t), t) >>> rxn.integrated_rate_equation.evalf(n=5) # `evalf` is to limit the digits 0.037578/2.7183**(2.2e-5*t) >>> round(rxn.half_life, 2) 31506.69 >>> # You can also look at the conversion over time, >>> # set `show` to "True" or use fig.show() to see the figure >>> fig = rxn.plot_conversion_over_time(show=False)
References
See also
- property C0#
[float] Molar concentration of the rate reactant at t=0, needed for conversion calculation except for first-order reaction.
- property half_life#
[float] Half-life of the rate reactant.
- property integrated_rate_equation#
Integrated rate equation of the rate reactant.
- property k#
[float] Kinetic rate constant, unit should match the one used for C/C0 and t (\(\frac{{mol}^g}{unit\\ of\\ t}\)).
- property n#
[int] Order of the kinetic reaction, can be a non-negative integer.
- plot_conversion_over_time(**kwargs)#
Plot concentrations of the reactants and products of this kinetic reaction. All keyword arguments will be passed to
sympy.plot()
.
- property rate_equation#
Differential rate equation of the rate reactant.
- property rate_reactant#
[str] ID of the rate-limiting component of the rate equation (None for 0th order). When setting the
- property reaction_components#
Return all chemicals involved in the reaction.
- property t#
[float] Time of the reaction for conversion calculation.