# This file is part of BurnMan - a thermoelastic and thermodynamic toolkit for
# the Earth and Planetary Sciences
# Copyright (C) 2012 - 2021 by the BurnMan team, released under the GNU
# GPL v2 or later.
"""
DKS_2013_liquids
^^^^^^^^^^^^^^^^
Liquids from de Koker and Stixrude (2013) FPMD simulations.
"""
import numpy as np
from ..classes.mineral import Mineral
from ..utils.chemistry import formula_mass
# Vector parsing for DKS liquid equation of state
[docs]
def vector_to_array(a, Of, Otheta):
array = np.empty([Of + 1, Otheta + 1])
for i in range(Of + 1):
for j in range(Otheta + 1):
n = int((i + j) * ((i + j) + 1.0) / 2.0 + j)
array[i][j] = a[n]
return array
[docs]
class SiO2_liquid(Mineral):
def __init__(self):
formula = {"Si": 1.0, "O": 2.0}
self.params = {
"name": "SiO2_liquid",
"formula": formula,
"equation_of_state": "dks_l",
"V_0": 2.78e-05,
"T_0": 3000.0,
"O_theta": 2,
"O_f": 5,
"m": 0.91,
"a": [
-1945.93156,
-226.6835978,
455.0286309,
2015.65287,
-200.585046,
-216.6028187,
48369.72992,
441.5340414,
73.07765325,
0.0,
-651587.652,
20701.69954,
892.12209,
0.0,
0.0,
4100181.286,
-128258.7237,
-1228.478753,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
],
"zeta_0": 0.0004266056389,
"xi": 0.8639433047,
"Tel_0": 5651.204964,
"eta": -0.2783503528,
"el_V_0": 1e-06,
"n": sum(formula.values()),
"molar_mass": formula_mass(formula),
}
self.params["a"] = (
vector_to_array(
self.params["a"], self.params["O_f"], self.params["O_theta"]
)
* 1e3
) # [J/mol]
Mineral.__init__(self)
[docs]
class MgSiO3_liquid(Mineral):
def __init__(self):
formula = {"Mg": 1.0, "Si": 1.0, "O": 3.0}
self.params = {
"name": "MgSiO3_liquid",
"formula": formula,
"equation_of_state": "dks_l",
"V_0": 4.18e-05,
"T_0": 3000.0,
"O_theta": 2,
"O_f": 3,
"m": 0.83,
"a": [
-2984.241297,
-380.9839126,
601.8088234,
7307.69753,
7.626381912,
-328.367174,
38737.46417,
6251.230413,
402.4716495,
0.0,
0.0,
-23578.93569,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
],
"zeta_0": 0.008009960983,
"xi": -0.08859010337,
"Tel_0": 2194.563521,
"eta": -0.775354875,
"el_V_0": 3.89008e-05,
"n": sum(formula.values()),
"molar_mass": formula_mass(formula),
}
self.params["a"] = (
vector_to_array(
self.params["a"], self.params["O_f"], self.params["O_theta"]
)
* 1e3
) # [J/mol]
Mineral.__init__(self)
[docs]
class MgSi2O5_liquid(Mineral):
def __init__(self):
formula = {"Mg": 1.0, "Si": 2.0, "O": 5.0}
self.params = {
"name": "MgSi2O5_liquid",
"formula": formula,
"equation_of_state": "dks_l",
"V_0": 6.75e-05,
"T_0": 3000.0,
"O_theta": 2,
"O_f": 3,
"m": 0.79,
"a": [
-4958.560203,
-607.6635229,
1089.553108,
9125.144702,
-443.9654989,
-603.1466364,
62485.19233,
10927.5085,
1425.929331,
0.0,
0.0,
-27738.0811,
-4055.024972,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
],
"zeta_0": 0.02219035084,
"xi": 0.7754599642,
"Tel_0": 1699.783718,
"eta": -0.4712864331,
"el_V_0": 0.0001080643234,
"n": sum(formula.values()),
"molar_mass": formula_mass(formula),
}
self.params["a"] = (
vector_to_array(
self.params["a"], self.params["O_f"], self.params["O_theta"]
)
* 1e3
) # [J/mol]
Mineral.__init__(self)
[docs]
class MgSi3O7_liquid(Mineral):
def __init__(self):
formula = {"Mg": 1.0, "Si": 3.0, "O": 7.0}
self.params = {
"name": "MgSi3O7_liquid",
"formula": formula,
"equation_of_state": "dks_l",
"V_0": 9.35e-05,
"T_0": 3000.0,
"O_theta": 2,
"O_f": 3,
"m": 0.86,
"a": [
-6925.370617,
-832.0455172,
1439.840307,
12287.35224,
-264.7754561,
-780.6835127,
78558.47091,
8145.563063,
1444.65423,
0.0,
0.0,
-13036.84144,
-2360.783631,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
],
"zeta_0": 0.02273836197,
"xi": 0.4506392324,
"Tel_0": 2085.530204,
"eta": -0.4804823168,
"el_V_0": 0.0001080643234,
"n": sum(formula.values()),
"molar_mass": formula_mass(formula),
}
self.params["a"] = (
vector_to_array(
self.params["a"], self.params["O_f"], self.params["O_theta"]
)
* 1e3
) # [J/mol]
Mineral.__init__(self)
[docs]
class MgSi5O11_liquid(Mineral):
def __init__(self):
formula = {"Mg": 1.0, "Si": 5.0, "O": 11.0}
self.params = {
"name": "MgSi5O11_liquid",
"formula": formula,
"equation_of_state": "dks_l",
"V_0": 0.000146,
"T_0": 3000.0,
"O_theta": 2,
"O_f": 4,
"m": 0.77,
"a": [
-10813.78126,
-1297.292175,
2642.979479,
19993.66381,
-1085.821183,
-1226.314792,
49132.58238,
18886.40475,
1252.739819,
0.0,
528358.8509,
-54556.11837,
2844.969895,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
],
"zeta_0": 0.03318133543,
"xi": 0.4033708612,
"Tel_0": 2037.798559,
"eta": -0.6209203711,
"el_V_0": 0.00015,
"n": sum(formula.values()),
"molar_mass": formula_mass(formula),
}
self.params["a"] = (
vector_to_array(
self.params["a"], self.params["O_f"], self.params["O_theta"]
)
* 1e3
) # [J/mol]
Mineral.__init__(self)
[docs]
class Mg2SiO4_liquid(Mineral):
def __init__(self):
formula = {"Mg": 2.0, "Si": 1.0, "O": 4.0}
self.params = {
"name": "Mg2SiO4_liquid",
"formula": formula,
"equation_of_state": "dks_l",
"V_0": 5.84e-05,
"T_0": 3000.0,
"O_theta": 2,
"O_f": 3,
"m": 0.75,
"a": [
-3944.769208,
-531.7975964,
880.0460994,
11401.47398,
118.7409191,
-456.3140461,
55778.07008,
12132.5261,
519.3612273,
0.0,
0.0,
-48733.22459,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
],
"zeta_0": 0.01101820277,
"xi": 1.175924196,
"Tel_0": 2228.185561,
"eta": -0.464192202,
"el_V_0": 5.23613e-05,
"n": sum(formula.values()),
"molar_mass": formula_mass(formula),
}
self.params["a"] = (
vector_to_array(
self.params["a"], self.params["O_f"], self.params["O_theta"]
)
* 1e3
) # [J/mol]
Mineral.__init__(self)
[docs]
class Mg3Si2O7_liquid(Mineral):
def __init__(self):
formula = {"Mg": 3.0, "Si": 2.0, "O": 7.0}
self.params = {
"name": "Mg3Si2O7_liquid",
"formula": formula,
"equation_of_state": "dks_l",
"V_0": 0.0001005,
"T_0": 3000.0,
"O_theta": 2,
"O_f": 3,
"m": 0.79,
"a": [
-6945.262972,
-905.8656523,
1466.115121,
18498.28462,
260.3083362,
-841.8330982,
89795.95729,
14752.47411,
1120.541194,
0.0,
0.0,
-55594.62308,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
],
"zeta_0": 0.02603891379,
"xi": 1.129966677,
"Tel_0": 2230.685379,
"eta": -0.3689626876,
"el_V_0": 0.0001080643234,
"n": sum(formula.values()),
"molar_mass": formula_mass(formula),
}
self.params["a"] = (
vector_to_array(
self.params["a"], self.params["O_f"], self.params["O_theta"]
)
* 1e3
) # [J/mol]
Mineral.__init__(self)
[docs]
class Mg5SiO7_liquid(Mineral):
def __init__(self):
formula = {"Mg": 5.0, "Si": 1.0, "O": 7.0}
self.params = {
"name": "Mg5SiO7_liquid",
"formula": formula,
"equation_of_state": "dks_l",
"V_0": 0.0001075,
"T_0": 3000.0,
"O_theta": 2,
"O_f": 3,
"m": 0.64,
"a": [
-6721.181931,
-1008.922671,
1800.764267,
25856.0057,
2169.612789,
-753.9019178,
103374.7345,
17933.40061,
127.5989699,
0.0,
0.0,
-80394.40732,
570.0622605,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
],
"zeta_0": 0.0163355197,
"xi": 0.2784006205,
"Tel_0": 1662.606581,
"eta": -0.9693629899,
"el_V_0": 0.0001080643234,
"n": sum(formula.values()),
"molar_mass": formula_mass(formula),
}
self.params["a"] = (
vector_to_array(
self.params["a"], self.params["O_f"], self.params["O_theta"]
)
* 1e3
) # [J/mol]
Mineral.__init__(self)
[docs]
class MgO_liquid(Mineral):
def __init__(self):
formula = {"Mg": 1.0, "O": 1.0}
self.params = {
"name": "MgO_liquid",
"formula": formula,
"equation_of_state": "dks_l",
"V_0": 1.646e-05,
"T_0": 3000.0,
"O_theta": 2,
"O_f": 3,
"m": 0.63,
"a": [
-925.2677296,
-155.3240992,
260.8211743,
5323.167667,
466.3722398,
-88.30035696,
10473.87879,
1997.967054,
50.72520834,
0.0,
0.0,
-9914.621337,
71.89989255,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
],
"zeta_0": 0.002194565772,
"xi": 0.411459446,
"Tel_0": 1620.106387,
"eta": -0.986457555,
"el_V_0": 1.620953559e-05,
"n": sum(formula.values()),
"molar_mass": formula_mass(formula),
}
self.params["a"] = (
vector_to_array(
self.params["a"], self.params["O_f"], self.params["O_theta"]
)
* 1e3
) # [J/mol]
Mineral.__init__(self)