Supporting data for "Machine Learning-Based Prediction of Phase Equilibria and Interfacial Properties of Multi-component CO2 Mixtures with Impurities: Application to CO2 Transportation"
Darshan Raju, Roar Skartlien, Mahinder Ramdin, Thijs J. H. Vlugt
This repository contains the raw and processed data, the trained machine-learning models, and their predictions supporting the above manuscript. It is the archive referred to in the Data availability statement of the paper.
BINARY_INTERACTION_PARAMETERS/
└── KIJ/ experimental Pxy data used to fit the
temperature-dependent binary interaction
parameters kij(T), one folder per binary pair
(23 pairs, Excel format)
MACHINE_LEARNING/
├── DATASET/
│ ├── dataset_data_driven.csv 19 361 rows x 50 columns
│ └── dataset_wsd_residual.csv 41 737 rows x 55 columns
├── TabPFN/
│ ├── P_bubble/ bubble-point pressure
│ ├── P_dew/ dew-point pressure
│ ├── gamma/ interfacial tension
│ └── interfacial_thickness/ interfacial thickness (L10_90)
│ each containing TabPFN_<target>_model.joblib
│ TabPFN_<target>_predictions.csv
└── SVGP/
└── SVGP_residual_model.pt stochastic variational GP residual model
for the hybrid WSD + SVGP interfacial-tension
correction
Both datasets were generated with the PCP-SAFT equation of state coupled to classical density functional theory (cDFT), for multi-component CO2-rich mixtures containing H2, N2, Ar, CH4, O2, CO and H2S.
dataset_data_driven.csv — used to train the data-driven models
(RF, SVR, XGBoost, TabPFN). Columns: state variables (temperature, pressure),
feed composition (z_*), critical and reduced properties (Tc, Pc, Tr, Pr),
the four target properties (P_bubble, P_dew, gamma, interfacial_thickness),
coexisting-phase densities and compositions (liquid_density, vapor_density,
x_*, y_*), interfacial enrichment (E_*), pure-CO2 reference quantities
(gamma0_CO2, rhoL0_CO2, rhoV0_CO2, Tc_CO2, Psat_CO2) and source_id,
which identifies the feed composition (see Table 2 of the main text).
dataset_wsd_residual.csv — used to train the residual-correction models for
the semi-empirical Winterfeld-Scriven-Davis (WSD) interfacial-tension
correlation [P. H. Winterfeld, L. E. Scriven and H. T. Davis, AIChE J. 1978,
24, 1010-1014]. Contains the same
state and composition variables plus per-component bulk densities (rhoL_*,
rhoV_*), the WSD baseline in its corrected and uncorrected forms (gamma_wsd,
gamma_wsd_UC), and the corresponding cDFT-minus-WSD residuals
(gamma_cDFT_minus_wsd_corrected, gamma_cDFT_minus_wsd_uncorrected) that form
the regression target.
One model per target property, with the hyperparameters obtained from the optimization reported in the Supporting Information. All four use TabPFN model version v2.5. the checkpoint variant and the architecture selected by the hyperparameter optimization differ per target:
| Target | Architecture | max_depth |
TabPFN checkpoint |
|---|---|---|---|
P_bubble |
TabPFNRegressor |
– | tabpfn-v2.5-regressor-v2.5_low-skew.ckpt |
interfacial_thickness |
TabPFNRegressor |
– | tabpfn-v2.5-regressor-v2.5_small-samples.ckpt |
P_dew |
DecisionTreeTabPFNRegressor |
4 | tabpfn-v2.5-regressor-v2.5_small-samples.ckpt |
gamma |
DecisionTreeTabPFNRegressor |
2 | tabpfn-v2.5-regressor-v2.5_small-samples.ckpt |
The checkpoint name is recorded inside each .joblib file and can be read back
directly from the loaded object (model.model_path, or model.tabpfn.model_path
for the decision-tree variant).
TabPFN_<target>_predictions.csv has four columns — idx, actual, predicted,
split — covering all 19 361 rows of the data-driven dataset, split
13 552 train / 2 905 validation / 2 904 test. idx is the row index into
dataset_data_driven.csv.
SVGP_residual_model.pt is the trained stochastic variational Gaussian process
used for the residual correction of the WSD interfacial tension, saved as a
PyTorch state dictionary (GPyTorch).
The .joblib files were serialized on a H100 GPU machine, so their tensors carry a
CUDA device tag. On a CPU-only machine joblib.load therefore fails with
RuntimeError: Attempting to deserialize object on a CUDA device but
torch.cuda.is_available() is False.
Redirect the deserialization to the CPU before loading:
import functools, torch, joblib
torch.load = functools.partial(torch.load, map_location="cpu") # CPU-only machines
model = joblib.load("MACHINE_LEARNING/TabPFN/P_bubble/TabPFN_P_bubble_model.joblib")
print(type(model).__name__, model.model_path)On a machine with a working CUDA device, joblib.load works without the override.
Reproducing the predictions requires the same feature matrix and the same
train/validation/test split as used for training. idx in the prediction files
maps each row back to dataset_data_driven.csv.
If you use these data or models, please cite the manuscript. The archived, version-of-record copy of this repository is deposited on Zenodo:
DOI: XXXXX
CC-BY-4.0