pauliacomi / pyGAPS

A framework for processing adsorption data and isotherm fitting
MIT License
62 stars 24 forks source link

Chi theory? #51

Open Fratorhe opened 1 year ago

Fratorhe commented 1 year ago

Hello, I am pretty new in this world of adsorption. I am analyzing some data produced using a Micromeritics device (still need to figure out how to extract and parse the data), and I was quite unhappy about the results given by their software. Your code looks much better than their proprietary software so I would like to use it to process my data. I have been reading this book from J. Condon (https://www.sciencedirect.com/book/9780128187852/surface-area-and-porosity-determinations-by-physisorption), where he describes a theory that is more physically sounding for physisorption (and criticizes other models). Have you considered implementing this model? Do you have any advices about it?

Where you are from?/How are you using pyGAPS? (optional) I'm a postdoc at UIUC, working on thermal protection materials for spacecraft.

PS. sorry for not following the template, but my question did not fit very well...

MyonicS commented 2 months ago

i dug a bit into this, but the areas i got from chi theory were a bit crazy... However, i think the Chi plot itself is very nice, as it allows to show differences between very similar isotherms clearer.

One model that i ended up using besides BET and DFT is the excess surface work model as it also works when you can not implement roquerol criteria, here is all the code for a list of isotherms taken from our recent work (https://github.com/MyonicS/External_Acidity_Paper/tree/main) You just have to watch out that you indeed have a nice minimum in the plot.

isotherm.convert_loading(unit_to='mmol')
pressure = isotherm.data(branch = 'ads')['pressure']
loading = isotherm.data(branch = 'ads')['loading']
dmu = 8.3145*isotherm.temperature*np.log(pressure)
Phi = loading*dmu
n_monolayer = loading[Phi == Phi.min()].item()
argon_area = 0.142*1e-18*6.022e23
ESW_surface_area = n_monolayer*argon_area/1000

fig, ax = plt.subplots()
ax.plot(loading,Phi)
ax.set_xlabel('Loading (mmol/g)')
ax.set_ylabel(r'$\Phi$ (mJ/g)')

@pauliacomi if you think its relevant enough i could implement this analogous to the BET analysis.