Note
Go to the end to download the full example code.
MagmaSat: Calculate Degassing Path#
Calculates the CO2-H2O concentrations in a melt during decompression and fluid exsolution.
This uses the VESIcal python library and is a preview of a forthcoming version of VESIcal compatible with the new version of thermoengine.
Open this code in an executable MyBinder instance (MyBinder links may be slow to load– please be patient!):
To install the preview version of VESIcal that works with the new pip installable version of thermoengine, run this command (uncomment first):
%pip install kaylai/VESIcal@thermoenginelite
import VESIcal as v
Specify the composition of the liquid. Here a basaltic composition is given as an example:
oxide_comp = {
'SiO2':49.91,
'TiO2': 1.47,
'Al2O3': 17.91,
'Fe2O3': 2.45,
'FeO': 7.02,
'MnO': 0.16,
'MgO': 6.62,
'CaO': 10.02,
'Na2O': 3.02,
'K2O': 0.64,
'P2O5': 0.2,
'H2O': 2.0,
'CO2': 0.5
}
Now convert this to a VESIcal Sample object (this allows the code to deal with unit conversions, normalisation, etc)
sample = v.Sample(oxide_comp)
## Open System Degassing Calculation
During open system degassing the exsolved vapour is lost from the system at each decompression step.
open_df = v.calculate_degassing_path(sample=sample, temperature=1000.0, fractionate_vapor=1.0).result
Finding saturation point... /home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
[ ] 2% Calculating degassing path...
[ ] 4% Calculating degassing path...
[= ] 6% Calculating degassing path...
[= ] 8% Calculating degassing path...
[= ] 10% Calculating degassing path...
[== ] 12% Calculating degassing path...
[== ] 13% Calculating degassing path...
[=== ] 15% Calculating degassing path...
[=== ] 17% Calculating degassing path...
[=== ] 19% Calculating degassing path...
[==== ] 21% Calculating degassing path...
[==== ] 23% Calculating degassing path...
[===== ] 25% Calculating degassing path...
[===== ] 27% Calculating degassing path...
[===== ] 29% Calculating degassing path...
[====== ] 31% Calculating degassing path...
[====== ] 33% Calculating degassing path...
[====== ] 35% Calculating degassing path...
[======= ] 37% Calculating degassing path...
[======= ] 38% Calculating degassing path...
[======== ] 40% Calculating degassing path...
[======== ] 42% Calculating degassing path...
[======== ] 44% Calculating degassing path...
[========= ] 46% Calculating degassing path...
[========= ] 48% Calculating degassing path...
[========== ] 50% Calculating degassing path...
[========== ] 52% Calculating degassing path...
[========== ] 54% Calculating degassing path...
[=========== ] 56% Calculating degassing path...
[=========== ] 58% Calculating degassing path...
[=========== ] 60% Calculating degassing path...
[============ ] 62% Calculating degassing path...
[============ ] 63% Calculating degassing path...
[============= ] 65% Calculating degassing path...
[============= ] 67% Calculating degassing path...
[============= ] 69% Calculating degassing path...
[============== ] 71% Calculating degassing path...
[============== ] 73% Calculating degassing path...
[=============== ] 75% Calculating degassing path...
[=============== ] 77% Calculating degassing path...
[=============== ] 79% Calculating degassing path...
[================ ] 81% Calculating degassing path...
[================ ] 83% Calculating degassing path...
[================ ] 85% Calculating degassing path...
[================= ] 87% Calculating degassing path...
[================= ] 88% Calculating degassing path...
[================== ] 90% Calculating degassing path...
[================== ] 92% Calculating degassing path...
[================== ] 94% Calculating degassing path...
[=================== ] 96% Calculating degassing path...
[=================== ] 98% Calculating degassing path...
[====================] 100% Calculating degassing path...
## Closed System Degassing Calculation
During closed system degassing the exsolved vapour remains with the melt, but its quantity and composition evolve throughout the calculation.
closed_df = v.calculate_degassing_path(sample=sample, temperature=1000.0).result
Finding saturation point... /home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
[ ] 2% Calculating degassing path...
[ ] 4% Calculating degassing path...
[= ] 6% Calculating degassing path...
[= ] 8% Calculating degassing path...
[= ] 10% Calculating degassing path...
[== ] 12% Calculating degassing path...
[== ] 13% Calculating degassing path...
[=== ] 15% Calculating degassing path...
[=== ] 17% Calculating degassing path...
[=== ] 19% Calculating degassing path...
[==== ] 21% Calculating degassing path...
[==== ] 23% Calculating degassing path...
[===== ] 25% Calculating degassing path...
[===== ] 27% Calculating degassing path...
[===== ] 29% Calculating degassing path...
[====== ] 31% Calculating degassing path...
[====== ] 33% Calculating degassing path...
[====== ] 35% Calculating degassing path...
[======= ] 37% Calculating degassing path...
[======= ] 38% Calculating degassing path...
[======== ] 40% Calculating degassing path...
[======== ] 42% Calculating degassing path...
[======== ] 44% Calculating degassing path...
[========= ] 46% Calculating degassing path...
[========= ] 48% Calculating degassing path...
[========== ] 50% Calculating degassing path...
[========== ] 52% Calculating degassing path...
[========== ] 54% Calculating degassing path...
[=========== ] 56% Calculating degassing path...
[=========== ] 58% Calculating degassing path...
[=========== ] 60% Calculating degassing path...
[============ ] 62% Calculating degassing path...
[============ ] 63% Calculating degassing path...
[============= ] 65% Calculating degassing path...
[============= ] 67% Calculating degassing path...
[============= ] 69% Calculating degassing path...
[============== ] 71% Calculating degassing path...
[============== ] 73% Calculating degassing path...
[=============== ] 75% Calculating degassing path...
[=============== ] 77% Calculating degassing path...
[=============== ] 79% Calculating degassing path...
[================ ] 81% Calculating degassing path...
[================ ] 83% Calculating degassing path...
[================ ] 85% Calculating degassing path...
[================= ] 87% Calculating degassing path...
[================= ] 88% Calculating degassing path...
[================== ] 90% Calculating degassing path...
[================== ] 92% Calculating degassing path...
[================== ] 94% Calculating degassing path...
[=================== ] 96% Calculating degassing path...
[=================== ] 98% Calculating degassing path...
[====================] 100% Calculating degassing path...
## Partially Closed System Degassing Calculation
During this calculation, only some of the exsolved fluid is lost at each step.
half_df = v.calculate_degassing_path(sample=sample, temperature=1000.0, fractionate_vapor=0.5).result
Finding saturation point... /home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
/home/vscode/.local/lib/python3.10/site-packages/VESIcal/models/magmasat.py:208: RuntimeWarning: invalid value encountered in divide
fluid_comp = fluid_comp/fluid_comp.sum()
[ ] 2% Calculating degassing path...
[ ] 4% Calculating degassing path...
[= ] 6% Calculating degassing path...
[= ] 8% Calculating degassing path...
[= ] 10% Calculating degassing path...
[== ] 12% Calculating degassing path...
[== ] 13% Calculating degassing path...
[=== ] 15% Calculating degassing path...
[=== ] 17% Calculating degassing path...
[=== ] 19% Calculating degassing path...
[==== ] 21% Calculating degassing path...
[==== ] 23% Calculating degassing path...
[===== ] 25% Calculating degassing path...
[===== ] 27% Calculating degassing path...
[===== ] 29% Calculating degassing path...
[====== ] 31% Calculating degassing path...
[====== ] 33% Calculating degassing path...
[====== ] 35% Calculating degassing path...
[======= ] 37% Calculating degassing path...
[======= ] 38% Calculating degassing path...
[======== ] 40% Calculating degassing path...
[======== ] 42% Calculating degassing path...
[======== ] 44% Calculating degassing path...
[========= ] 46% Calculating degassing path...
[========= ] 48% Calculating degassing path...
[========== ] 50% Calculating degassing path...
[========== ] 52% Calculating degassing path...
[========== ] 54% Calculating degassing path...
[=========== ] 56% Calculating degassing path...
[=========== ] 58% Calculating degassing path...
[=========== ] 60% Calculating degassing path...
[============ ] 62% Calculating degassing path...
[============ ] 63% Calculating degassing path...
[============= ] 65% Calculating degassing path...
[============= ] 67% Calculating degassing path...
[============= ] 69% Calculating degassing path...
[============== ] 71% Calculating degassing path...
[============== ] 73% Calculating degassing path...
[=============== ] 75% Calculating degassing path...
[=============== ] 77% Calculating degassing path...
[=============== ] 79% Calculating degassing path...
[================ ] 81% Calculating degassing path...
[================ ] 83% Calculating degassing path...
[================ ] 85% Calculating degassing path...
[================= ] 87% Calculating degassing path...
[================= ] 88% Calculating degassing path...
[================== ] 90% Calculating degassing path...
[================== ] 92% Calculating degassing path...
[================== ] 94% Calculating degassing path...
[=================== ] 96% Calculating degassing path...
[=================== ] 98% Calculating degassing path...
[====================] 100% Calculating degassing path...
## Make a plot!
VESIcal provides a built-in method for visualising these results quickly:
v.plot(degassing_paths=[open_df, half_df, closed_df],
degassing_path_labels=["Open", "Half", "Closed"])

(<Figure size 1200x800 with 1 Axes>, <Axes: xlabel='H$_2$O wt%', ylabel='CO$_2$ wt%'>)
but you can also make a custom plot by interacting with the open_df, half_df, and closed_df dataframes directly. You can also save each one to a csv file for later use, of for plotting in another program (e.g. Excel):
open_df.to_csv('my_degassing_path.csv')
Total running time of the script: (0 minutes 18.329 seconds)