Source code for chempy.thermodynamics.expressions

# -*- coding: utf-8 -*-
from __future__ import (absolute_import, division, print_function)

import math

from ..util.pyutil import deprecated
from ..util._expr import Expr


[docs]class MassActionEq(Expr): argument_names = ('equilibrium_constant',)
[docs] def active_conc_prod(self, variables, backend=math, equilibrium=None): result = None for exp_factor, stoichs in [(1, equilibrium.prod), (-1, equilibrium.reac)]: for k, v in stoichs.items(): if result is None: result = variables[k]**(exp_factor*v) else: result *= variables[k]**(exp_factor*v) return result
[docs] def eq_const(self, variables, backend=math, **kwargs): eq_c, = self.all_args(variables, backend=backend, **kwargs) return eq_c
def __call__(self, *args, **kwargs): return self.eq_const(*args, **kwargs)
[docs] def equilibrium_equation(self, variables, backend=math, equilibrium=None, **kwargs): return self.eq_const(variables, backend=backend, **kwargs) - self.active_conc_prod( variables, backend=backend, equilibrium=equilibrium, **kwargs)
[docs] @classmethod def from_callback(cls, callback, attr='eq_const', **kwargs): return super(MassActionEq, cls).from_callback(callback, attr=attr, **kwargs)
[docs]@deprecated(use_instead=MassActionEq) class EqExpr(Expr): """ Baseclass for equilibrium expressions """ kw = {'eq': None, 'ref': None}
[docs]class GibbsEqConst(MassActionEq): argument_names = ('dH_over_R', 'dS_over_R') parameter_keys = ('temperature',)
[docs] def eq_const(self, variables, backend=math, **kwargs): dH_over_R, dS_over_R = self.all_args(variables, backend=backend) T, = self.all_params(variables, backend=backend) return backend.exp(dS_over_R - dH_over_R/T)