Source code for chempy.kinetics.integrated

"""
This module collects special cases of systems for which analytic solutions
are available.
"""
from __future__ import (absolute_import, division, print_function)

from .._util import get_backend

# Add documentation
# Rename esoteric parameter names


[docs]def dimerization_irrev(t, kf, initial_C, P0=1, t0=0): return 1/(1/initial_C + 2*kf*(t-t0))
[docs]def pseudo_irrev(t, kf, P0, t0, excess_C, limiting_C, eps_l, backend=None): be = get_backend(backend) return P0*eps_l*limiting_C*(1 - be.exp(-excess_C*kf*(t-t0)))
pseudo_irrev.name = 'Pseudo first order irreversible'
[docs]def pseudo_rev(t, kf, P0, t0, excess_C, limiting_C, eps_l, beta, backend=None): be = get_backend(backend) kb = kf/beta return P0*eps_l*limiting_C*excess_C*kf/(excess_C*kf + kb)*( 1 - be.exp(-(excess_C*kf+kb)*(t-t0)))
pseudo_rev.name = 'Pseudo first order reversible'
[docs]def binary_irrev(t, kf, P0, t0, excess_C, limiting_C, eps_l, backend=None): be = get_backend(backend) return P0*eps_l*excess_C*(1 - be.exp(-kf*(excess_C-limiting_C)*(t-t0)))/( excess_C/limiting_C - be.exp(-kf*(t-t0)*(excess_C-limiting_C)))
binary_irrev.name = 'Second order irreversible'
[docs]def binary_rev(t, kf, P0, t0, excess_C, limiting_C, eps_l, beta, backend=None): be = get_backend(backend) one = backend.pi**0 kb = kf/beta a = kf b = -excess_C*kf - limiting_C*kf - kb c = excess_C*limiting_C*kf P = (b**2 - 4*a*c)**(one/2) Q = P + b R = P - b return P0*eps_l*Q*(1 - be.exp(P*(t-t0)))/(2*a*(Q/R + be.exp(P*(t-t0))))
binary_rev.name = 'Second order reversible'