Calculating equilibrium fluid compositions
The VESIcal.calculate_equilibrium_fluid_comp()
function calculates the composition of a fluid phase in equilibrium with a given silicate melt with known pressure, temperature, and dissolved H2O and CO2 concentrations. The calculation is performed simply by calculating the equilibrium state of the given sample at the given conditions and determining if that melt is fluid saturated. If the melt is saturated, fluid composition and mass are reported back. If the calculation finds that the melt is not saturated at the given pressure and temperature, values of 0.0 will be returned for the H2O and CO2 concentrations in the fluid.
Method structure:
Single sample:
def calculate_equilibrium_fluid_comp(self, sample, temperature, pressure, verbose=False).result
ExcelFile batch process:
def calculate_equilibrium_fluid_comp(self, temperature, pressure, print_status=False, model='MagmaSat')
Required inputs:
sample
: Only for single-sample calculations. The composition of a sample. A single sample may be passed as a dictionary of values, with compositions of oxides in wt%.
temperature
, pressure
: the temperature in degrees C and the pressure in bars. Temperature and pressure of the sample or samples must be passed unless an ExcelFile object with a column for temperature and/or pressure is passed to sample. If, alternatively, the user wishes to use temperature or pressure information in their ExcelFile object, the title of the column containing temperature or pressure data should be passed in quotes (as a string) to temperature or pressure respectively. Note for batch calculations that if temperature or pressure information exists in the ExcelFile but a single numerical value is defined for one or both of these variables, both the original information plus the values used for the calculations will be returned.
Optional inputs:
verbose
: Default value is False. If set to True, additional parameters are returned in a dictionary: H2O and CO2 concentrations in the fluid, mass of the fluid in grams, and proportion of the fluid in the system in wt%.
print_status
: Only for ExcelFile batch calcualtions. The default value is False. If True is passed, the progress of the calculation will be printed to the terminal.
Calculated outputs: If a single sample is passed to sample, a dictionary with keys ‘H2O’ and ‘CO2’ is returned (plus additional variables ‘FluidMass_grams’ and ‘FluidProportion_wtper’ if verbose is set to True).
If mutliple samples are passed as an ExcelFile object, a pandas DataFrame is returned with sample information plus calculated equilibrium fluid compositions, mass of the fluid in grams, and proportion of the fluid in the system in wt%. Pressure (in bars) and Temperature (in degrees C) columns are always returned.
For an entire dataset
Import a data file
myfile = v.BatchFile('example_data.xlsx')
myfile.get_data()
Label |
SiO2 |
TiO2 |
Al2O3 |
Fe2O3 |
Cr2O3 |
FeO |
MnO |
MgO |
NiO |
CoO |
CaO |
Na2O |
K2O |
P2O5 |
H2O |
CO2 |
Press |
Temp |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
BT-ex |
77.5 |
0.08 |
12.5 |
0.207 |
0 |
0.473 |
0 |
0.03 |
0 |
0 |
0.43 |
3.98 |
4.88 |
0 |
5.5 |
0.05 |
500 |
900 |
TVZMa-ex |
78.37 |
0.13 |
11.94 |
0 |
0 |
0.99 |
0.04 |
0.05 |
0 |
0 |
0.53 |
3.8 |
4.14 |
0 |
4.06 |
0.005 |
600 |
800 |
TVZOh-ex |
77.9 |
0.08 |
12.15 |
0 |
0 |
0.95 |
0.05 |
0.06 |
0 |
0 |
0.55 |
4.05 |
4.12 |
0 |
4.63 |
0.005 |
50 |
900 |
Oh48-FTIR1-MI1-a |
78.27 |
0.0298 |
12.02 |
0 |
0 |
0.9828 |
0.0336 |
0.0515 |
0 |
0 |
0.4772 |
4.05 |
4.09 |
0 |
4.214912406 |
0.004565932 |
250 |
950 |
Oh48-FTIR1-MI1-b |
78.27 |
0.0298 |
12.02 |
0 |
0 |
0.9828 |
0.0336 |
0.0515 |
0 |
0 |
0.4772 |
4.05 |
4.09 |
0 |
4.005815793 |
0.004447963 |
500 |
1025 |
Oh48-FTIR1-MI1-IRc |
78.27 |
0.0298 |
12.02 |
0 |
0 |
0.9828 |
0.0336 |
0.0515 |
0 |
0 |
0.4772 |
4.05 |
4.09 |
0 |
3.885649341 |
0.004654367 |
5000 |
925 |
Oh50-4.1 |
77.91 |
0.0984 |
12.07 |
0 |
0 |
1.0556 |
0.0257 |
0.0999 |
0 |
0 |
0.5216 |
4.04 |
4.18 |
0 |
4.641842879 |
0.004565932 |
1000 |
862 |
Oh50-4.2 |
77.91 |
0.0984 |
12.07 |
0 |
0 |
1.0556 |
0.0257 |
0.0999 |
0 |
0 |
0.5216 |
4.04 |
4.18 |
0 |
4.402133476 |
0.004447963 |
100 |
770 |
Oh49-4.1 |
77.92 |
0.0099 |
12.11 |
0 |
0 |
1.002 |
0.0672 |
0.0546 |
0 |
0 |
0.5346 |
4.01 |
4.3 |
0 |
4.283934433 |
0.004565932 |
1000 |
855 |
Oh49-4.2 |
77.92 |
0.0099 |
12.11 |
0 |
0 |
1.002 |
0.0672 |
0.0546 |
0 |
0 |
0.5346 |
4.01 |
4.3 |
0 |
4.230532593 |
0.004447963 |
500 |
1000 |
Ma55-5a.1 |
77.68 |
0.0096 |
12.27 |
0 |
0 |
1.0272 |
0.0628 |
0.0342 |
0 |
0 |
0.6064 |
3.97 |
4.35 |
0 |
4.459767403 |
0.004654367 |
5000 |
1010 |
Ma57-3b.2 |
77.9 |
0.0498 |
12.07 |
0 |
0 |
1.0844 |
0.0748 |
0.0355 |
0 |
0 |
0.4759 |
4.1 |
4.21 |
0 |
3.712506046 |
0.004447963 |
1000 |
1012 |
Ma57-3c.1 |
77.65 |
0.159 |
12.28 |
0 |
0 |
0.9769 |
0.0597 |
0.0577 |
0 |
0 |
0.5598 |
4.08 |
4.18 |
0.0064 |
4.443973024 |
0.004654367 |
100 |
885 |
Ma57-3c.2 |
77.65 |
0.159 |
12.28 |
0 |
0 |
0.9769 |
0.0597 |
0.0577 |
0 |
0 |
0.5598 |
4.08 |
4.18 |
0.0064 |
4.283171078 |
0.004644523 |
1000 |
885 |
Do the calculation
eqfluid = myfile.calculate_equilibrium_fluid_comp(temperature=900.0, pressure=200.0)
eqfluid
SiO2 |
TiO2 |
Al2O3 |
Fe2O3 |
Cr2O3 |
FeO |
MnO |
MgO |
NiO |
CoO |
CaO |
Na2O |
K2O |
P2O5 |
H2O |
CO2 |
Press |
Temp |
XH2O_fl_VESIcal |
XCO2_fl_VESIcal |
Temperature_C_VESIcal |
Pressure_bars_VESIcal |
Model |
Warnings |
|
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
BT-ex |
77.5 |
0.08 |
12.5 |
0.207 |
0.0 |
0.473 |
0.0 |
0.03 |
0.0 |
0.0 |
0.43 |
3.98 |
4.88 |
0.0 |
5.5 |
0.05 |
500 |
900 |
0.994945764902743 |
0.00505423509725724 |
900.0 |
200.0 |
MagmaSat |
|
TVZMa-ex |
78.37 |
0.13 |
11.94 |
0.0 |
0.0 |
0.99 |
0.04 |
0.05 |
0.0 |
0.0 |
0.53 |
3.8 |
4.14 |
0.0 |
4.06 |
0.005 |
600 |
800 |
0.999197891367033 |
0.000802108632967163 |
900.0 |
200.0 |
MagmaSat |
|
TVZOh-ex |
77.9 |
0.08 |
12.15 |
0.0 |
0.0 |
0.95 |
0.05 |
0.06 |
0.0 |
0.0 |
0.55 |
4.05 |
4.12 |
0.0 |
4.63 |
0.005 |
50 |
900 |
0.999345712796006 |
0.000654287203994425 |
900.0 |
200.0 |
MagmaSat |
|
Oh48-FTIR1-MI1-a |
78.27 |
0.0298 |
12.02 |
0.0 |
0.0 |
0.9828 |
0.0336 |
0.0515 |
0.0 |
0.0 |
0.4772 |
4.05 |
4.09 |
0.0 |
4.214912 |
0.004566 |
250 |
950 |
0.999308664558708 |
0.000691335441291598 |
900.0 |
200.0 |
MagmaSat |
|
Oh48-FTIR1-MI1-b |
78.27 |
0.0298 |
12.02 |
0.0 |
0.0 |
0.9828 |
0.0336 |
0.0515 |
0.0 |
0.0 |
0.4772 |
4.05 |
4.09 |
0.0 |
4.005816 |
0.004448 |
500 |
1025 |
0.999269106534186 |
0.000730893465814264 |
900.0 |
200.0 |
MagmaSat |
|
Oh48-FTIR1-MI1-IRc |
78.27 |
0.0298 |
12.02 |
0.0 |
0.0 |
0.9828 |
0.0336 |
0.0515 |
0.0 |
0.0 |
0.4772 |
4.05 |
4.09 |
0.0 |
3.885649 |
0.004654 |
5000 |
925 |
0.999195907380729 |
0.000804092619270796 |
900.0 |
200.0 |
MagmaSat |
|
Oh50-4.1 |
77.91 |
0.0984 |
12.07 |
0.0 |
0.0 |
1.0556 |
0.0257 |
0.0999 |
0.0 |
0.0 |
0.5216 |
4.04 |
4.18 |
0.0 |
4.641843 |
0.004566 |
1000 |
862 |
0.999404134340667 |
0.000595865659332519 |
900.0 |
200.0 |
MagmaSat |
|
Oh50-4.2 |
77.91 |
0.0984 |
12.07 |
0.0 |
0.0 |
1.0556 |
0.0257 |
0.0999 |
0.0 |
0.0 |
0.5216 |
4.04 |
4.18 |
0.0 |
4.402133 |
0.004448 |
100 |
770 |
0.999371789127887 |
0.000628210872112572 |
900.0 |
200.0 |
MagmaSat |
|
Oh49-4.1 |
77.92 |
0.0099 |
12.11 |
0.0 |
0.0 |
1.002 |
0.0672 |
0.0546 |
0.0 |
0.0 |
0.5346 |
4.01 |
4.3 |
0.0 |
4.283934 |
0.004566 |
1000 |
855 |
0.99932530175906 |
0.000674698240939669 |
900.0 |
200.0 |
MagmaSat |
|
Oh49-4.2 |
77.92 |
0.0099 |
12.11 |
0.0 |
0.0 |
1.002 |
0.0672 |
0.0546 |
0.0 |
0.0 |
0.5346 |
4.01 |
4.3 |
0.0 |
4.230533 |
0.004448 |
500 |
1000 |
0.999329597281253 |
0.000670402718747213 |
900.0 |
200.0 |
MagmaSat |
|
Ma55-5a.1 |
77.68 |
0.0096 |
12.27 |
0.0 |
0.0 |
1.0272 |
0.0628 |
0.0342 |
0.0 |
0.0 |
0.6064 |
3.97 |
4.35 |
0.0 |
4.459767 |
0.004654 |
5000 |
1010 |
0.999355773194826 |
0.000644226805174424 |
900.0 |
200.0 |
MagmaSat |
|
Ma57-3b.2 |
77.9 |
0.0498 |
12.07 |
0.0 |
0.0 |
1.0844 |
0.0748 |
0.0355 |
0.0 |
0.0 |
0.4759 |
4.1 |
4.21 |
0.0 |
3.712506 |
0.004448 |
1000 |
1012 |
0.999170291948629 |
0.000829708051370922 |
900.0 |
200.0 |
MagmaSat |
|
Ma57-3c.1 |
77.65 |
0.159 |
12.28 |
0.0 |
0.0 |
0.9769 |
0.0597 |
0.0577 |
0.0 |
0.0 |
0.5598 |
4.08 |
4.18 |
0.0064 |
4.443973 |
0.004654 |
100 |
885 |
0.999352808250491 |
0.000647191749509063 |
900.0 |
200.0 |
MagmaSat |
|
Ma57-3c.2 |
77.65 |
0.159 |
12.28 |
0.0 |
0.0 |
0.9769 |
0.0597 |
0.0577 |
0.0 |
0.0 |
0.5598 |
4.08 |
4.18 |
0.0064 |
4.283171 |
0.004645 |
1000 |
885 |
0.999314871465025 |
0.000685128534974831 |
900.0 |
200.0 |
MagmaSat |
For a single sample
Extract a single sample from your dataset
SampleName = 'BT-ex'
extracted_bulk_comp = myfile.get_sample_composition(SampleName, asSampleClass=True)
Do the calculation
v.calculate_equilibrium_fluid_comp(sample=extracted_bulk_comp, temperature=900.0, pressure=200.0).result
{'CO2': 0.00505423509725724, 'H2O': 0.994945764902743}