MatLens · Ecuaciones y modelos

Adsorción de gases (BET, porosidad)

Esta sección resume las ecuaciones que MatLens evalúa en el análisis de isotermas de adsorción de gases, tal como están implementadas en matlens/core/adsorption.py. Unidades internas: presión relativa p/p_0 (adimensional), cantidad adsorbida n en mmol/g, anchos de poro en nm, volúmenes de líquido en cm³/g y áreas en m²/g.

Constantes y conversión de unidades

SímboloValor en el códigoSignificado
R8.314462618 J mol⁻¹ K⁻¹constante de los gases
N_A6.02214076×10²³ mol⁻¹constante de Avogadro
V_{\mathrm{STP}}22414 cm³/molvolumen molar del gas a 273.15 K y 101.325 kPa

Conversión de cantidad adsorbida (matlens/core/adsorption.py::loading_factor_to_mmol): 1 cm³(STP)/g equivale a 10^3/V_{\mathrm{STP}} mmol/g; 1 mg/g equivale a 1/M mmol/g (M masa molar del adsorbato, g/mol).

Volumen de líquido adsorbido (matlens/core/adsorption.py::liquid_volume):

V_{\mathrm{liq}} = \frac{n \cdot 10^{-3}\, M}{\rho_{\mathrm{liq}}}

con V_{\mathrm{liq}} en cm³/g, n en mmol/g, M en g/mol y \rho_{\mathrm{liq}} (densidad del adsorbato líquido a la temperatura de análisis) en g/cm³. Valores por defecto de la tabla de adsorbatos: N₂ (77.35 K) \sigma = 0.162 nm², \rho = 0.8061 g/cm³, \gamma = 8.88 mN/m; Ar (87.3 K) \sigma = 0.142 nm², \rho = 1.40 g/cm³, \gamma = 13.2 mN/m; Kr (77.35 K) \sigma = 0.202 nm²; CO₂ (273.15 K) \sigma = 0.17 nm².

Área a partir de la capacidad de monocapa

matlens/core/adsorption.py::area_from_monolayer

S = n_m \cdot 10^{-3}\, N_A\, \sigma \cdot 10^{-18}
SímboloUnidadesDefinición
Sm²/gárea específica
n_mmmol/gcapacidad de monocapa
\sigmanm²área ocupada por una molécula en la monocapa (por defecto 0.162 nm², N₂)

La capacidad de monocapa también se expresa como volumen de gas: v_m = n_m \cdot 10^{-3}\, V_{\mathrm{STP}} (cm³ STP/g).

BET (forma lineal)

matlens/core/adsorption.py::bet_transform, matlens/core/adsorption.py::_bet_evaluate, matlens/core/adsorption.py::bet_range

Origen y supuestos. Brunauer, Emmett y Teller extienden el equilibrio de Langmuir a infinitas capas: la primera capa se adsorbe con calor q_1 y todas las siguientes con el calor de licuefacción q_L, sin interacciones laterales y sobre una superficie energéticamente homogénea. Sumando la serie geométrica de capas se obtiene la isoterma

n = \frac{n_m\,C\,x}{(1-x)\,(1 - x + C x)}, \qquad x = p/p_0, \qquad C \approx \exp\!\left(\frac{q_1 - q_L}{RT}\right)

cuya reordenación es la forma lineal de abajo. Límites de validez: los supuestos fallan a baja presión en superficies heterogéneas (sitios de alta energía llenos primero) y por encima de p/p_0 \approx 0.3 (condensación capilar, número finito de capas); en microporos (isotermas tipo I) el "llenado de monocapa" no existe físicamente y el área BET es solo un área aparente, de ahí los criterios de Rouquerol. \sigma supone un empaquetamiento compacto de N₂ líquido; sobre superficies polares la orientación del cuadrupolo de N₂ hace que el valor real sea menor (motivo por el que ISO 9277 menciona Ar a 87 K).

\frac{p/p_0}{n\,(1 - p/p_0)} = \frac{1}{n_m C} + \frac{C - 1}{n_m C}\,\frac{p}{p_0}

Se ajusta por mínimos cuadrados ordinarios (sin pesos) la recta y = s\,x + b con x = p/p_0 e y = \dfrac{p/p_0}{n(1-p/p_0)}. De la pendiente s y la ordenada b:

n_m = \frac{1}{s + b}, \qquad C = 1 + \frac{s}{b}
SímboloUnidadesDefinición
nmmol/gcantidad adsorbida (rama de adsorción)
p/p_0—presión relativa
n_mmmol/gcapacidad de monocapa
C—constante BET
s, bg/mmolpendiente y ordenada de la recta BET

Procedimiento: se descartan puntos no finitos, con p/p_0 \le 0, p/p_0 \ge 1 o n \le 0, y se ordenan por presión. En modo manual se usan los puntos con p_{lo} \le p/p_0 \le p_{hi} (mínimo 3). El ajuste se rechaza si s + b \le 0.

Incertidumbre (k = 1, propagación lineal a partir de la matriz de covarianza de la regresión, con \hat\sigma^2 = SS_{res}/(N-2)):

u(n_m) = n_m^2 \sqrt{u^2(s) + u^2(b) + 2\,\mathrm{cov}(s,b)}
u(C) = \sqrt{\frac{u^2(s)}{b^2} + \frac{s^2\,u^2(b)}{b^4} - \frac{2\,s\,\mathrm{cov}(s,b)}{b^3}}
u(S) = S\,\frac{u(n_m)}{n_m}

La incertidumbre de \sigma no se propaga.

Qué no incluye la incertidumbre. Es la incertidumbre estadística de la regresión lineal (k=1; multiplique por 2 para un intervalo de cobertura aproximado del 95 %). No incluye: la elección del rango (véase el mapa de ventanas, que la cuantifica aparte), el valor de \sigma, el error de p_0 y de la medida volumétrica, la correlación entre puntos, ni el sesgo del modelo BET (heterogeneidad, microporos). La transformación y = x/[n(1-x)] amplifica el ruido a x alto, y la regresión no pondera los puntos por ello.

Avisos que emite el código (en BETResult.warnings): menos de 5 puntos en el rango (ISO 9277 recomienda al menos 5); R^2 < 0.999; C < 5 (monocapa poco fiable); C > 500 (típico de microporos, área aparente). Un rango que no cumple los cuatro criterios de Rouquerol tiene ok = False. Errores (sin resultado): menos de 3 puntos en el rango manual o s + b \le 0.

Referencias: Brunauer, Emmett & Teller, J. Am. Chem. Soc. 60 (1938) 309, doi:10.1021/ja01269a023; ISO 9277:2022 §6.2 / Anexo C; Thommes et al. (IUPAC), Pure Appl. Chem. 87 (2015) 1051, doi:10.1515/pac-2014-1117.

Ejemplo resuelto

Caso sintético: isoterma BET ideal (infinitas capas) con n_m = 4.0 mmol/g y C = 120, 23 presiones de 10^{-3} a 0.99 y ruido relativo del 0.5 % (semilla 5); N₂, \sigma = 0.162 nm². Área verdadera S = 390.2 m²/g.

bet_auto(p, n) → rango p/p_0 = 0.001 – 0.3 (14 puntos), pendiente s = 0.2475 g/mmol, ordenada b = 0.002104 g/mmol, R^2 = 0.999919.

n_m = 4.007 \pm 0.0094 mmol/g (v_m = 89.82 cm³ STP/g), C = 118.6 \pm 5, S_\text{BET} = 390.9 \pm 0.91 m²/g (k=1).

Criterios de Rouquerol: 1: sí (C = 118.6); 2: sí (creciente; máximo de n(1−p/p₀) en p/p₀ = 0.95); 3: sí (p/p₀(n_m) = 0.08537; rango 0.001–0.3); 4: sí (1/(√C+1) = 0.08411; experimental = 0.08537 (-1.5 %)).

Avisos: ninguno.

Criterios de consistencia de Rouquerol

matlens/core/adsorption.py::_bet_evaluate, matlens/core/adsorption.py::rouquerol_transform, matlens/core/adsorption.py::rouquerol_max_index

Cada rango BET se evalúa con los cuatro criterios:

  1. C > 0 (y ordenada b > 0).
  2. n(1 - p/p_0) crece estrictamente con p/p_0 dentro del rango, y el límite superior del rango no sobrepasa la p/p_0 del máximo de n(1-p/p_0) calculado sobre toda la rama.
  3. La presión relativa experimental a la que la isoterma alcanza n_m, p_{\mathrm{exp}}, está dentro del rango. p_{\mathrm{exp}} se obtiene por interpolación lineal de p/p_0 frente a la envolvente monótona creciente de n.
  4. La presión de monocapa predicha por BET coincide con la experimental dentro de una tolerancia relativa del 10 %:
p_m = \frac{1}{\sqrt{C} + 1}, \qquad \frac{|p_m - p_{\mathrm{exp}}|}{p_{\mathrm{exp}}} \le 0.10

Referencias: Rouquerol, Llewellyn & Rouquerol, Stud. Surf. Sci. Catal. 160 (2007) 49, doi:10.1016/S0167-2991(07)80008-5; ISO 9277:2022 §6.2 / Anexo C; tolerancia del ±10 % según ISO 9277:2022 y BETSI (Osterrieth et al., Adv. Mater. 34 (2022) 2201502).

Criterio 2 en la práctica: el máximo de n(1-p/p_0) se busca en toda la rama limpia, no solo en la ventana de búsqueda; por tanto un rango puede fallar el criterio 2 aunque la transformada sea creciente dentro de él. El criterio 3 usa la envolvente monótona de n para que una isoterma ruidosa no produzca varias soluciones de n(p_\text{exp}) = n_m. Fundamento físico: n(1-p/p_0) decrece cuando la isoterma deja de crecer más deprisa que 1/(1-p/p_0), señal de que la multicapa está saturada (microporos llenos) y la ecuación BET ya no describe el dato; los criterios 3 y 4 exigen que la monocapa obtenida sea autoconsistente con la propia isoterma.

Búsqueda automática del rango BET

matlens/core/adsorption.py::bet_auto

Se recorren todos los rangos contiguos de puntos dentro de la ventana 5\times10^{-4} \le p/p_0 \le 0.35 (valores por defecto), primero con un mínimo de 5 puntos y, si ninguno cumple los cuatro criterios, con un mínimo de 3. Entre los rangos que cumplen los cuatro criterios se elige por este orden: R^2 \ge 0.999, mayor número de puntos y, después, mayor R^2. Si ningún rango cumple todo, se devuelve el que cumple los criterios 1, 2 y 3 con la menor desviación relativa del criterio 4 (y después el mayor número de puntos), marcado como no válido y con un aviso.

Mapa de ventanas BET

matlens/core/adsorption.py::bet_window_map

Se evalúan todos los rangos contiguos de al menos 5 puntos dentro de la misma ventana (5\times10^{-4} a 0.35) y se conservan los que cumplen los cuatro criterios de Rouquerol y tienen R^2 \ge 0.995. Se informan el área mínima, la mediana y la máxima, y la dispersión relativa:

\delta_S = \frac{S_{\max} - S_{\min}}{\tilde S}

donde \tilde S es la mediana. Una dispersión grande indica que el área BET de la isoterma está mal definida (típico de isotermas tipo I microporosas).

A diferencia de bet_auto, el mapa no baja a 3 puntos ni devuelve un rango de reserva: si ningún rango pasa, las tres áreas son NaN y el mapa está vacío. El umbral de linealidad del mapa (R^2 \ge 0.995) es más laxo que el preferido por bet_auto (0.999). La dispersión \delta_S es un indicador de la ambigüedad del rango, no una incertidumbre con nivel de confianza.

Referencia: en el espíritu de BETSI, Osterrieth et al., Adv. Mater. 34 (2022) 2201502, doi:10.1002/adma.202201502.

Nota (diferencia con BETSI): BETSI añade más filtros (p. ej. sobre el número de puntos y la selección final de un área); MatLens solo informa el mínimo, la mediana y el máximo de las áreas de los rangos válidos.

Ejemplo resuelto

Misma isoterma que el ejemplo anterior.

bet_window_map(p, n) → 42 rangos contiguos (≥ 5 puntos) cumplen los cuatro criterios con R^2 \ge 0.995; área mínima 387.1, mediana 390.9 y máxima 394.6 m²/g; dispersión relativa \delta_S = 1.92 %.

Langmuir

matlens/core/adsorption.py::langmuir_area

\frac{p/p_0}{n} = \frac{1}{n_m}\,\frac{p}{p_0} + \frac{1}{K\,n_m}

Recta por mínimos cuadrados ordinarios de (p/p_0)/n frente a p/p_0 en el rango elegido (mínimo 3 puntos). Con pendiente s y ordenada b:

n_m = \frac{1}{s}, \qquad K = \frac{s}{b}, \qquad S = n_m\,N_A\,\sigma
SímboloUnidadesDefinición
n_mmmol/gcapacidad de monocapa de Langmuir
K— (en la escala de p/p_0)constante de Langmuir; infinito si b \le 0

Se rechaza el ajuste si s \le 0. No se calcula incertidumbre. Validez: monocapa sin interacciones laterales; sobreestima el área de sólidos mesoporosos (isotermas II/IV) y solo es razonable, como área aparente, para isotermas tipo I.

Referencia: implementación propia.

Curvas de espesor estadístico t

matlens/core/adsorption.py::thickness_harkins_jura, matlens/core/adsorption.py::thickness_halsey, matlens/core/adsorption.py::thickness_carbon_black

Harkins–Jura (t en nm, \log_{10}):

t = \left(\frac{0.1399}{0.034 - \log_{10}(p/p_0)}\right)^{1/2}

Halsey (t en nm, logaritmo natural):

t = 0.354\left(\frac{-5}{\ln(p/p_0)}\right)^{1/3}

Negro de carbono (de Boer/Magee, STSA, ASTM D6556; t en nm, válida para 0.2 < p/p_0 < 0.5):

t = 0.1\left[0.88\,(p/p_0)^2 + 6.45\,(p/p_0) + 2.98\right]

t-plot

matlens/core/adsorption.py::t_plot

Se calcula t(p/p_0) con el modelo elegido (por defecto Harkins–Jura) para los puntos con p/p_0 < 0.999 y se ajusta por mínimos cuadrados ordinarios la recta n = s\,t + b con los puntos cuyo espesor está en el rango 0.45 \le t \le 0.70 nm (por defecto; mínimo 3 puntos).

V_{\mathrm{micro}} = b\,f, \qquad S_{\mathrm{ext}} = s\,f\cdot 10^{3}, \qquad S_{\mathrm{micro}} = S_{\mathrm{BET}} - S_{\mathrm{ext}}
SímboloUnidadesDefinición
smmol g⁻¹ nm⁻¹pendiente del t-plot
bmmol/gordenada en el origen
fcm³/mmolvolumen de líquido por mmol, f = 10^{-3} M/\rho_{\mathrm{liq}}
V_{\mathrm{micro}}cm³/gvolumen de microporos (líquido)
S_{\mathrm{ext}}m²/gárea externa
S_{\mathrm{micro}}m²/gárea de microporos (solo si se proporciona S_{\mathrm{BET}})

El factor 10^3 convierte cm³ g⁻¹ nm⁻¹ en m²/g. Si b < 0 se toma V_{\mathrm{micro}} = 0 y se avisa de que no hay microporosidad detectable.

Incertidumbre (k = 1, error típico de la regresión): u(S_{\mathrm{ext}}) = u(s)\,f\cdot10^3 y u(V_{\mathrm{micro}}) = u(b)\,f. No incluye el error de la curva t de referencia (que es la fuente dominante: las curvas Harkins–Jura, Halsey y de negro de carbono dan áreas externas distintas para el mismo dato) ni la elección del rango de t.

Fundamento y validez. Por encima del llenado de microporos, la adsorción en la superficie externa crece como una película de espesor t(p/p_0), igual que en un sólido no poroso de referencia; por eso n es lineal en t con pendiente proporcional al área externa y ordenada igual a la cantidad retenida en microporos. Falla si el rango de t incluye llenado de microporos (curvatura a t bajo) o condensación capilar en mesoporos (curvatura hacia arriba a t alto), y si la química superficial difiere de la del material para el que se calibró la curva t.

Avisos del código: ordenada negativa (no hay microporosidad detectable; V_\text{micro} = 0); curva de negro de carbono fuera de 0.2 < p/p_0 < 0.5 (se recuerda siempre que se elige ese modelo). Error: menos de 3 puntos en el rango de t.

Referencias: Lippens & de Boer, J. Catal. 4 (1965) 319, doi:10.1016/0021-9517(65)90307-6 (método t); Harkins & Jura, J. Am. Chem. Soc. 66 (1944) 1366, doi:10.1021/ja01236a048.

Ejemplo resuelto

Caso sintético: llenado de microporos de Langmuir (0.6 mmol/g, K = 500) más una superficie externa de 50 m²/g cuyo espesor sigue Harkins–Jura, n_\text{ext} = t\,S_\text{ext}/(f\cdot10^3); ruido relativo del 0.3 % (semilla 6); N₂ con f = 0.03475 cm³/mmol. Valores verdaderos: V_\text{micro} = 0.02085 cm³/g (casi saturado en el rango de ajuste), S_\text{ext} = 50 m²/g.

t_plot(p, n, N2) (Harkins–Jura, 0.45 \le t \le 0.70 nm, 5 puntos) → pendiente = 1.502 mmol g⁻¹ nm⁻¹, ordenada = 0.5634 mmol/g, R^2 = 0.99939; S_\text{ext} = 52.21 \pm 0.74 m²/g, V_\text{micro} = 0.01958 \pm 0.00041 cm³/g (k=1).

Gráfico αs

matlens/core/adsorption.py::alpha_s_plot

Con una isoterma de referencia no porosa de área conocida S_{\mathrm{ref}} (m²/g):

\alpha_s(p/p_0) = \frac{n_{\mathrm{ref}}(p/p_0)}{n_{\mathrm{ref}}(0.4)}

(n_{\mathrm{ref}} interpolada linealmente; presión de reducción 0.4 por defecto). Recta n = s\,\alpha_s + b con los puntos en 0.8 \le \alpha_s \le 1.6 (mínimo 3), y

S_{\mathrm{ext}} = \frac{s\,S_{\mathrm{ref}}}{n_{\mathrm{ref}}(0.4)}, \qquad V_{\mathrm{micro}} = \max(b, 0)\,f

Incertidumbre (k = 1): u(S_{\mathrm{ext}}) = u(s)\,S_{\mathrm{ref}}/n_{\mathrm{ref}}(0.4), u(V_{\mathrm{micro}}) = u(b)\,f.

Referencia: implementación propia.

Ecuación de Kelvin

matlens/core/adsorption.py::kelvin_radius

r_K = \frac{2\,\gamma\,V_m}{f_m\,R\,T\,\left[-\ln(p/p_0)\right]} \cdot 10^{9} \;\,(+\,0.3\ \text{nm si KJS})
SímboloUnidadesDefinición
r_Knmradio del núcleo (core) de Kelvin
\gammaN/m (se introduce en mN/m)tensión superficial del líquido
V_mm³/molvolumen molar del líquido, V_m = M/\rho_{\mathrm{liq}}\cdot10^{-6}
TKtemperatura de análisis
f_m—1 para menisco hemisférico (desorción), 2 para menisco cilíndrico (adsorción)

Corrección KJS opcional: r_K + 0.3 nm (Kruk–Jaroniec–Sayari, calibrada en MCM-41 de 2 a 6.5 nm).

Origen y validez. La ecuación de Kelvin iguala el potencial químico del vapor, RT\ln(p/p_0), con el del líquido bajo un menisco de curvatura media f_m/r (Young–Laplace, \Delta p = 2\gamma/r para el hemisferio, \gamma/r para el cilindro). Supone líquido incompresible con tensión superficial macroscópica y ángulo de contacto nulo. Pierde validez por debajo de unos 2 nm de diámetro (la tensión superficial y la densidad dejan de ser las del líquido macroscópico) y subestima el tamaño en ese intervalo, motivo de la corrección KJS y de los métodos DFT.

Ejemplo resuelto

N₂ a 77.35 K: \gamma = 8.88 mN/m, M = 28.01 g/mol, \rho = 0.8061 g/cm³ (tabla de adsorbatos de MatLens).

p/p_0r_K hemisf. (nm)r_K cilínd. (nm)t H–J (nm)D = 2(r_K+t) desorción (nm)
0.41.0470.52370.56913.233
0.61.8790.93930.73955.236
0.84.3012.151.03410.67
0.99.1094.5541.32420.87

BJH y Dollimore–Heal

matlens/core/adsorption.py::psd_mesopores

Poros cilíndricos. Se usa una sola rama (por defecto desorción) en el intervalo 0.35 \le p/p_0 \le 0.99, recorrida de mayor a menor presión. Para cada punto se calcula el espesor t (por defecto Harkins–Jura), el radio de Kelvin r_K y el radio de poro

r_p = r_K + t

Para cada intervalo i entre dos puntos consecutivos: \Delta V_i es la disminución del volumen de líquido adsorbido, \bar t_i, \bar r_{K,i}, \bar r_{p,i} son medias aritméticas de los extremos y \Delta t_i es la disminución del espesor.

BJH:

V_{p,i} = \left(\frac{\bar r_{p,i}}{\bar r_{K,i} + \Delta t_i}\right)^2\left[\Delta V_i - \Delta t_i \sum_{j<i}\frac{\bar r_{p,j} - \bar t_i}{\bar r_{p,j}}\,A_j\right]

Dollimore–Heal:

V_{p,i} = \left(\frac{\bar r_{p,i}}{\bar r_{p,i} - \bar t_i}\right)^2\left[\Delta V_i - \Delta t_i \sum_{j<i}A_j + \Delta t_i\,\bar t_i \sum_{j<i}\frac{A_j}{\bar r_{p,j}}\right]

con A_j = 2V_{p,j}/\bar r_{p,j} (área de pared; se informa en m²/g multiplicando por 10^3). Los volúmenes negativos se fijan a cero. Resultados por intervalo:

D = 2\,\bar r_p, \qquad \frac{dV}{dD} = \frac{V_p}{2\,\Delta r_p}, \qquad \frac{dV}{d\log D} = \frac{V_p}{\log_{10}(r_{p,\mathrm{ant}}/r_{p,\mathrm{sig}})}

con D en nm, V_p en cm³/g y volumen acumulado sumado de anchos pequeños a grandes. El modo de la distribución se toma en el máximo de dV/d\log D suavizado con media móvil de 5 puntos.

Validez: en la rama de adsorción (menisco cilíndrico) el tamaño se sobreestima; la rama de desorción puede mostrar cavitación o bloqueo de poro hacia p/p_0 \approx 0.42 con N₂ a 77 K. No se calcula incertidumbre.

Referencias: Barrett, Joyner & Halenda, J. Am. Chem. Soc. 73 (1951) 373, doi:10.1021/ja01145a126; Dollimore & Heal, J. Appl. Chem. 14 (1964) 109 (sin DOI verificado); discretización de los artículos originales tal como la implementa psd_meso de pyGAPS (MIT).

Horvath–Kawazoe y Rege–Yang

matlens/core/adsorption.py::psd_horvath_kawazoe

Distribución de microporos calculada por pyGAPS 4.6 (MIT, © 2022 Paul Iacomi) mediante un envoltorio. MatLens usa los puntos con p/p_0 \le 0.2 (mínimo 5), parámetros de adsorbato solo para N₂ (77 K) y Ar (87 K), geometría ranura (carbono) o cilindro (óxidos), y convierte la distribución con dV/d\log w = (dV/dw)\,w\ln 10. Modelo semiempírico; ancho de poro efectivo; los parámetros de Ar son aproximados.

Referencia: implementación de pyGAPS (MIT).

Ajuste de kernel DFT

matlens/core/adsorption.py::psd_dft

n(p_k) = \sum_w K(p_k, w)\,V_w, \qquad V_w \ge 0

El kernel K (mmol por cm³ de poro frente a p/p_0, anchos en nm) se interpola linealmente en presión, añadiendo el punto K(0, w) = 0. Se resuelve por mínimos cuadrados no negativos (NNLS) con pesos relativos y regularización de segunda diferencia:

\min_{V \ge 0}\; \sum_k \left[\omega_k\left(n_k - \sum_w K_{kw}V_w\right)\right]^2 + \lambda^2\sum_i \left(V_{i} - 2V_{i+1} + V_{i+2}\right)^2
\omega_k = \frac{1}{n_k + 0.05\,\max(n)}, \qquad \lambda = 0.05\,\frac{\lVert \omega K\rVert_F}{N_w}

(0.05 es el factor de suavizado por defecto; N_w número de anchos del kernel). Intervalo de presiones: 10^{-6} \le p/p_0 \le 0.99 limitado al del kernel, mínimo 6 puntos. dV/dw = V_w/\Delta w con \Delta w por diferencias centradas. Validez: solo para el adsorbato, la temperatura y el modelo de poro del kernel (por defecto el kernel N₂/77 K de poros en ranura de carbono incluido en pyGAPS, que se lee en tiempo de ejecución y no se redistribuye); no es un NLDFT/QSDFT comercial. No se calcula incertidumbre.

Referencia: implementación propia.

Volumen total de poro y ancho medio

matlens/core/adsorption.py::total_pore_volume, matlens/core/adsorption.py::mean_pore_width

Regla de Gurvich: V_{\mathrm{tot}} = V_{\mathrm{liq}}(n(p/p_0 = 0.99)) en la rama de adsorción (interpolación lineal; si el último punto está a menos de 0.01 del objetivo, se usa ese punto). Ancho medio para poros cilíndricos:

\bar D = \frac{4\,V_{\mathrm{tot}}}{S}\cdot 10^{3}

con \bar D en nm, V_{\mathrm{tot}} en cm³/g y S en m²/g.

Referencia: implementación propia.

Calor isostérico

matlens/core/adsorption.py::isosteric_heat

Clausius–Clapeyron a cantidad adsorbida constante:

\ln p = -\frac{q_{st}}{R}\,\frac{1}{T} + \text{cte}

Requiere al menos dos isotermas a temperaturas distintas con presión absoluta (bar). En cada isoterma se toma la envolvente monótona de n y se interpola \ln p linealmente en n sobre una rejilla de 30 cargas en el intervalo común. Para cada carga, recta por mínimos cuadrados ordinarios de \ln p frente a 1/T: q_{st} = -s\,R\cdot10^{-3} (kJ/mol, positivo), con u(q_{st}) = u(s)\,R\cdot10^{-3} (k = 1). Con solo dos temperaturas no hay estimación de error.

Referencia: implementación propia.

Constante de Henry

matlens/core/adsorption.py::henry_constant

Ajuste por el origen de los puntos de menor presión (los 6 primeros por defecto, o p \le p_{\max}):

K_H = \frac{\sum p_i n_i}{\sum p_i^2}

y extrapolación virial: recta de \ln(n/p) frente a n, con K_{H,\mathrm{virial}} = e^{b}. K_H en mmol g⁻¹ bar⁻¹. No se calcula incertidumbre.

Referencia: implementación propia.

IAST binaria

matlens/core/adsorption.py::iast_binary

Presión de expansión reducida de cada isoterma pura, interpolada linealmente en p (tramo de Henry por debajo del primer punto y n constante por encima del último):

\pi_i(P^0) = \int_0^{P^0}\frac{n_i(p)}{p}\,dp

Se resuelve (método de Brent) \pi_1(P y_1/x_1) = \pi_2(P y_2/(1-x_1)) para la fracción molar adsorbida x_1, y

\frac{1}{n_t} = \frac{x_1}{n_1^0} + \frac{1 - x_1}{n_2^0}, \qquad S_{12} = \frac{x_1/x_2}{y_1/y_2}

Se marca como extrapolado si alguna presión de referencia supera el máximo medido.

Referencia: implementación propia.

Generado desde MatLens c0ab138. ← Todas las técnicas