Source code for burnman.calibrants.Dorogokupets_2007

# This file is part of BurnMan - a thermoelastic and thermodynamic toolkit for
# the Earth and Planetary Sciences
# Copyright (C) 2012 - 2024 by the BurnMan team, released under the GNU
# GPL v2 or later.

"""
Dorogokupets_2007
^^^^^^^^^^^^^^^^^
"""

import numpy as np
from burnman.classes.calibrant import Calibrant
from burnman.constants import gas_constant
from burnman.eos.vinet import Vinet


_materials_data = {
    "Ag": {
        "F_0": 0.0,
        "P_0": 0.0,
        "T_0": 298.15,
        "n": 1.0,
        "V_0": 10.272e-6,
        "K_0": 99.65e9,
        "Kprime_0": 6.11,
        "theta_B1": 130.6,
        "d_B1": 8.572,
        "m_B1": 0.121,
        "theta_B2": 103.6,
        "d_B2": 5.326,
        "m_B2": 0.449,
        "theta_E1": 111.9,
        "m_E1": 0.766,
        "theta_E2": 189.12,
        "m_E2": 1.664,
        "gamma_0": 2.376,
        "gamma_inf": 1.481,
        "beta": 2.507,
        "a": 6.70e-6,
        "m": 3.44,
        "e": 25.9e-6,
        "f": -1.0,
        "g": 0.666,
        "h": -2.0,
        "H": 15239,
        "S": 0.732,
    },
    "Al": {
        "F_0": 0.0,
        "P_0": 0.0,
        "T_0": 298.15,
        "n": 1.0,
        "V_0": 9.999e-6,
        "K_0": 72.67e9,
        "Kprime_0": 4.62,
        "theta_B1": 245.8,
        "d_B1": 5.575,
        "m_B1": 0.987,
        "theta_B2": 300.0,  # Not used as m = 0
        "d_B2": 1.0,  # Not used as m = 0
        "m_B2": 0.0,
        "theta_E1": 240.2,
        "m_E1": 1.000,
        "theta_E2": 356.2,
        "m_E2": 1.013,
        "gamma_0": 2.144,
        "gamma_inf": 1.017,
        "beta": 3.942,
        "a": 5.14e-6,
        "m": 3.44,
        "e": 54.1e-6,
        "f": -1.0,
        "g": 1.8,
        "h": -2.0,
        "H": 8679,
        "S": 0.998,
    },
    "Au": {
        "F_0": 0.0,
        "P_0": 0.0,
        "T_0": 298.15,
        "n": 1.0,
        "V_0": 10.215e-6,
        "K_0": 166.70e9,
        "Kprime_0": 6.00,
        "theta_B1": 95.7,
        "d_B1": 8.290,
        "m_B1": 0.681,
        "theta_B2": 106.4,
        "d_B2": 3.239,
        "m_B2": 0.417,
        "theta_E1": 170.6,
        "m_E1": 1.063,
        "theta_E2": 105.2,
        "m_E2": 0.839,
        "gamma_0": 2.965,
        "gamma_inf": 1.142,
        "beta": 3.030,
        "a": 25.33e-6,
        "m": 3.79,
        "e": 18.92e-6,
        "f": -1.0,
        "g": 0.66,
        "h": -2.0,
        "H": 11.69e3,  # note typo
        "S": 1.067,
    },
    "Cu": {
        "F_0": 0.0,
        "P_0": 0.0,
        "T_0": 298.15,
        "n": 1.0,
        "V_0": 7.113e-6,
        "K_0": 133.41e9,
        "Kprime_0": 5.37,
        "theta_B1": 123.7,
        "d_B1": 3.776,
        "m_B1": 0.115,
        "theta_B2": 175.4,
        "d_B2": 10.372,
        "m_B2": 0.711,
        "theta_E1": 187.4,
        "m_E1": 0.756,
        "theta_E2": 286.9,
        "m_E2": 1.418,
        "gamma_0": 1.974,
        "gamma_inf": 1.554,
        "beta": 4.647,
        "a": 3.50e-6,
        "m": 3.46,
        "e": 27.698e-6,
        "f": -1.0,
        "g": 0.666,
        "h": -2.0,
        "H": 11687,
        "S": 1.407,
    },
    "Pt": {
        "F_0": 0.0,
        "P_0": 0.0,
        "T_0": 298.15,
        "n": 1.0,
        "V_0": 9.091e-6,
        "K_0": 276.07e9,
        "Kprime_0": 5.30,
        "theta_B1": 95.2,
        "d_B1": 8.199,
        "m_B1": 0.329,
        "theta_B2": 148.4,
        "d_B2": 4.005,
        "m_B2": 0.383,
        "theta_E1": 214.6,
        "m_E1": 1.211,
        "theta_E2": 140.8,
        "m_E2": 1.077,
        "gamma_0": 2.802,
        "gamma_inf": 1.538,
        "beta": 5.550,
        "a": 160.9e-6,
        "m": 4.06,
        "e": 260.0e-6,
        "f": -1.0,
        "g": 2.4,
        "h": -2.0,
        "H": 32572,
        "S": 0.631,
    },
    "Ta": {
        "F_0": 0.0,
        "P_0": 0.0,
        "T_0": 298.15,
        "n": 1.0,
        "V_0": 10.851e-6,
        "K_0": 191.39e9,
        "Kprime_0": 3.81,
        "theta_B1": 72.6,
        "d_B1": 5.536,
        "m_B1": 0.117,
        "theta_B2": 101.8,
        "d_B2": 24.513,
        "m_B2": 0.396,
        "theta_E1": 144.0,
        "m_E1": 1.118,
        "theta_E2": 214.9,
        "m_E2": 1.369,
        "gamma_0": 1.714,
        "gamma_inf": 1.241,
        "beta": 6.825,
        "a": 61.9e-6,
        "m": 4.00,
        "e": 167.0e-6,
        "f": -1.0,
        "g": 1.3,
        "h": -2.0,
        "H": 36278,
        "S": 4.910,
    },
    "W": {
        "F_0": 0.0,
        "P_0": 0.0,
        "T_0": 298.15,
        "n": 1.0,
        "V_0": 9.545e-6,
        "K_0": 306.00e9,
        "Kprime_0": 4.17,
        "theta_B1": 182.8,
        "d_B1": 13.270,
        "m_B1": 0.513,
        "theta_B2": 172.5,
        "d_B2": 3.305,
        "m_B2": 0.174,
        "theta_E1": 287.6,
        "m_E1": 1.166,
        "theta_E2": 213.8,
        "m_E2": 1.145,
        "gamma_0": 1.553,
        "gamma_inf": 0.694,
        "beta": 3.698,
        "a": -39.3e-6,
        "m": 2.67,
        "e": 40.4e-6,
        "f": -1.0,
        "g": 0.2,
        "h": -2.0,
        "H": 14714,
        "S": 0.672,
    },
    "MgO": {
        "F_0": 0.0,
        "P_0": 0.0,
        "T_0": 298.15,
        "n": 2.0,
        "V_0": 11.248e-6,
        "K_0": 160.31e9,
        "Kprime_0": 4.18,
        "theta_B1": 447.3,
        "d_B1": 11.248,
        "m_B1": 1.429,
        "theta_B2": 384.0,
        "d_B2": 3.593,
        "m_B2": 0.276,
        "theta_E1": 703.8,
        "m_E1": 2.570,
        "theta_E2": 466.0,
        "m_E2": 1.725,
        "gamma_0": 1.522,
        "gamma_inf": 1.111,
        "beta": 4.509,
        "a": 13.56e-6,
        "m": 5.23,
        "e": 0,
        "f": 0.0,
        "g": 0,
        "h": 0.0,
        "H": 0,
        "S": 0,
    },
    "Diamond": {
        "F_0": 0.0,
        "P_0": 0.0,
        "T_0": 298.15,
        "n": 1.0,
        "V_0": 3.417e-6,
        "K_0": 443.16e9,
        "Kprime_0": 3.777,
        "theta_B1": 1202.1,
        "d_B1": 9.604,
        "m_B1": 1.163,
        "theta_B2": 1135.1,
        "d_B2": 3.380,
        "m_B2": 0.218,
        "theta_E1": 1687.2,
        "m_E1": 1.396,
        "theta_E2": 1033.7,
        "m_E2": 0.223,
        "gamma_0": 0.820,
        "gamma_inf": 0.615,
        "beta": 10.121,
        "a": -23.85e-6,
        "m": 1.22,
        "e": 0,
        "f": 0.0,
        "g": 0,
        "h": 0.0,
        "H": 0,
        "S": 0,
    },
}


do_cold_eos = Vinet()


def _F_qhB(m, d, theta, temperature):
    # Equation 8a and equations just after Equation 7
    g = d * np.log(1.0 + theta / (temperature * d))
    b = 1.0 / (np.exp(g) - 1.0)
    return m * ((d - 1.0) / (2.0 * d) * theta - temperature * np.log(1.0 + b))


def _F_qhE(m, theta, temperature):
    # Equation 8b
    return m * (theta / 2.0 + temperature * np.log(1.0 - np.exp(-theta / temperature)))


def _F_anh_factor(m, theta, temperature):
    # Equation 12
    zeta = np.exp(theta / temperature)
    f = np.power(0.5 * theta + theta / (zeta - 1.0), 2.0) + 2.0 * theta * theta * (
        zeta / np.power(zeta - 1.0, 2.0)
    )
    return m * f


def _F_th(temperature, x, params):
    # Equation 10
    F_theta = np.power(x, -params["gamma_inf"]) * np.exp(
        (params["gamma_0"] - params["gamma_inf"])
        / params["beta"]
        * (1.0 - np.power(x, params["beta"]))
    )
    theta_B1 = params["theta_B1"] * F_theta
    theta_B2 = params["theta_B2"] * F_theta
    theta_E1 = params["theta_E1"] * F_theta
    theta_E2 = params["theta_E2"] * F_theta

    # Equation 8
    F_qh = (
        _F_qhB(params["m_B1"], params["d_B1"], theta_B1, temperature)
        + _F_qhB(params["m_B2"], params["d_B2"], theta_B2, temperature)
        + _F_qhE(params["m_E1"], theta_E1, temperature)
        + _F_qhE(params["m_E2"], theta_E2, temperature)
    )

    # Equation 12
    F_anh = (
        params["a"]
        * np.power(x, params["m"])
        / 6.0
        * (
            _F_anh_factor(params["m_B1"], theta_B1, temperature)
            + _F_anh_factor(params["m_B2"], theta_B2, temperature)
            + _F_anh_factor(params["m_E1"], theta_E1, temperature)
            + _F_anh_factor(params["m_E2"], theta_E2, temperature)
        )
    )

    # Equation 13
    F_el = (
        -1.5
        * params["n"]
        * params["e"]
        * np.power(x, params["g"])
        * temperature
        * temperature
    )

    # Equation 14
    F_def = (
        -1.5
        * params["n"]
        * temperature
        * np.exp(
            params["S"] * np.power(x, params["f"])
            - params["H"] * np.power(x, params["h"]) / temperature
        )
    )
    return F_qh + F_anh + F_el + F_def


def _thermal_helmholtz_energy(volume, temperature, params):
    # Just after Equation 6b
    Vrel = volume / params["V_0"]
    Fth = _F_th(temperature, Vrel, params)
    Fth0 = _F_th(params["T_0"], Vrel, params)

    # Equation 5
    return gas_constant * (Fth - Fth0)


def _pressure(volume, temperature, params):
    cold_pressure = do_cold_eos.pressure(temperature, volume, params)
    dV = params["V_0"] * 1.0e-7

    F1 = _thermal_helmholtz_energy(volume + dV / 2.0, temperature, params)
    F0 = _thermal_helmholtz_energy(volume - dV / 2.0, temperature, params)
    return cold_pressure - (F1 - F0) / dV


[docs] class Ag(Calibrant): """ The Ag pressure standard reported by Dorogokupets and Oganov (2007; https://doi.org/10.1103/PhysRevB.75.024115). """ def __init__(self): Calibrant.__init__(self, _pressure, "pressure", _materials_data["Ag"])
[docs] class Al(Calibrant): """ The Al pressure standard reported by Dorogokupets and Oganov (2007; https://doi.org/10.1103/PhysRevB.75.024115). """ def __init__(self): Calibrant.__init__(self, _pressure, "pressure", _materials_data["Al"])
[docs] class Au(Calibrant): """ The Au pressure standard reported by Dorogokupets and Oganov (2007; https://doi.org/10.1103/PhysRevB.75.024115). """ def __init__(self): Calibrant.__init__(self, _pressure, "pressure", _materials_data["Au"])
[docs] class Cu(Calibrant): """ The Cu pressure standard reported by Dorogokupets and Oganov (2007; https://doi.org/10.1103/PhysRevB.75.024115). """ def __init__(self): Calibrant.__init__(self, _pressure, "pressure", _materials_data["Cu"])
[docs] class diamond(Calibrant): """ The diamond pressure standard reported by Dorogokupets and Oganov (2007; https://doi.org/10.1103/PhysRevB.75.024115). """ def __init__(self): Calibrant.__init__(self, _pressure, "pressure", _materials_data["Diamond"])
[docs] class MgO(Calibrant): """ The MgO pressure standard reported by Dorogokupets and Oganov (2007; https://doi.org/10.1103/PhysRevB.75.024115). """ def __init__(self): Calibrant.__init__(self, _pressure, "pressure", _materials_data["MgO"])
[docs] class Pt(Calibrant): """ The Pt pressure standard reported by Dorogokupets and Oganov (2007; https://doi.org/10.1103/PhysRevB.75.024115). """ def __init__(self): Calibrant.__init__(self, _pressure, "pressure", _materials_data["Pt"])
[docs] class Ta(Calibrant): """ The Ta pressure standard reported by Dorogokupets and Oganov (2007; https://doi.org/10.1103/PhysRevB.75.024115). """ def __init__(self): Calibrant.__init__(self, _pressure, "pressure", _materials_data["Ta"])
[docs] class W(Calibrant): """ The W pressure standard reported by Dorogokupets and Oganov (2007; https://doi.org/10.1103/PhysRevB.75.024115). """ def __init__(self): Calibrant.__init__(self, _pressure, "pressure", _materials_data["W"])