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()
Output

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
Output

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}