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.)/2. + j) array[i][j] = a[n] return array
[docs]class SiO2_liquid(Mineral): def __init__(self): formula = {'Si': 1.0, 'O': 2.} 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.} 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.} 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.} 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.} 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.} 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.} 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.} 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.} 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)