Source code for burnman.minerals.DKS_2013_liquids

# 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)