Source code for pyrast.isotherms.quadratic

"""Quadratic isotherm model."""

import numpy as np

from pyrast.isotherms.model_isotherm import ModelIsotherm


[docs] class Quadratic(ModelIsotherm, model_name='Quadratic'): # Class variables for every instance name = 'Quadratic' param_names = ('M', 'Ka', 'Kb') param_default_bounds = ((0., np.inf), (0., np.inf), (0., np.inf))
[docs] def loading(self, pressure: float): r"""Returns loading as a function of pressure (or fugacity). Loading in the Quadratic model is given as: .. math:: q(P) = M\frac{(K_a + 2 K_b P)P}{1+K_aP+K_bP^2} 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 """ return self.model_parameters['M'] * \ (self.model_parameters['Ka'] + 2.0 * self.model_parameters['Kb'] * pressure) * \ pressure / (1.0 + self.model_parameters['Ka'] * pressure + self.model_parameters['Kb'] * pressure**2)
[docs] def spreading_pressure(self, pressure: float): r"""Returns spreading pressure as a function of pressure (or fugacity). Spreading pressure in the Quadratic model is given as: .. math:: \phi(P) = M\ln(1+K_aP+K_bP^2) 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['M'] * \ np.log(1.0 + self.model_parameters['Ka'] * pressure + self.model_parameters['Kb'] * pressure**2)
[docs] def initial_guess(self): """Provides initial guess for model parameters. For the Quadratic isotherm, we follow the scheme of pyIAST and assume parameter values based on the Langmuir model. """ langmuir_guess = super().initial_guess() return {'M': langmuir_guess['M'] / 2.0, 'Ka': langmuir_guess['K'], 'Kb': langmuir_guess['K']**2.0}