| Title: | Adsorption Isotherm Models |
|---|---|
| Description: | Model adsorption behavior using classical isotherms, including Langmuir, Freundlich, Brunauer–Emmett–Teller (BET), and Temkin models. The package supports parameter estimation through both linearized and non-linear fitting techniques and generates high-quality plots for model diagnostics. It is intended for environmental scientists, chemists, and researchers working on adsorption phenomena in soils, water treatment, and material sciences. Functions are compatible with base 'R' and 'ggplot2' for visualization. |
| Authors: | Jajati Mandal [cre], Sandipan Samanta [aut] |
| Maintainer: | Jajati Mandal <[email protected]> |
| License: | GPL |
| Version: | 0.1.0 |
| Built: | 2026-05-12 07:46:24 UTC |
| Source: | https://github.com/cran/AdsorpR |
The BET isotherm extends the Langmuir theory to multilayer adsorption (Brunauer et al., 1938). It is used to estimate surface area and porosity of adsorbents. The model is applicable under specific physical or chemical conditions and is described by the equation:
where is the amount adsorbed, is the equilibrium pressure, is the saturation pressure,
is the monolayer adsorption capacity, and is the BET constant.
For more information, see Brunauer et al. (1938): doi:10.1021/ja01269a023
bet_model(Ce, Qe, Cs = max(Ce) * 1.1)bet_model(Ce, Qe, Cs = max(Ce) * 1.1)
Ce |
Numeric vector of equilibrium concentrations. |
Qe |
Numeric vector of amount adsorbed. |
Cs |
Saturation concentration. |
A named list of BET parameters and model details.
Other linear models: freundlich_model(), langmuir_model(), temkin_model()
Ce <- c(1, 2, 3, 4, 5) Qe <- c(0.8, 1.5, 2.1, 2.6, 2.9) result <- bet_model(Ce, Qe) print(result[1:2]) print(result$`Model Summary`) print(result$Plot)Ce <- c(1, 2, 3, 4, 5) Qe <- c(0.8, 1.5, 2.1, 2.6, 2.9) result <- bet_model(Ce, Qe) print(result[1:2]) print(result$`Model Summary`) print(result$Plot)
The Freundlich isotherm describes adsorption on heterogeneous surfaces and assumes that stronger binding sites are occupied first (Freundlich, 1907). The model is empirical and is expressed by the equation:
where is the amount adsorbed, is the equilibrium concentration,
is the Freundlich constant related to adsorption capacity, and is the heterogeneity factor
(indicating adsorption intensity).
For more information, see Freundlich (1907): doi:10.1002/ange.19070201805
freundlich_model(Ce, Qe)freundlich_model(Ce, Qe)
Ce |
Numeric vector of equilibrium concentrations. |
Qe |
Numeric vector of amount adsorbed. |
A named list of Freundlich parameters and model details.
Other linear models: bet_model(), langmuir_model(), temkin_model()
Ce <- c(1, 2, 3, 4, 5) Qe <- c(0.8, 1.5, 2.1, 2.6, 2.9) result <- freundlich_model(Ce, Qe) print(result[1:2]) print(result$`Model Summary`) print(result$Plot)Ce <- c(1, 2, 3, 4, 5) Qe <- c(0.8, 1.5, 2.1, 2.6, 2.9) result <- freundlich_model(Ce, Qe) print(result[1:2]) print(result$`Model Summary`) print(result$Plot)
The Langmuir isotherm assumes monolayer adsorption onto a surface with a finite number of identical sites. It is characterized by uniform energies of adsorption onto the surface and no transmigration of adsorbate in the plane of the surface. The model is described by the equation:
where is the amount adsorbed, is the equilibrium concentration, is the maximum adsorption capacity,
and is the Langmuir constant.
For more information, see Langmuir (1918): doi:10.1021/ja02242a004
langmuir_model(Ce, Qe)langmuir_model(Ce, Qe)
Ce |
Numeric vector of equilibrium concentrations. |
Qe |
Numeric vector of amount adsorbed. |
A named list of Langmuir parameters and model details.
Ce <- c(1, 2, 3, 4, 5) Qe <- c(0.8, 1.5, 2.1, 2.6, 2.9) result <- langmuir_model(Ce, Qe) print(result)Ce <- c(1, 2, 3, 4, 5) Qe <- c(0.8, 1.5, 2.1, 2.6, 2.9) result <- langmuir_model(Ce, Qe) print(result)
The non-linear BET isotherm extends the Langmuir model to multilayer adsorption and is used to evaluate surface area and porosity of adsorbents. It fits the model directly using non-linear least squares estimation.
The BET equation is expressed as:
where is the amount adsorbed, is the equilibrium concentration,
is the saturation concentration, is the monolayer adsorption capacity,
and is the BET constant.
The model uses non-linear regression to estimate parameters.
nonlinear_bet(Ce, Qe, Cs = max(Ce) * 1.1)nonlinear_bet(Ce, Qe, Cs = max(Ce) * 1.1)
Ce |
Numeric vector of equilibrium concentrations. |
Qe |
Numeric vector of amount adsorbed. |
Cs |
Saturation concentration (default is 110% of the maximum equilibrium concentration). |
A named list of BET parameters and model details, including estimated parameters, model statistics, and a diagnostic plot.
Other nonlinear models: nonlinear_freundlich(), nonlinear_langmuir(), nonlinear_temkin()
Ce <- c(1, 2.5, 4, 5.5, 7) Qe <- c(0.4, 1.0, 1.7, 2.3, 2.7) result <- nonlinear_bet(Ce, Qe) print(result$`BET Qm (mg/g)`) print(result$`BET Cb`) print(result$AIC) print(result$`Pseudo R2`) print(result$Plot)Ce <- c(1, 2.5, 4, 5.5, 7) Qe <- c(0.4, 1.0, 1.7, 2.3, 2.7) result <- nonlinear_bet(Ce, Qe) print(result$`BET Qm (mg/g)`) print(result$`BET Cb`) print(result$AIC) print(result$`Pseudo R2`) print(result$Plot)
The non-linear Freundlich isotherm model is an empirical equation describing adsorption on heterogeneous surfaces. It assumes that adsorption sites are not uniform and that binding energy decreases exponentially with surface coverage.
The model is given by:
where is the amount adsorbed, is the equilibrium concentration,
is the Freundlich constant (adsorption capacity), and is the heterogeneity index
(indicating adsorption intensity).
This function fits the Freundlich model using non-linear least squares regression.
nonlinear_freundlich(Ce, Qe)nonlinear_freundlich(Ce, Qe)
Ce |
Numeric vector of equilibrium concentrations. |
Qe |
Numeric vector of amount adsorbed. |
A named list of Freundlich parameters and model details, including parameter estimates, model diagnostics, and a diagnostic plot.
Other nonlinear models: nonlinear_bet(), nonlinear_langmuir(), nonlinear_temkin()
Ce <- c(0.5, 1, 2, 4, 6, 8) Qe <- c(0.3, 0.8, 1.6, 2.4, 2.9, 3.2) result <- nonlinear_freundlich(Ce, Qe) print(result$`Freundlich Kf`) print(result$`Freundlich n`) print(result$AIC) print(result$`Pseudo R2`) print(result$Plot)Ce <- c(0.5, 1, 2, 4, 6, 8) Qe <- c(0.3, 0.8, 1.6, 2.4, 2.9, 3.2) result <- nonlinear_freundlich(Ce, Qe) print(result$`Freundlich Kf`) print(result$`Freundlich n`) print(result$AIC) print(result$`Pseudo R2`) print(result$Plot)
The non-linear Langmuir isotherm model describes monolayer adsorption onto a surface with a finite number of identical sites. It assumes uniform adsorption energies and no interaction between adsorbed molecules.
The model is defined as:
where is the amount adsorbed, is the equilibrium concentration,
is the maximum adsorption capacity, and is the Langmuir constant.
This function fits the model using non-linear least squares (nls) regression.
nonlinear_langmuir(Ce, Qe)nonlinear_langmuir(Ce, Qe)
Ce |
Numeric vector of equilibrium concentrations. |
Qe |
Numeric vector of amount adsorbed. |
A named list of Langmuir parameters and model details, including estimated parameters, model statistics, and a diagnostic plot.
Other nonlinear models: nonlinear_bet(), nonlinear_freundlich(), nonlinear_temkin()
Ce <- c(1, 2, 4, 6, 8, 10) Qe <- c(0.9, 1.6, 2.3, 2.7, 2.9, 3.0) result <- nonlinear_langmuir(Ce, Qe) print(result$`Langmuir Qmax (mg/g)`) print(result$`Langmuir KL (L/mg)`) print(result$AIC) print(result$`Pseudo R2`) print(result$Plot)Ce <- c(1, 2, 4, 6, 8, 10) Qe <- c(0.9, 1.6, 2.3, 2.7, 2.9, 3.0) result <- nonlinear_langmuir(Ce, Qe) print(result$`Langmuir Qmax (mg/g)`) print(result$`Langmuir KL (L/mg)`) print(result$AIC) print(result$`Pseudo R2`) print(result$Plot)
The non-linear Temkin isotherm model accounts for indirect adsorbate–adsorbate interactions on heterogeneous surfaces. It assumes that the heat of adsorption decreases linearly with increasing coverage.
The model is given by:
where is the amount adsorbed, is the equilibrium concentration,
is the universal gas constant, is the temperature in Kelvin,
is the Temkin constant related to adsorption heat, and is the Temkin equilibrium binding constant.
This function fits the Temkin isotherm using non-linear least squares regression.
nonlinear_temkin(Ce, Qe, R = 8.314, T = 298)nonlinear_temkin(Ce, Qe, R = 8.314, T = 298)
Ce |
Numeric vector of equilibrium concentrations. |
Qe |
Numeric vector of amount adsorbed. |
R |
Universal gas constant (default is 8.314 J/mol·K). |
T |
Temperature in Kelvin (default is 298 K). |
A named list of Temkin parameters and model details, including estimated parameters, model diagnostics, and a diagnostic plot.
Other nonlinear models: nonlinear_bet(), nonlinear_freundlich(), nonlinear_langmuir()
Ce <- c(0.5, 1.5, 3, 4.5, 6) Qe <- c(0.7, 1.3, 2.0, 2.4, 2.7) result <- nonlinear_temkin(Ce, Qe) print(result$`Temkin A`) print(result$`Temkin B`) print(result$AIC) print(result$`Pseudo R2`) print(result$Plot)Ce <- c(0.5, 1.5, 3, 4.5, 6) Qe <- c(0.7, 1.3, 2.0, 2.4, 2.7) result <- nonlinear_temkin(Ce, Qe) print(result$`Temkin A`) print(result$`Temkin B`) print(result$AIC) print(result$`Pseudo R2`) print(result$Plot)
The Temkin isotherm considers the effects of indirect adsorbate–adsorbate interactions. It assumes that the heat of adsorption of all molecules in the layer decreases linearly with coverage (Temkin and Pyzhev, 1940). The model is expressed as:
where is the amount adsorbed, is the equilibrium concentration,
is the universal gas constant, is the absolute temperature,
is the Temkin constant related to adsorption heat, and is the Temkin isotherm constant.
For more information, see Temkin and Pyzhev (1940).
temkin_model(Ce, Qe, R = 8.314, T = 298)temkin_model(Ce, Qe, R = 8.314, T = 298)
Ce |
Numeric vector of equilibrium concentrations. |
Qe |
Numeric vector of amount adsorbed. |
R |
Universal gas constant (default is 8.314 J/mol·K). |
T |
Temperature in Kelvin (default is 298 K). |
A named list of Temkin parameters and model details.
Other linear models: bet_model(), freundlich_model(), langmuir_model()
Ce <- c(1, 2, 3, 4, 5) Qe <- c(0.8, 1.5, 2.1, 2.6, 2.9) result <- temkin_model(Ce, Qe) print(result[1:2]) print(result$`Model Summary`) print(result$Plot)Ce <- c(1, 2, 3, 4, 5) Qe <- c(0.8, 1.5, 2.1, 2.6, 2.9) result <- temkin_model(Ce, Qe) print(result[1:2]) print(result$`Model Summary`) print(result$Plot)