Skip to content

Commit

Permalink
Merge pull request #596 from bobmyhill/calibs
Browse files Browse the repository at this point in the history
added calibrants
  • Loading branch information
bobmyhill authored Jul 4, 2024
2 parents 7b89822 + 960e5b7 commit f9ce9a3
Show file tree
Hide file tree
Showing 37 changed files with 2,246 additions and 36 deletions.
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

0 comments on commit f9ce9a3

Please sign in to comment.