Initial enthalpy calculations and enthalpy modelling#
Experimentally, the enthalpy of adsorption can be obtained either indirectly, through the isosteric enthalpy method, or directly, using adsorption microcalorimetry. Once an enthalpy curve is calculated, a useful performance indicator is the enthalpy of adsorption at zero loading, corresponding to the initial interactions of the probe with the surface. pyGAPS contains two methods to determine the initial enthalpy of adsorption starting from an enthalpy curve.
First, make sure the data is imported by running the import notebook.
[1]:
# import isotherms
%run import.ipynb
# import the characterisation module
import pygaps.characterisation as pgc
Selected 5 isotherms with nitrogen at 77K
Selected 2 room temperature calorimetry isotherms
Selected 2 isotherms for IAST calculation
Selected 3 isotherms for isosteric enthalpy calculation
Initial point method#
The point method of determining enthalpy of adsorption is the simplest method. It just returns the first measured point in the enthalpy curve.
Depending on the data, the first point method may or may not be representative of the actual value.
[2]:
import matplotlib.pyplot as plt
# Initial point method
isotherm = next(i for i in isotherms_calorimetry if i.material=='HKUST-1(Cu)')
res = pgc.initial_enthalpy_point(isotherm, 'enthalpy', verbose=True)
plt.show()
isotherm = next(i for i in isotherms_calorimetry if i.material=='Takeda 5A')
res = pgc.initial_enthalpy_point(isotherm, 'enthalpy', verbose=True)
plt.show()
The initial enthalpy of adsorption is:
E = 28.8
The initial enthalpy of adsorption is:
E = 34.7
Compound model method#
This method attempts to model the enthalpy curve by the superposition of several contributions. It is slower, as it runs a constrained minimisation algorithm with several initial starting guesses, then selects the optimal one.
[3]:
# Modelling method
isotherm = next(i for i in isotherms_calorimetry if i.material=='HKUST-1(Cu)')
res = pgc.initial_enthalpy_comp(isotherm, 'enthalpy', verbose=True)
plt.show()
isotherm = next(i for i in isotherms_calorimetry if i.material=='Takeda 5A')
res = pgc.initial_enthalpy_comp(isotherm, 'enthalpy', verbose=True)
plt.show()
Bounds:
const = (19.849417219261177, 37.63022921697883)
preexp = (0, 150), exp = (0, inf), exploc = (0, 0.5)
prepowa = (0, 50), powa = (1, 20)
prepowr = (-50, 0), powr = (1, 20)
Minimizing routine number 1
Initial guess:
const = 28.739823218120005
preexp = 0.0, exp = 0.0, exploc = 0.0
prepowa = 0.0, powa = 1.0
prepowr = 0.0, powr = 1.0
Optimization terminated successfully (Exit mode 0)
Current function value: 0.14458327076416183
Iterations: 81
Function evaluations: 738
Gradient evaluations: 81
Minimizing routine number 2
Initial guess:
const = 14.369911609060003
preexp = 0.048145386979996374, exp = 0.0, exploc = 0.0
prepowa = 0.0, powa = 1.0
prepowr = -8.554071327020004, powr = 1.0
Optimization terminated successfully (Exit mode 0)
Current function value: 0.14458327307850274
Iterations: 92
Function evaluations: 833
Gradient evaluations: 92
Minimizing routine number 3
Initial guess:
const = 28.739823218120005
preexp = 0.07221808046999456, exp = 10.0, exploc = 0.1
prepowa = 0.01, powa = 3.0
prepowr = 0.0, powr = 1.0
Optimization terminated successfully (Exit mode 0)
Current function value: 0.14458327055352374
Iterations: 87
Function evaluations: 792
Gradient evaluations: 87
Minimizing routine number 4
Initial guess:
const = 28.739823218120005
preexp = 0.0, exp = 0.0, exploc = 0.1
prepowa = 0.0, powa = 3.0
prepowr = -0.01, powr = 3.0
Optimization terminated successfully (Exit mode 0)
Current function value: 0.14458327064989074
Iterations: 112
Function evaluations: 1019
Gradient evaluations: 112
Final best fit 0.14458327064989074.
The initial enthalpy of adsorption is:
E = 28.5
The constant contribution is
19.8
The exponential contribution is
8.71 * exp(15.1 * n)with the limit at 0.407
The guest-guest attractive contribution is
47.7 * n^2.6
The guest-guest repulsive contribution is
-50 * n^5.48
Bounds:
const = (23.797607891739087, 32.54769036367995)
preexp = (0, 150), exp = (0, inf), exploc = (0, 0.5)
prepowa = (0, 50), powa = (1, 20)
prepowr = (-50, 0), powr = (1, 20)
Minimizing routine number 1
Initial guess:
const = 28.17264912770952
preexp = 0.0, exp = 0.0, exploc = 0.0
prepowa = 0.0, powa = 1.0
prepowr = 0.0, powr = 1.0
Optimization terminated successfully (Exit mode 0)
Current function value: 0.09541800223250922
Iterations: 9
Function evaluations: 81
Gradient evaluations: 9
Minimizing routine number 2
Initial guess:
const = 14.08632456385476
preexp = 6.557036324590477, exp = 0.0, exploc = 0.0
prepowa = 2.9277314033904815, powa = 1.0
prepowr = 0.0, powr = 1.0
Optimization terminated successfully (Exit mode 0)
Current function value: 0.007235460364955422
Iterations: 75
Function evaluations: 678
Gradient evaluations: 75
Minimizing routine number 3
Initial guess:
const = 28.17264912770952
preexp = 9.835554486885716, exp = 10.0, exploc = 0.1
prepowa = 0.01, powa = 3.0
prepowr = 0.0, powr = 1.0
Optimization terminated successfully (Exit mode 0)
Current function value: 0.007235460317026574
Iterations: 62
Function evaluations: 558
Gradient evaluations: 62
Minimizing routine number 4
Initial guess:
const = 28.17264912770952
preexp = 0.0, exp = 0.0, exploc = 0.1
prepowa = 0.0, powa = 3.0
prepowr = -0.01, powr = 3.0
Optimization terminated successfully (Exit mode 0)
Current function value: 0.007334815292145825
Iterations: 62
Function evaluations: 561
Gradient evaluations: 62
Final best fit 0.007334815292145825.
The initial enthalpy of adsorption is:
E = 37.1
The constant contribution is
26.5
The exponential contribution is
21.2 * exp(12.3 * n)with the limit at 5.53e-18
The guest-guest attractive contribution is
50 * n^18.1
The guest-guest repulsive contribution is
-45.6 * n^18.1