Source code for pyrast.isotherms.dslangmuir

"""Dual Site Langmuir isotherm model."""

import numpy as np

from pyrast.isotherms.model_isotherm import ModelIsotherm


[docs] class DSLangmuir(ModelIsotherm, model_name='DSLangmuir'): # Class variables for every instance name = 'DSLangmuir' param_names = ('M1', 'K1', 'M2', 'K2') param_default_bounds = ((0., np.inf), (0., np.inf), (0., np.inf), (0., np.inf))
[docs] def loading(self, pressure): r"""Returns loading as a function of pressure (or fugacity). Loading in the Dual Site Langmuir model is given as: .. math:: q(P) = M_1\frac{K_1P}{1+K_1P} + M_2\frac{K_2P}{1+K_2P} Args: pressure(float or np.ndarray): pressure(s) at which to calculate loading Returns: float or np.ndarray: loading as same variable type as input """ k1p = self.model_parameters["K1"] * pressure k2p = self.model_parameters["K2"] * pressure return self.model_parameters["M1"] * k1p / (1.0 + k1p) + \ self.model_parameters["M2"] * k2p / (1.0 + k2p)
[docs] def spreading_pressure(self, pressure): r"""Returns spreading pressure as a function of pressure (or fugacity). Spreading pressure in the Dual Site Langmuir model is given as: .. math:: \phi(P) = M_1\ln(1+K_1P) + M_2\ln(1+K_2P) Args: pressure(float or np.ndarray): pressure(s) at which to calculate spreading pressure Returns: float or np.ndarray: spreading pressure as same variable type as input """ return self.model_parameters["M1"] * np.log( 1.0 + self.model_parameters["K1"] * pressure) +\ self.model_parameters["M2"] * np.log( 1.0 + self.model_parameters["K2"] * pressure)
[docs] def initial_guess(self): """Provides initial guess for model parameters. For the Dual Site Langmuir isotherm, we follow the scheme of pyIAST and assume parameter values based on the Langmuir model. """ langmuir_guess = super().initial_guess() return { 'M1': 0.5 * langmuir_guess['M'], 'K1': 0.4 * langmuir_guess['K'], 'M2': 0.5 * langmuir_guess['M'], 'K2': 0.6 * langmuir_guess['K'], }