Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

added calibrants #596

Merged
merged 2 commits into from
Jul 4, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 55 additions & 0 deletions burnman/calibrants/Armentrout_2015.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# 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.

from burnman.eos.birch_murnaghan import BirchMurnaghanBase as BM3
from burnman.eos.mie_grueneisen_debye import MGDBase
from burnman.classes.calibrant import Calibrant


"""
Armentrout_2015
^^^^^^^^^^^^^^^
"""


class Co_fcc(Calibrant):
"""
The FCC Cobalt pressure standard reported by Armentrout
(2015; https://doi.org/10.1063/1.4935087).
"""

def __init__(self):
def _pressure_Armentrout_fccCo(volume, temperature, params):

# Isothermal pressure (GPa)
pressure_model = BM3()
P0 = pressure_model.pressure(params["T_0"], volume, params)

# Thermal pressure
thermal_model = MGDBase()
Pth0 = thermal_model._thermal_pressure(params["T_0"], volume, params)
Pth = thermal_model._thermal_pressure(temperature, volume, params)

# Total pressure
P = P0 + Pth - Pth0

return P

_params_Armentrout_fccCo = {
"V_0": 6.7529e-06,
"K_0": 196.0e9,
"Kprime_0": 4.7,
"Debye_0": 385.0,
"grueneisen_0": 2.0,
"q_0": 1.3,
"n": 1.0,
"T_0": 300.0,
"P_0": 0.0,
"Z": 4.0,
}

Calibrant.__init__(
self, _pressure_Armentrout_fccCo, "pressure", _params_Armentrout_fccCo
)
53 changes: 53 additions & 0 deletions burnman/calibrants/Campbell_2009.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# 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.

from burnman.eos.birch_murnaghan import BirchMurnaghanBase as BM3
from burnman.eos.mie_grueneisen_debye import MGDBase
from burnman.classes.calibrant import Calibrant


"""
Campbell_2009
^^^^^^^^^^^^^
"""


class Ni_fcc(Calibrant):
"""
The FCC Ni pressure standard reported by
Campbell (2009; https://doi.org/10.1016/j.epsl.2009.07.022).
"""

def __init__(self):
def _pressure_Campbell_Ni(volume, temperature, params):

# Isothermal pressure (GPa)
pressure_model = BM3()
P0 = pressure_model.pressure(params["T_0"], volume, params)

# Thermal pressure
thermal_model = MGDBase()
Pth0 = thermal_model._thermal_pressure(params["T_0"], volume, params)
Pth = thermal_model._thermal_pressure(temperature, volume, params)

# Total pressure
P = P0 + Pth - Pth0

return P

_params_Campbell_Ni = {
"V_0": 6.5870e-06,
"K_0": 179.0e9,
"Kprime_0": 4.3,
"Debye_0": 415.0,
"grueneisen_0": 2.5,
"q_0": 1.0,
"n": 1.0,
"T_0": 300.0,
"P_0": 0.0,
"Z": 4.0,
}

Calibrant.__init__(self, _pressure_Campbell_Ni, "pressure", _params_Campbell_Ni)
55 changes: 55 additions & 0 deletions burnman/calibrants/Chidester_2021.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# 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.

from burnman.eos.birch_murnaghan import BirchMurnaghanBase as BM3
from burnman.eos.mie_grueneisen_debye import MGDBase
from burnman.classes.calibrant import Calibrant


"""
Chidester_2021
^^^^^^^^^^^^^^
"""


class KCl_B2(Calibrant):
"""
The B2 KCl pressure standard reported by
Chidester et al. (2021; https://doi.org/10.1103/PhysRevB.104.094107).
"""

def __init__(self):
def _pressure_Chidester_KCl(volume, temperature, params):

# Isothermal pressure (GPa)
pressure_model = BM3()
P0 = pressure_model.pressure(params["T_0"], volume, params)

# Thermal pressure
thermal_model = MGDBase()
Pth0 = thermal_model._thermal_pressure(params["T_0"], volume, params)
Pth = thermal_model._thermal_pressure(temperature, volume, params)

# Total pressure
P = P0 + Pth - Pth0

return P

_params_Chidester_KCl = {
"V_0": 3.1200e-05,
"K_0": 24.0e9,
"Kprime_0": 4.56,
"Debye_0": 235.0,
"grueneisen_0": 2.9,
"q_0": 1.0,
"n": 2.0,
"T_0": 300.0,
"P_0": 0.0,
"Z": 1.0,
}

Calibrant.__init__(
self, _pressure_Chidester_KCl, "pressure", _params_Chidester_KCl
)
66 changes: 40 additions & 26 deletions burnman/calibrants/Decker_1971.py
Original file line number Diff line number Diff line change
@@ -1,54 +1,68 @@
# This file is part of BurnMan - a thermoelastic and thermodynamic toolkit for
# the Earth and Planetary Sciences
# Copyright (C) 2012 - 2022 by the BurnMan team, released under the GNU
# Copyright (C) 2012 - 2024 by the BurnMan team, released under the GNU
# GPL v2 or later.

"""
Decker_1971
^^^^^^^^^^^
"""

import numpy as np
from ..eos.birch_murnaghan import birch_murnaghan
from ..eos import MGD2
from ..eos import debye
from ..classes.calibrant import Calibrant
from burnman.eos.mie_grueneisen_debye import MGDBase
from burnman.classes.calibrant import Calibrant


class NaCl_B1(Calibrant):
"""
The NaCl (B1 structured) pressure standard reported by Decker (1971).
The NaCl (B1 structured) pressure standard reported by
Decker (1971; https://doi.org/10.1063/1.1660714).

.. note:: This calibrant is not exactly the same as that proposed by Decker.
The cold compression curve has here been approximated by a
Birch-Murnaghan EoS.

.. todo:: Make the calibrant exactly match that published by Decker.
The cold compression curve has here been approximated by a 4th order
Birch-Murnaghan EoS, as described in
Matsui et al. (2012; https://doi.org/10.2138/am.2012.4136).
"""

def __init__(self):
def _pressure_Decker_NaCl(volume, temperature, params):
p300 = birch_murnaghan(params["V_0"] / volume, params)
grueneisen = MGD2._grueneisen_parameter(0.0, params["V_0"] / volume, params)
Debye_T = params["Debye_0"] * np.exp(
(params["grueneisen_0"] - grueneisen) / params["q_0"]

# Isothermal pressure (GPa)
a = (3 / 2) * (params["Kprime_0"] - 4)
b = (
9 * params["K_0"] * params["Kprime_prime_0"]
+ 9 * params["Kprime_0"] ** 2
- 63 * params["Kprime_0"]
+ 143
)
f = 0.5 * ((volume / params["V_0"]) ** (-2 / 3) - 1)
K_T = (
params["K_0"]
* ((1 + 2 * f) ** (5 / 2))
* (1 + (7 + 2 * a) * f + (9 * a + 3 * b) * f**2 + 11 * b * f**3)
)
Eqh = debye.thermal_energy(temperature, Debye_T, params["n"])
EqhR = debye.thermal_energy(params["refT"], Debye_T, params["n"])
dpqh = (Eqh - EqhR) * (grueneisen / volume)
pressure = p300 + dpqh
return pressure
P0 = 3 * f * params["K_0"] * (1 + 2 * f) ** (5 / 2) * (1 + a * f + b * f**2)

# Thermal pressure
thermal_model = MGDBase()
Pth0 = thermal_model._thermal_pressure(params["T_0"], volume, params)
Pth = thermal_model._thermal_pressure(temperature, volume, params)

# Total pressure
P = (P0 * 1e9) + Pth - Pth0

return P

_params_Decker_NaCl = {
"V_0": 2.7015e-05,
"K_0": 24.02e9,
"Kprime_0": 4.7369,
"Debye_0": 279,
"V_0": 2.7013e-05,
"K_0": 23.7,
"Kprime_0": 5.04, # 4.91 in Matsui (2012), however 5.04 is required to reproduce values in Table 4.
"Kprime_prime_0": -0.267,
"Debye_0": 279.0,
"grueneisen_0": 1.59,
"q_0": 0.93,
"n": 2.0,
"refT": 298.15,
"P_0": 0,
"T_0": 300.0,
"P_0": 0.0,
"Z": 4.0,
}

Expand Down
52 changes: 52 additions & 0 deletions burnman/calibrants/Dewaele_2008.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# 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.

from burnman.eos.vinet import Vinet
from burnman.eos.mie_grueneisen_debye import MGDBase
from burnman.classes.calibrant import Calibrant

"""
Dewaele_2008
^^^^^^^^^^^^
"""


class Ni(Calibrant):
"""
The Ni pressure standard reported by
Dewaele (2008; Table IV; https://doi.org/10.1103/PhysRevB.78.104102).
"""

def __init__(self):
def _pressure_Dewaele_Ni(volume, temperature, params):

# Isothermal pressure (GPa)
pressure_model = Vinet()
P0 = pressure_model.pressure(params["T_0"], volume, params)

# Thermal pressure
thermal_model = MGDBase()
Pth0 = thermal_model._thermal_pressure(params["T_0"], volume, params)
Pth = thermal_model._thermal_pressure(temperature, volume, params)

# Total pressure
P = P0 + Pth - Pth0

return P

_params_Dewaele_Ni = {
"V_0": 6.5792e-06,
"K_0": 176.7e9,
"Kprime_0": 5.23,
"Debye_0": 415.0,
"grueneisen_0": 1.98,
"q_0": 1.3,
"n": 1.0,
"T_0": 300.0,
"P_0": 0.0,
"Z": 4.0,
}

Calibrant.__init__(self, _pressure_Dewaele_Ni, "pressure", _params_Dewaele_Ni)
Loading
Loading