Pygaps

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 11

doi.org/10.26434/chemrxiv.7970402.

v1

pyGAPS: A Python-Based Framework for Adsorption Isotherm


Processing and Material Characterisation
Paul Iacomi, Philip L. Llewellyn

Submitted date: 09/04/2019 • Posted date: 10/04/2019


Licence: CC BY-NC-ND 4.0
Citation information: Iacomi, Paul; Llewellyn, Philip L. (2019): pyGAPS: A Python-Based Framework for
Adsorption Isotherm Processing and Material Characterisation. ChemRxiv. Preprint.

Material characterisation through adsorption is a widely-used laboratory technique. The isotherms obtained
through volumetric or gravimetric experiments impart insight through their features but can also be analysed to
determine material characteristics such as specific surface area, pore size distribution, surface energetics, or
used for predicting mixture adsorption. The pyGAPS (python General Adsorption Processing Suite)
framework was developed to address the need for high-throughput processing of such adsorption data,
independent of the origin, while also being capable of presenting individual results in a user-friendly manner. It
contains many common characterisation methods such as: BET and Langmuir surface area, t and α plots,
pore size distribution calculations (BJH, Dollimore-Heal, Horvath-Kawazoe, DFT/NLDFT kernel fitting),
isosteric heat calculations, IAST calculations, isotherm modelling and more, as well as the ability to import and
store data from Excel, CSV, JSON and sqlite databases. In this work, a description of the capabilities of
pyGAPS is presented. The code is then be used in two case studies: a routine characterisation of a
UiO-66(Zr) sample and in the processing of an adsorption dataset of a commercial carbon (Takeda 5A) for
applications in gas separation.

File list (2)

manuscript.pdf (2.07 MiB) view on ChemRxiv download file

manuscript-SI.pdf (162.36 KiB) view on ChemRxiv download file


pyGAPS: A python-based framework for
adsorption isotherm processing and material
characterisation
Paul Iacomia, * and Philip L. Llewellyna
a
Aix-Marseille Université, CNRS, MADIREL UMR 7246, 13397 Marseille, France

* mail@pauliacomi.com

Material characterisation through adsorption is a widely-used laboratory technique. The isotherms obtained through volumetric or gravi-
metric experiments impart insight through their features but can also be analysed to determine material characteristics such as specific
surface area, pore size distribution, surface energetics, or used for predicting mixture adsorption. The pyGAPS (python General Adsorption
Processing Suite) framework was developed to address the need for high-throughput processing of such adsorption data, independent of the
data origin, while also being capable of presenting individual results in a user-friendly manner. It contains many common characterisation
methods such as: BET and Langmuir surface area, t and α plots, pore size distribution calculations (BJH, Dollimore-Heal, Horvath-Kawazoe,
DFT/NLDFT kernel fitting), isosteric heat calculations, IAST calculations, isotherm modelling and more, as well as the ability to import and
store data from Excel, CSV, JSON and sqlite databases. In this work, a description of the capabilities of pyGAPS is presented. The code
is then be used in two case studies: a routine characterisation of a UiO-66(Zr) sample and in the processing of an adsorption dataset of a
commercial carbon (Takeda 5A) for applications in gas separation.

Source code: github.com/pauliacomi/pyGAPS


Documentation: pygaps.readthedocs.io/

Keywords: Material characterisation; Adsorption; Data processing software; Parameter estimation

1. Introduction Processing of measured isotherms is often done using soft-


ware that is specific to the bench-top instrument they were
Historically, the processing of isotherms was done by hand,
recorded on. These programs suffice for most purposes, but
with large worksheets being used for the calculations. As an
are often black-boxes which do not allow for extensibility.
example, we point out that one of the initial limitations of
Several attempts have been made by other researchers to stan-
the Barrett–Joyner-Halenda method for pore size distribution
dardize parts of the characterisation process. The ISOFIT
(PSD) was that each point had to be determined with an
script developed by Matott and Rabideau 5 , can be used to
approximation of critical pore radius, due to the tedious work
fit isotherms with various models and fitting routines. Two
involved in the mathematical calculation 1 .
software packages developed for multicomponent adsorption
The advent of computers meant that arithmetic operations
prediction using ideal adsorbed solution theory (IAST) also
could be performed quickly and reliably and led to the in-
exist: the Python-based pyIAST published by Simon et al. 6
troduction of more complex methods for isotherm processing,
and the graphical interface IAST++ by Lee et al. 7 . However,
such as the DFT method for pore size distribution 2,3 . Com-
an extensible open-source application which can offer the full
mercial adsorption equipment which offers users a complete
range of commonly used characterisation routines does not
software solution for any isotherm calculations is now com-
exist to our knowledge.
monplace and makes obtaining reports of desired properties
In this work, we present pyGAPS, an open-source software
for measured materials a matter of minutes.
package released under an open source licence and written
Given the current ubiquitousness of adsorption as a char-
in Python, intended to be used for manipulation, storage,
acterisation method, particularly for investigating surfaces
visualisation and processing of adsorption isotherms. The
and porous compounds, there is a large pool of data pub-
software is aimed to give users a powerful yet easy-to-use
lished in the scientific community. Key performance indicators
module that can perform the kind of processing usually offered
such as specific surface area, working capacity and pore vol-
by commercial software. It extends and encompasses the
ume are commonly reported in scientific literature and used
pyIAST code published by Simon et al. 6 for ideal adsorbed
as benchmarking tools for comparing performance. Recent
solution theory calculations.
efforts have also focused on building a database of adsorp-
tion isotherms 4 , to offer a searchable pool of standardised
2. pyGAPS Design
behaviours on different materials. This serves as both a useful
reference for comparing synthesised compounds, as well as a 2.1. Intended use cases. The software was imagined for use
method for quickly finding suitable materials which have the in two types of scenario. First, as a command line interface, in
desired properties for a particular application. environments such as IPython and Jupyter. The typical user
† Electronic Supplementary Information (ESI) available: one PDF file with all referenced supporting
working in these environments is likely to be processing a small
information. batch of results at one time, and is interested in obtaining

DOI: 10.0000/xxxxxxxxxxx Preprint | April 7, 2019 | 1–7


the results in a graphical form. For this type of application,
the framework provides an unobtrusive way of importing the
user data, as well as an API which does not require extensive
knowledge of processing methods. Finally, a graphical output
of the results is available which will allow the user to visualise
their work.
The second envisaged application is related to bulk data
processing. Requirements here shift towards parameter con-
trol, scripting and extensibility. The framework API offers
the option to change implicit parameters, select calculation
limits and return the results in a numerical form for further
processing. This type of application is also likely to require
storage of isotherms in a database or other types of data files,
which pyGAPS provides.

2.2. Capabilities. pyGAPS is currently capable of several com-


mon isotherm processing methods, with applications to mate-
rial characterisation. Routine analysis can be performed, such
as:
• specific surface area (BET, Langmuir),
• t-plots, alpha-s plots,
• Dubinin-Astakov / Dubinin-Radushevitch plots,
• mesoporous PSD (BJH, Dollimore-Heal),
• microporous PSD (Horvath-Kawazoe, Saito-Foley),
• DFT kernel fitting PSD.
Other processing tools include:
• Model fitting, such as Henry, Langmuir, Jensen-Seaton,
Virial, Toth, etc . . . , Fig. 1. Structure of the package
• IAST calculations for binary and multicomponent adsorp-
tion (either directly or after model fitting),
• Isosteric heat of adsorption calculations (from isotherms In order for many of the calculations included in pyGAPS
measured at different temperatures), to be performed, properties of the adsorbate used are needed
• Key performance indicator calculators (initial Henry con- e.g. liquid density, vapour pressure, kinetic diameter, polariz-
stant, initial enthalpy of adsorption). ability, etc. The Adsorbate class is provided for this purpose.
An Isotherm contains a reference to an Adsorbate object (if
Besides the above calculations, isotherms can be plotted, inter-
available). This class serves as an interface to store, retreive or
polated and saved. pyGAPS can import and store isotherms
calculate the physical properties required. The values can be
from a wide variety of formats, such as CSV, JSON, Microsoft
calculated automatically through an equation of state, (either
Excel, as well as an internal sqlite database.
the open source CoolProp library 8 or REFPROP 9 , if avail-
able on the user’s computer) or retrieved from the internal
2.3. Core structure. In order to offer a clear structuring of
database.
functionality, pyGAPS introduces several classes which abstract
Finally, information about the material such as the date of
data and concepts for facile interaction (Fig. 1). The classes
synthesis, the material’s density, or other properties can be
are intuitively named: Isotherm, Material and Adsorbent.
saved and stored. For this case, pyGAPS provides the Material
The Isotherm class is a representation of an adsorption
class. If sample-related properties are needed when processing
isotherm i.e. a function of the amount adsorbed (loading)
an isotherms, such as conversion of loading from a mass basis to
versus pressure at a fixed temperature. The class also con-
a volume basis, this class will be checked for the required data.
tains other information relating to the isotherm, such as the
The material name and batch values stored in an Isotherm
material name and batch it describes, the adsorbate used
are used to connect an instance to a specific Material.
and user-defined properties. The aforementioned relationship
All classes and processing functions classes are accessible
can be defined either through a collection of points denoting
through importing the pyGAPS module.
pressure-loading pairs or a mathematical function describ-
ing the relationship between the two properties. As such, 2.4. Workflow.
the Isotherm class is used as a parent class for two sub-
classes: the PointIsotherm, which contains datapoints and 2.4.1. Creation of an Isotherm. An Isotherm can be created either
the ModelIsotherm, containing a model such as Henry, Lang- directly from the command line or through an import from
muir etc. (see Tbl. 1 for the currently implemented models). a supported format. For direct creation, the code takes two
The two classes are interchangeable as they share most meth- kinds of inputs: the data itself, in the form of arrays or a
ods and properties. Once an instance of an Isotherm class is pandas.DataFrame, and the isotherm parameters describing
created, it can then be used for the processing, conversion and it. Only four parameters are strictly required: the material
graphing capabilities of pyGAPS. name, the material batch, the adsorbate used and the isotherm

P. Iacomi et al. Preprint | April 7, 2019 | 2


Tbl. 1. Models currently implemented in pyGAPS
Listing 1. Creating the PointIsotherm
1 # Minimal creation
Model Equation 2 isotherm = pygaps . PointIsotherm (
3 pressure =[1 , 2 , 3 , 4 , 5 , 3 , 2] ,
Henry (linear) n = KH p 4 loading =[1 , 2 , 3 , 4 , 5 , 3 , 2] ,
5 sample_name = ’ carbon ’ ,
KH p sample_batch = ’ X1 ’ ,
Langmuir 10 n= nm 1+K 6
Hp
7 adsorbate = ’ nitrogen ’ ,
t_iso =77 ,
P Ki p 8
Multi-site Langmuir 10 n= nmi 1+K p
i i 9 )
Kp 10
Toth 11 n = nM
(1+(Kp)t )(1/t) 11 # Direct data fitting
 (−1/c) 12 isotherm = pygaps . ModelIsotherm (
KH p
Jensen-Seaton 12 n = KH p 1 + a(1+(bp))c 13 model = ’ Henry ’ , # model specified
14 pressure =[1 , 2 , 3 , 4 , 5 , 3 , 2] ,
13 (Ka +2Kb p)p
Quadratic n= nM 1+K 2 15 loading =[1 , 2 , 3 , 4 , 5 , 3 , 2] ,
ap +Kbp
16 sample_name = ’ carbon ’ ,
Kp Kp Kp 2 sample_batch = ’ X1 ’ ,
Tempkin 14 n = nM 1+Kp
+ nM θ( 1+Kp ) ( 1+Kp − 1) 17
18 adsorbate = ’ nitrogen ’ ,
Cp 19 t_iso =77 ,
BET 15 n = nm (1−N p)(1−N p+Cp) 20 )
CKp 21
GAB 16 n = nm (1−Kp)(1−Kp+KCp) 22 # Advanced isotherm creation
23 isotherm = pygaps . PointIsotherm (
Virial 17 p = n exp (− ln KH + An + Bn2 + Cn3 ) 24 # Isotherm data
isotherm_data = pandas . DataFrame ({
  25
nads θ α21v θ
FH-VST 18 p= KH 1−θ
exp 1+α1v θ 26 ’ pressure ’ : [1 , 2 , 3 , 4 , 5 , 3 , 2] ,
α1 27 ’ loading ’ : [1 , 2 , 3 , 4 , 5 , 3 , 2] ,
where α1v = αv
−1 28 ’ enthalpy ’ : [15 , 15 , 15 , 15 , 15 , 15 , 15] ,
   29 ’ xrd_peak_1 ’ : [0 , 0 , 1 , 2 , 2 , 1 , 0] ,
nads θ 1−(1−Λv1 )θ
W-VST 19 p= KH 1−θ
Λ1v Λ 30 }) ,
1v +(1−Λ1v )θ
  31
Λv1 (1−Λv1 )θ (1−Λ1v )θ
exp − 1−(1−Λv1 )θ
− Λ1v +(1−Λ1v θ)
32 loading_key = ’ loading ’ , # loading column
33 pressure_key = ’ pressure ’ , # pressure column
34 other_keys =[ ’ enthalpy ’ , # other columns
35 ’ xrd_peak_1 ’] ,
36
37 # Unit parameters can be specified .
temperature. Other parameters can be passed as well and 38 pressure_mode = ’ absolute ’ , # absolute pressure
will be stored in the isotherm class. Example code can be 39 pressure_unit = ’ bar ’ , # with units of bar
40 a ds or be n t_ ba si s = ’ mass ’ , # adsorbent mass
seen in Listing 1. The data is saved in the newly created basis
class or used to generate parameters for a model such as 41 adsor bent_uni t = ’ kg ’ , # with units of kg
BET, Langmuir, etc., in the case of a PointIsotherm and 42 loading_basis = ’ mass ’ , # loading mass basis
43 loading_unit = ’g ’ , # with units of g
ModelIsotherm respectively. The creation of Material and 44
Adsorbate instances is similar. 45 # Isotherm parameters
46 sample_name = ’ carbon ’ , # required
The framework can automatically attempt to determine the 47 sample_batch = ’ X1 ’ , # required
adsorption and desorption branches, by analysing the input 48 adsorbate = ’ nitrogen ’ , # required
data. Alternatively, the user can manually specify the branch 49 t_iso =77 , # required
50 t_activation =150 , # user specific
or which points are part of which branch. If no unit data is 51 DOI = ’ 10.000/ mydoi ’ , # user specific
specified in the constructor, the framework will assume that 52 )
the isotherm is in units of mmol g−1 for loading and bar for
pressure. Both the units and the basis can be specified, as it
explained in a latter section.
these can also be converted into different units or modes. A
Alternatively, the isotherm can be imported from a file
common first step is to display the created isotherm using the
containing a format that is recognised by pyGAPS. Parsing from
.print_info() function, which prints all information in a class
suitably structured JSON, CSV and Excel files is supported,
and generates an isotherm graph, as exemplified in Listing 3.
as well as imports from common commercial formats.
Both PointIsotherm and ModelIsotherm can be cre-
Listing 2. Generating a model from a PointIsotherm
ated from an instance of the other. As an exam-
1 model = pygaps . ModelIsotherm . f r o m _ p o i n t i s o t he rm (
ple, a ModelIsotherm is automatically generated from a 2 isotherm , guess_model = ’ all ’)
PointIsotherm using the function in Listing 2, which fits all
available models and selects the one with the lowest residuals
between the fitted function and the real data. Attempting to model using Henry
Model Henry success , rmse is 7.42
Once an isotherm object is created, it can be used for Attempting to model using Jensen - Seaton
all further processing. The Isotherm class contains methods Modelling using Jensen - Seaton failed
...............................
which can be used to inspect the data visually, or retrieve parts Best model fit is Quadratic
of the isotherm such as the adsorption or desorption branches
with user-chosen limits or units. Singular values of pressure Most characterisation functions take an Isotherm object as
or loading can be calculated, either through interpolation in their first parameter. The code attempts to automate as much
the case of a PointIsotherm or by evaluation of the internal of the process as possible. For example, the BET area limits
model in the ModelIsotherm. For an isotherm with datapoints, are automatically calculated using the Rouquerol 20 method,

P. Iacomi et al. Preprint | April 7, 2019 | 3


with all the checks implemented. As another example, the between bases can also easily performed if the required con-
straight line sections of the t-plot are determined automat- version factors (i.e. molar mass and density) are available. For
ically through a calculation of the second derivative of the loading, these factors are automatically calculated internally
transformed isotherm. For detailed control, there are available using the available equation of state, while for the adsorbent
options for each individual method, such as manual BET lim- they should be provided by the user in the respective Material
its, different thickness functions for the t-plot or Kelvin-based class.
mesoporous pore distribution methods, custom surface param-
eters for the Horvath-Kawazoe microporous pore distribution, 3. Case studies
custom DFT or NLDFT kernels and more. The results are
returned in a numerical form for further processing, or can be 3.1. Routine characterization of a MOF. When a newly synthe-
directly displayed if the verbose parameter is passed. sised sample is available, an initial characterisation is often
performed to compare the material with previous batches.
Listing 3. Output of the info function Adsorption of nitrogen at 77 K is commonly used to verify if
1 isotherm . print_info () predictors such as specific surface area and pore size distribu-
tion are consistent with other samples or literature values.
Point Isotherm The UiO-66(Zr) MOF and its derivatives are well known
Material : MCM -41 due to their thermal and chemical stability 21 . It is composed of
Batch : Test [Zr6 O4 (OH)4 ]12+ clusters which are connected with benzene
Adsorbate used : N2
Isotherm temperature : 77.35 K dicarboxilate (BDC) linkers to form a face-centered cubic
Isotherm type : nitrogen c h a r a c t e r i s a t i o n framework and has shown promise 22 in use for gas adsorption
Machine : Triflex
User : PI
and catalytic applications.
Activation temperature : 150.0 C The nitrogen isotherm is first imported in pyGAPS. To obtain
Source : MADIREL the BET area, the pygaps.area_BET() method is used with the
Units :
Unit for loading : mmol / g isotherm object as the parameter. The verbose=True option
Relative pressure prints a short text with all the calculation variables as well as
graphing the BET and Rouquerol plots as seen in Listing 4
and Fig. 2. It can be seen that the points in the applicable
BET region have automatically been selected. The user can
override automatic pressure range selection by using the range
parameter: limits=(0.05, 0.3). The calculated surface area is
1277 m2 /g, which is similar to values from literature 22,23 .

Listing 4. Calculating a BET area


1 area_dict = pygaps . area_BET ( isotherm , verbose = True )

BET surface area : a = 1277 m2 / g


Minimum pressure point chosen is 0.005 and maximum
is 0.034
The slope of the BET fit : s = 76.344
The intercept of the BET fit : i = 0.052
BET constant : C = 1463
Amount for a monolayer : n = 0.01309 mol / g

2.5. Units. When computers work with physical data, units are
often a matter that introduces confusion. Therefore pyGAPS
should carefully handle units and other physical world concepts
such as relative pressure and mass or volume basis.
The following dimensions can be specified for an Isotherm: (a) (b)
the measurement pressure (p), the quantity of guest adsorbed
or loading (n) and the amount of adsorbent material the Fig. 2. Output from the BET area function (a) the BET plot showing the selected
loading is reported on, or adsorbent (m). Each point is repre- points for fitting the equation, as well as the location of the statistical monolayer and
sented as [y n/m at y p], (for example [y mmol/g at x bar], (b) the Rouquerol plot for this calculation.
[y cm3 /mol at x p/p0 ] or [y mol/cm3 , x Pa]).
Pressure can be reported either in an absolute value, in The same isotherm is used to calculate the pore size distri-
several common units such as bar, torr, Pa, or as relative bution of the UiO-66(Zr) sample. This MOF has octahedral
pressure, absolute pressure divided by the saturation vapour cages surrounded by eight corner tetrahedral cages of 1.1 and
pressure of the adsorbate at the respective measurement tem- 0.8 nm respectively. The sample is therefore expected to have
perature. Conversions between the two modes are automatic only micropores. Two methods are available in pyGAPS for
and handled internally. Both the loading and adsorbent can micropore size distributions: a ‘classical’ Horvath-Kawazoe
be reported in three different bases: a molar basis, a mass (HK) method 24 , as well as a DFT fitting routine. The HK
basis or a volume basis. Within each basis different units method is called by using the function in Listing 6. Here,
are recognised and can be easily converted. The conversions the surface characteristic parameters determined by Saito and

P. Iacomi et al. Preprint | April 7, 2019 | 4


Foley 25 are to be used, with the framework automatically better results, a model can be first fit to the isotherms and the
supplying the parameters for the adsorbed gas. resulting ModelIsotherms passed to the function instead. The
results from the calculation are first modified with an RT term
Listing 5. HK and DFT size distribution in pyGAPS Rouquerol et al. 20 then overlaid with the measured calorimet-
1 # Horvath - Kawazoe ric data in Fig. 4b. The two datasets overlap for the most
2 hk_psd = pygaps . m i c r o p o r e _ s i z e _ d i s t r i b u t i o n ( part but diverge at low loadings and near complete coverage.
3 isotherm ,
4 psd_model = ’ HK ’ , At low loading, the small changes in pressure introduce large
5 pore_geometry = ’ slit ’ , errors in the Clausius-Clapeyron equation. This, together
6 adsorbent_mo de l = ’ OxideIon ( SF ) ’ ,
7 verbose = True
with the breakdown of the assumption of equilibrium due to
8 ) active sites in the MOF lead to the calorimetric measurement
9 providing more valid results. At higher loadings, where the
10 # DFT kernel fitting
11 dft_psd = pygaps . d f t _ s i z e _ d i s t r i b u t i o n (
isotherm reaches a plateau and the change in adsorbed amount
12 isotherm , is small from point to point, a high uncertainty affects the
13 ’ internal ’ , direct measurment of the enthalpy of adsorption. The two
14 verbose = True
15 ) techniques are thus complementary

Listing 6. Calculating isosteric enthalpy


1 # Direct calculation from the Point Isotherm s
2 # through interpolation
3 iso_res = pygaps . i s o s t e r i c _ e n t h a l p y ([ iso_303k ,
iso_323k ])
4
5 # Fitting isotherms with a virial model
6 mode l_iso_30 3k = pygaps . ModelIsotherm .
from_pointisotherm (
7 iso_303k , model = ’ Virial ’)
8 model_iso323k = pygaps . ModelIsotherm .
from_pointisotherm (
9 iso_323k , model = ’ Virial ’)
Fig. 3. Pore size distribution calculated through the Horvath-Kawazoe method (orange 10

line) and the internal DFT kernel (blue line)


11 # Recalculating using ModelIs otherms
12 model_res = pygaps . i s o s t e r i c _ e n t h a l p y ([
model_iso_303k , model_iso323k ])
The another option is to fit using a DFT kernel. The user
can specify their own kernel in a CSV format or, alternatively,
use the internal kernel is included with the framework. This
kernel is only applicable on N2 adsorption at 77 K on carbon
slit-like pores in the range of 0.4 nm to 10 nm. Here the
internal kernel is used. Results are plotted in Fig. 3. It
can be seen that whilst both methods produce a bimodal
size distribution, neither is accurate in describing the actual
structure cage sizes. This is to be expected, since neither
method is completely applicable to the UiO-66(Zr) system.
However, when comparing two samples of the same MOF,
these methods can still highlight differences in the quality
of the two batches. For example, the wide peaks at >1 nm
obtained by DFT can be an indication of the presence of (a) (b)
defects.
Materials are often screened for their ability to act as a Fig. 4. Calculation of enthalpy of adsorption: (a) the dataset of isotherms used and
CO2 capture material. A good predictor of performance in (b) the measured differential enthalpy of adsorption (black dots) overlaid with the
this application are the enthalpies of adsorption, which are an calculated isosteric enthalpy through interpolation (blue line) or through evaluating a
indication of host-guest interactions. They can be measured prior virial model fit to the isotherms (red line)
either directly, through the use of adsorption microcalorime-
tery or calculated through the Clausius-Clapeyron method.
pyGAPS provides options for working with tertiary data for 3.2. Analysis of a carbon sample for gas separation applica-
each isotherm point, useful in the former case, or to calculate tions. Discovering the applicability of a porous material for gas
the isosteric enthalpy of adsorption starting from isotherms storage or separations is often a matter of large-scale screening,
measured at different pressures, useful in the latter case. Here, where many isotherms are measured and compared with other
an isotherm was measured at 303 K in a microcalorimeter, alternatives using key performance indicators (KPI) such as
while two separate isotherms have been measured at 303 K working capacity, selectivity, enthalpy of adsorption 26 , etc.
and 323 K respectively. The complete set of isotherms is loaded Here pyGAPS can be used to facilitate the calculation of these
into pyGAPS and plotted by the pygaps.plot_iso() function as KPI.
seen in Fig. 4a. To calculate the isosteric enthalpy of adsorp- A sample of reference carbon Takeda 5A be investigated,
tion, the two isotherms measured for this purpose are passed first with an in-depth characterisation of the adsorption be-
to the pygaps.isosteric_enthalpy() function, which will use in- haviour of pure gases, with a focus on describing the pore
terpolation to calculate the points at identical loading. For environment. Afterwards, the performance of different binary

P. Iacomi et al. Preprint | April 7, 2019 | 5


separations is evaluated, such as CO2 /N2 and propane/propy- vious analysis, we expect to see good performance for carbon
lene. Pure gas adsorption data has been recorded at 303 K dioxide capture and little or no selectivity in the paraffin-olefin
in conjunction with microcalorimetry on a series of 7 probes: pair.
N2 , CO, CO2 , CH4 , C2 H6 , C3 H6 and C3 H8 . The complete In this case, we fit the experimental data to the available
dataset is plotted with the pygaps.plot_iso() function and can models in pyGAPS, then use the resulting model isotherms for
be seen in Fig. 5a. IAST calculations. In order to obtain the best-fit model, we
use the syntax detailed in Listing 2. The original isotherms and
the resulting model are displayed in Fig. 6a for the CO2 /N2
pair and in Fig. 7a for the C3 H8 /C3 H6 pair.
For the carbon dioxide separation, we simulate all equilib-
rium points for the adsorbed and gaseous phases at different
concentrations of the two gases at 1 bar. To do this we use
the pygaps.iast_vle() function which produces an analogue of a
vapour-liquid equilibrium at a specified pressure for a binary
mixture. The resulting graph of this function can be seen in
Fig. 6b. As expected, the predicted adsorbed mixture is rich
in carbon dioxide. Selectivity can also be calculated in a single
(a) (b) point, with the value at 15% CO2 and 1 bar (often taken as
the conditions for post-combustion flue gas) being 16.5.
Fig. 5. Takeda 5A dataset processing: (a) the experimental dataset all recorded
gases and (b) calculated initial enthalpy of adsorption (blue) and Henry constant at
zero loading (red). The dotted lines are best fit lines to the saturated hydrocarbons of
increasing carbon number for each KPI.

Nitrogen and carbon monoxide are similar in their ad-


sorption behaviour, with a nearly linear isotherm and low
capacities. Hydrocarbons are adsorbed with higher loadings,
with both propane and propylene reaching a plateau at low
pressures. Propylene is seen to have a higher capacity than
propane, with packing effects as a likely cause. Carbon dioxide
has the highest loading capacity of the entire dataset.
Two parameters can be useful in characterising the local
(a) (b)
pore environment before guest-guest interactions come into
effect: the Henry constant at zero loading (KH,0 ) as well as ini-
tial enthalpy of adsorption (∆ads h0 ). Both can be calculated in Fig. 6. Modelling binary adsorption of CO2 and N2 : (a) the pure component isotherms
and their best fit models and (b) the predicted composition of the gaseous and
pyGAPS, with several options in regard to the methodology. In adsorbed phase for different fractions of CO2 at 1 bar
this example, the Henry constant is calculated using the pygaps.
initial_henry_virial() function, which fits a virial model to the
isotherm and then takes the limit at loading approaching zero. For the propane-propylene separation, the selectivity for
The initial enthalpy of adsorption is obtained through the propane in an equimolar mixture of the two gases is simulated
pygaps.initial_enthalpy_comp() function. This fits the enthalpy
within a pressure range of 0.1 bar to 5 bar. It can be seen that
curve to a compound contribution from guest-host interaction, there is little or no preference for the unsaturated molecule,
defects, guest-guest attraction and repulsion using a minimiza- though the selectivity increases slightly at pressures above
tion algorithm. The results of the calculations are plotted 1 bar.
versus the polarizability of the gas used, which can be obtained
from the respective Adsorbate class. Figure 5b shows that
both the parameters fall on a linear trend, which suggests that
the interactions between those guests and the pore walls are
mostly due to non-specific interactions. Carbon dioxide has
a higher enthalpy of adsorption than the baseline due to the
contribution from its quadrupole moment. There is almost
a complete overlap between propane and propylene, which
leads to the conclusion that the unsaturated double bond does
not interact in a specific way with the carbon surface. The
difference between the two isotherms is likely due to steric and
packing effects.
(a) (b)
We then look at two potentially interesting separations:
CO2 /N2 and propylene-propane. For these two pairs we use
IAST to predict binary adsorption behaviour. Both model Fig. 7. Modelling binary adsorption of a propane-propylene mixture: (a) the pure-
isotherms and real data can be used for IAST, with spread- component isotherms and their best fit models and (b) the predicted selectivity of
propane adsorption of a 50–50% mixture in a range of pressure from 0.1 to 5 bar
ing pressure being calculated through the underlying isotherm
model or through interpolation, respectively. Based on the pre-

P. Iacomi et al. Preprint | April 7, 2019 | 6


4. Further development
The pyGAPS features described in this paper are a current
snapshot of the development process. Several new features are
planned for the future, such as an adsorption column simulator,
better integration with outputs from bench-top apparatus and
with the NIST adsorption database, as well as a true graphical
user interface. As the software is evolving rapidly, with several
releases, in 2018 alone, we recommend the users to check the
extensive program documentation for the latest version at
https://pygaps.readthedocs.io.

5. Conclusions
To summarize, pyGAPS is a versatile and extensible software
package which can be used for both routine material charac-
terisation as well as complex adsorption isotherm processing.
It is easy to install and can run on all major operating sys-
tems. Due to the nature of the code as open source software
released under a permissive licence on GitHub, the framework
is free to use and can be improved by the contribution of third
parties. Together with an extensive documentation, the aim
is to simplify and automate repetitive analysis tasks, as well
as to aid in discovering trends in large datasets.

Acknowledgements
This work has received funding from the European Union’s
Horizon 2020 research and innovation programme under the
Marie Sklodowska-Curie grant agreement No 641887 (project
acronym: DEFNET).

References
1. E. P. Barrett, L. G. Joyner and P. P. Halenda, Journal of the American Chemical Society, 1951,
73, 373–380.
2. N. Seaton, J. Walton and N. Quirke, Carbon, 1989, 27, 853–861.
3. P. Tarazona, U. M. B. Marconi and R. Evans, Molecular Physics, 1987, 60, 573–595.
4. D. Siderius, V. Shen and R. Johnson, NIST / ARPA-E Database of Novel and Emerging
Adsorbent Materials, NIST Standard Reference Database 205, 2015.
5. L. S. Matott and A. J. Rabideau, Environmental Modelling & Software, 2008, 23, 670–676.
6. C. M. Simon, B. Smit and M. Haranczyk, Computer Physics Communications, 2016, 200,
364–380.
7. S. Lee, J. H. Lee and J. Kim, Korean Journal of Chemical Engineering, 2018, 35, 214–221.
8. I. H. Bell, J. Wronski, S. Quoilin and V. Lemort, Industrial & Engineering Chemistry Research,
2014, 53, 2498–2508.
9. E. Lemmon, NIST Reference Fluid Thermodynamic and Transport Properties Database: Ver-
sion 9.0, NIST Standard Reference Database 23, 1989.
10. I. Langmuir, Journal of the American Chemical Society, 1918, 40, 1361–1403.
11. J. Toth, 239.
12. C. R. C. Jensen and N. A. Seaton, Langmuir, 1996, 12, 2866–2867.
13. T. L. Hill, An Introduction to Statistical Thermodynamics, Dover Publications, New York, 1986.
14. C. M. Simon, J. Kim, L.-C. Lin, R. L. Martin, M. Haranczyk and B. Smit, Physical Chemistry
Chemical Physics, 2014, 16, 5499.
15. S. Brunauer, P. H. Emmett and E. Teller, Journal of the American Chemical Society, 1938, 60,
309–319.
16. C. van den Berg, PhD thesis, Van den Berg, Wageningen, 1981.
17. A. L. Myers, AIChE Journal, 2002, 48, 145–160.
18. T. W. Cochran, R. L. Kabel and R. P. Danner, AIChE Journal, 1985, 31, 268–277.
19. S. Suwanayuen and R. P. Danner, AIChE Journal, 1980, 26, 68–76.
20. J. Rouquerol, F. Rouquerol, P. L. Llewellyn, G. Maurin and K. Sing, Adsorption by Powders
and Porous Solids : Principles, Methodology and Applications, 2013.
21. J. H. Cavka, S. Jakobsen, U. Olsbye, N. Guillou, C. Lamberti, S. Bordiga and K. P. Lillerud,
Journal of the American Chemical Society, 2008, 130, 13850–13851.
22. A. D. Wiersum, E. Soubeyrand-Lenoir, Q. Yang, B. Moulin, V. Guillerm, M. B. Yahia, S. Bour-
relly, A. Vimont, S. Miller, C. Vagner, M. Daturi, G. Clet, C. Serre, G. Maurin and P. L. Llewellyn,
Chemistry - An Asian Journal, 2011, 6, 3270–3280.
23. L. Valenzano, B. Civalleri, S. Chavan, S. Bordiga, M. H. Nilsen, S. Jakobsen, K. P. Lillerud
and C. Lamberti, Chemistry of Materials, 2011, 23, 1700–1718.
24. G. Horvath and K. Kawazoe, Journal of Chemical Engineering of Japan, 1983, 16, 470–475.
25. A. Saito and H. C. Foley, AIChE Journal, 1991, 37, 429–436.
26. A. D. Wiersum, J.-S. Chang, C. Serre and P. L. Llewellyn, Langmuir, 2013, 29, 3301–3309.

P. Iacomi et al. Preprint | April 7, 2019 | 7


manuscript.pdf (2.07 MiB) view on ChemRxiv download file
Supplementary Information for
pyGAPS: A python-based framework for
adsorption isotherm processing and material
characterisation
Paul Iacomia, * and Philip L. Llewellyna
a
Aix-Marseille Université, CNRS, MADIREL UMR 7246, 13397 Marseille, France

* mail@pauliacomi.com

1. Materials and methods


1.1. Samples. The UiO-66(Zr) sample preparation was adapted from Shearer et al. S1 as follows: ZrCl4
(1.55 g, 6.65 mmol), an excess of terephthalic acid (BDC) (1.68 g, 10.11 mmol), HCl 37 % solution (0.2 ml,
3.25 mmol) and N,N’-dimethylformamide (DMF) (200 ml, 2.58 mol) were added to a 250 ml pressure resistant
Schott bottle. The mixture was stirred for 10 min, followed by incubation in convection oven at 130 ◦C
for 24 h. The resulting white precipitate was washed with fresh DMF (3× 50 ml) followed by ethanol (3×
50 ml) over the course of 48 h and dried at 60 ◦C. The yield was 78 % white microcrystalline powder. Before
measurements, the sample was activated at 250 ◦C under dynamic vacuum (5 mbar) to remove any residual
solvent from the framework.
The Takeda 5A carbon was purchased directly from the Takeda corporation. The sample was activated
at 250 ◦C under dynamic vacuum (5 mbar) before any measurements.

1.2. Gases. The gases used for the adsorption were obtained from Air Liquide and were of minimum N47
quality (99.997 % purity).

1.3. Nitrogen physisorption at 77 K. Nitrogen physisorption at 77 K isotherms were carried out on a


Micromeritics Triflex apparatus. Approximately 60 mg of sample were used for each measurement.

1.4. Carbon dioxide isotherms. The excess adsorption isotherms for pure CO2 were obtained gravimetrically
using a commercial balance (Rubotherm GmbH). Approximately 1 g of dried sample was used for these
experiments. Samples was activated in situ by heating under vacuum. The gas was introduced using a
step-by-step method, and equilibrium was assumed to have been reached when the variation of weight
remained below 30 µg over a 15 min interval. The volume of the sample was determined from a blank
experiment with helium as the nonadsorbing gas and used in combination with the gas density measured
by the Rubotherm balance to compensate for buoyancy.

1.5. Microcalorimetry at 303 K. Gas adsorption isotherms and enthalpies were measured experimentally
using a Tian-Calvet type microcalorimeter coupled with a home-made manometric gas dosing system. S2
This apparatus allows the simultaneous measurement of the adsorption isotherm and the corresponding
differential enthalpies. Gas is introduced into the system using a step-by-step method and each dose is
allowed to stabilize in a reference volume before being brought into contact with the adsorbent located in
the microcalorimeter. At low coverage the error in the signal can be estimated to around ± 0.2 kJ mol−1 .
Around 0.4 g of sample is used in each experiment.

References
(S1) G. C. Shearer, S. Chavan, J. Ethiraj, J. G. Vitillo, S. Svelle, U. Olsbye, C. Lamberti, S. Bordiga and K. P. Lillerud, Chemistry of Materials, 2014, 26, 4068–4071.
(S2) P. L. Llewellyn and G. Maurin, Comptes Rendus Chimie, 2005, 8, 283–302.

† Electronic Supplementary Information (ESI) available: one PDF file with all referenced supporting information.

DOI: 10.0000/xxxxxxxxxxx Preprint | April 7, 2019 | S1–S1


manuscript-SI.pdf (162.36 KiB) view on ChemRxiv download file

You might also like