Empirical Sorption Models

Dual Mode

$C = k_D \cdot p + \frac{C_{H}^{'}bp}{1 + bp}$

The Dual Mode model is a semi-empirical model that combines Henry's Law ($k_D \cdot p$) with a Langmuir-Hinshelwood-like adsorption model ($\frac{C_{H}^{'}bp}{1 + bp}$) to describe sorption in glassy polymers. It has some predictive power and is widely used in the membrane field.

SorptionModels.fit_modelMethod
fit_model(DualMode(), isotherm::IsothermData, [uncertainty_method=nothing], [apply_weights=false], [use_fugacity=false])

Fit the dual mode model to the pressures and concentrations present in the isotherm.

Options

  • For determining the uncertainty of the model parameters, the :JackKnife, and :Bootstrap methods are available.
  • apply_weights will use a weighted nonlinear regression method to solve the parameters, given that Measurement types are used somewhere in the data.
  • use_fugacity will fit the model to fugacities instead of pressures (they should be present in the isotherm data).
source
SorptionModels.predict_concentrationMethod
predict_concentration(::AbstractVector{<:DualModeModel}, partial_pressures_mpa::AbstractVector{<:Number})

Predict mixed gas concentrations using the dual mode mixing rule (langmuir-type competitive sorption) given a set of fit models and corresponding partial pressures. e.g., predict_concentration([gas_1_model, gas_2_model, ...], [gas_1_pressure, gas_2_pressure, ...])

Note

partial_pressures_mpa is a bit of a misnomer. If the model was fit to fugacities, then fugacities should, of course, be specified (in MPa).

source
SorptionModels.predict_concentrationMethod
predict_concentration(::DualModeModel, pressures_mpa::AbstractVector)

Predict a vector of concentrations for a pure dual mode model given a corresponding vector of pressures. Mixed dual mode models aren't implemented yet # todo

source
SorptionModels.predict_pressureMethod

Predict a pressure (MPa) given a concentration (CC(STP)/CC(Polymer)) according to the Dual Mode model.

The solved pressure for a single component Dual Mode model is:

$P = \frac{\sqrt{b^{2}\left(c_h-x\right)^{2}+2bk\left(c+x\right)+k^{2}}+b\left(x-c\right)-k}{2bk}$

source

Henry's Law

$C = k_D \cdot p$

Henry's law is a simple model that describes rubbery polymers without swelling and simple sorption some materials. This is used essentially when the sorption relationship is linear.

SorptionModels.fit_modelMethod
fit_model(Henry(), isotherm::IsothermData, [uncertainty_method=nothing], [apply_weights=false], [use_fugacity=false])

Fit Henry's Law to the pressures and concentrations present in the isotherm.

source

Flory-Huggins

$C = φ / ((1-φ) \cdot V_{pen}$ where $a = φ * exp((1-φ) + \chi * (1-φ)^2)$, $a$ is activity and $\chi$ is the Flory-Huggins interaction paramter.

The Flory-Huggins model is a lattice fluid model that describes sorption via volume fraction and activity. This model is most typically used for rubbery polymers that exhibit swelling.

SorptionModels.fit_modelMethod
fit_model(::FloryHuggins, activities, concentrations, penetrant_molar_volume; [activity_function])

Fit a Flory Huggins model given an activity vector, concentration vector, penetrant molar volume, and an optional activity conversion function which will allow it to predict_concentration with pressure.

source
SorptionModels.fit_modelMethod
fit_model(FloryHuggins(), isotherm::IsothermData, [uncertainty_method=nothing], [apply_weights=false])

Fit the dual mode model to the pressures and concentrations present in the isotherm. If the isotherm contains activities, then they will be prioritized, otherwise it will look for a conversion function and use pressures.

Options

  • For determining the uncertainty of the model parameters, the :JackKnife, and :Bootstrap methods are available.
  • apply_weights will use a weighted nonlinear regression method to solve the parameters, given that Measurement types are used somewhere in the data.
  • use_fugacity will fit the model to fugacities instead of pressures (they should be present in the isotherm data).
source
SorptionModels.fit_modelMethod
fit_model(::FloryHuggins, pressures_mpa, concentrations, penetrant_molar_volume, activity_function)

Fit a Flory Huggins model given a pressure vector, concentration vector, penetrant molar volume, and a (required) activity conversion function which will allow it to predict_concentration with pressure.

source

Flory-Huggins Dual Mode

$C = φ / ((1-φ) \cdot V_{pen} + \frac{C_{H}^{'}bp}{1 + bp}$ where $a = φ * exp((1-φ) + \chi * (1-φ)^2)$, $a$ is activity and $\chi$ is the Flory-Huggins interaction paramter.

This model combines the Dual Mode model with the Flory-Huggins model, essentially allowing for the description of glassy polymers which exhibit swelling.

SorptionModels.fit_modelMethod
fit_model(FloryHugginsDualMode(), isotherm::IsothermData, [uncertainty_method=nothing], [apply_weights=false])

Fit the dual mode model to the pressures and concentrations present in the isotherm.

Options

  • For determining the uncertainty of the model parameters, the :JackKnife, and :Bootstrap methods are available.
  • apply_weights will use a weighted nonlinear regression method to solve the parameters, given that Measurement types are used somewhere in the data.
  • use_fugacity will fit the model to fugacities instead of pressures (they should be present in the isotherm data).
source

GAB

$C = \frac{C_pkAa}{(1-ka) \cdot (1 - ka - kAa)}$

The GAB model is a pure component model that describes polymer sorption as a function of activity. It excels at vapor sorption, which typically demonstrates a sigmoidally shaped isotherm. Howerver, it is not very predictive, and is usually best suited for use as

  • an accurate interpolation method, or
  • to extract information from the isotherm in the form of the model paramters, which have physical meaning.
SorptionModels.a_predict_concentrationMethod
a_predict_concentration(gm::GABModel, activities::AbstractVector)

Returns a vector of concentrations predicted by the GAB model for a corresponding vector of activities.

source
SorptionModels.a_predict_concentrationMethod
a_predict_concentration(gm::GABModel, activity::Number)

Predict concentration based on a GAB model and given activity. Mixed GAB models aren't implemented due to the empirical nature of the model (and it's lack of predictivity)

source
SorptionModels.fit_modelMethod
fit_model(GAB(), activities::AbstractVector, concentrations::AbstractVector; kwargs...)

Fit a set of activities and corresponding concentrations (CC/CC) to the GAB model.

  • see the above function for applicable key words.
source
SorptionModels.predict_concentrationMethod
predict_concentration(gm::GABModel, pressure::Number)

Predict a concentration given a pressure. Note that GAB is fit to activity, so you will need to specify a pressure_conversion_function(pressure::Number) -> activity::Number when fitting the model. See fit_gab_model

source