From da5a3d277399431d53d6f93ed954a4ecbd43c2a6 Mon Sep 17 00:00:00 2001 From: Robert Farla Date: Thu, 4 Jul 2024 16:11:17 +0100 Subject: [PATCH 1/2] added calibrants --- burnman/calibrants/Armentrout_2015.py | 55 ++++++++++ burnman/calibrants/Campbell_2009.py | 53 +++++++++ burnman/calibrants/Chidester_2021.py | 55 ++++++++++ burnman/calibrants/Decker_1971.py | 66 +++++++----- burnman/calibrants/Dewaele_2008.py | 52 +++++++++ burnman/calibrants/Dewaele_2012.py | 91 ++++++++++++++++ burnman/calibrants/Dewaele_2013.py | 57 ++++++++++ burnman/calibrants/Dewaele_2020.py | 57 ++++++++++ burnman/calibrants/Dorogokupets_2017.py | 137 ++++++++++++++++++++++++ burnman/calibrants/Dubrovinsky_1998.py | 74 +++++++++++++ burnman/calibrants/Fei_2007.py | 63 +++++++++++ burnman/calibrants/Fei_2016.py | 53 +++++++++ burnman/calibrants/Huang_2016.py | 53 +++++++++ burnman/calibrants/LeGodec_2000.py | 62 +++++++++++ burnman/calibrants/Litasov_2013.py | 92 ++++++++++++++++ burnman/calibrants/Matsui_2009.py | 62 +++++++++++ burnman/calibrants/Matsui_2010.py | 62 +++++++++++ burnman/calibrants/Matsui_2012.py | 66 ++++++++++++ burnman/calibrants/Miozzi_2020.py | 55 ++++++++++ burnman/calibrants/Ono_2022.py | 51 +++++++++ burnman/calibrants/Pigott_2015.py | 53 +++++++++ burnman/calibrants/Shi_2022.py | 53 +++++++++ burnman/calibrants/Shim_2002.py | 62 +++++++++++ burnman/calibrants/Sokolova_2013.py | 53 +++++++++ burnman/calibrants/Speziale_2001.py | 55 ++++++++++ burnman/calibrants/Tange_2009.py | 123 +++++++++++++++++++++ burnman/calibrants/Tateno_2019.py | 52 +++++++++ burnman/calibrants/Walker_2002.py | 51 +++++++++ burnman/calibrants/Zeng_2010.py | 53 +++++++++ burnman/calibrants/Zha_2004.py | 52 +++++++++ burnman/calibrants/Zha_2008.py | 63 +++++++++++ burnman/calibrants/Zhang_1999.py | 51 +++++++++ burnman/calibrants/Zhao_1997.py | 61 +++++++++++ burnman/calibrants/Zhao_2000.py | 61 +++++++++++ burnman/calibrants/__init__.py | 34 +++++- misc/ref/example_calibrants.py.out | 16 +-- tests/test_calibrants.py | 37 +++++++ 37 files changed, 2211 insertions(+), 35 deletions(-) create mode 100644 burnman/calibrants/Armentrout_2015.py create mode 100644 burnman/calibrants/Campbell_2009.py create mode 100644 burnman/calibrants/Chidester_2021.py create mode 100644 burnman/calibrants/Dewaele_2008.py create mode 100644 burnman/calibrants/Dewaele_2012.py create mode 100644 burnman/calibrants/Dewaele_2013.py create mode 100644 burnman/calibrants/Dewaele_2020.py create mode 100644 burnman/calibrants/Dorogokupets_2017.py create mode 100644 burnman/calibrants/Dubrovinsky_1998.py create mode 100644 burnman/calibrants/Fei_2007.py create mode 100644 burnman/calibrants/Fei_2016.py create mode 100644 burnman/calibrants/Huang_2016.py create mode 100644 burnman/calibrants/LeGodec_2000.py create mode 100644 burnman/calibrants/Litasov_2013.py create mode 100644 burnman/calibrants/Matsui_2009.py create mode 100644 burnman/calibrants/Matsui_2010.py create mode 100644 burnman/calibrants/Matsui_2012.py create mode 100644 burnman/calibrants/Miozzi_2020.py create mode 100644 burnman/calibrants/Ono_2022.py create mode 100644 burnman/calibrants/Pigott_2015.py create mode 100644 burnman/calibrants/Shi_2022.py create mode 100644 burnman/calibrants/Shim_2002.py create mode 100644 burnman/calibrants/Sokolova_2013.py create mode 100644 burnman/calibrants/Speziale_2001.py create mode 100644 burnman/calibrants/Tange_2009.py create mode 100644 burnman/calibrants/Tateno_2019.py create mode 100644 burnman/calibrants/Walker_2002.py create mode 100644 burnman/calibrants/Zeng_2010.py create mode 100644 burnman/calibrants/Zha_2004.py create mode 100644 burnman/calibrants/Zha_2008.py create mode 100644 burnman/calibrants/Zhang_1999.py create mode 100644 burnman/calibrants/Zhao_1997.py create mode 100644 burnman/calibrants/Zhao_2000.py create mode 100644 tests/test_calibrants.py diff --git a/burnman/calibrants/Armentrout_2015.py b/burnman/calibrants/Armentrout_2015.py new file mode 100644 index 000000000..1452a521e --- /dev/null +++ b/burnman/calibrants/Armentrout_2015.py @@ -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 + ) diff --git a/burnman/calibrants/Campbell_2009.py b/burnman/calibrants/Campbell_2009.py new file mode 100644 index 000000000..ceeebe4c8 --- /dev/null +++ b/burnman/calibrants/Campbell_2009.py @@ -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) diff --git a/burnman/calibrants/Chidester_2021.py b/burnman/calibrants/Chidester_2021.py new file mode 100644 index 000000000..56e6ddb69 --- /dev/null +++ b/burnman/calibrants/Chidester_2021.py @@ -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 + ) diff --git a/burnman/calibrants/Decker_1971.py b/burnman/calibrants/Decker_1971.py index bfb67187b..4eb9bc032 100644 --- a/burnman/calibrants/Decker_1971.py +++ b/burnman/calibrants/Decker_1971.py @@ -1,6 +1,6 @@ # 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. """ @@ -8,47 +8,61 @@ ^^^^^^^^^^^ """ -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, } diff --git a/burnman/calibrants/Dewaele_2008.py b/burnman/calibrants/Dewaele_2008.py new file mode 100644 index 000000000..2acac7591 --- /dev/null +++ b/burnman/calibrants/Dewaele_2008.py @@ -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) diff --git a/burnman/calibrants/Dewaele_2012.py b/burnman/calibrants/Dewaele_2012.py new file mode 100644 index 000000000..70dabdd8c --- /dev/null +++ b/burnman/calibrants/Dewaele_2012.py @@ -0,0 +1,91 @@ +# 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 +import numpy as np + + +""" +Dewaele_2012 +^^^^^^^^^^^^ +""" + + +class KBr_B2(Calibrant): + """ + The B2 KBr pressure standard reported by + Dewaele et al. (2012; https://doi.org/10.1103/PhysRevB.85.214105). + """ + + def __init__(self): + def _pressure_Dewaele_KBr(volume, temperature, params): + + # Isothermal pressure (GPa) + pressure_model = Vinet() + P0 = pressure_model.pressure(params["T_0"], volume, params) + + # Thermal pressure + Pth = ( + params["aK(V,T)"] + params["dK_dT_V"] * np.log(params["V_0"] / volume) + ) * (temperature - params["T_0"]) + + # Total pressure + P = P0 + Pth + + return P + + _params_Dewaele_KBr = { + "V_0": 3.8180e-5, + "K_0": 14.9e9, + "Kprime_0": 5.81, + "aK(V,T)": 0.00222e9, + "dK_dT_V": 0.0, + "n": 2.0, + "T_0": 300.0, + "P_0": 0.0, + "Z": 1.0, + } + + Calibrant.__init__(self, _pressure_Dewaele_KBr, "pressure", _params_Dewaele_KBr) + + +class KCl_B2(Calibrant): + """ + The B2 KCl pressure standard reported by + Dewaele et al. (2012; https://doi.org/10.1103/PhysRevB.85.214105). + """ + + def __init__(self): + def _pressure_Dewaele_KCl(volume, temperature, params): + + # Isothermal pressure (GPa) + pressure_model = Vinet() + P0 = pressure_model.pressure(params["T_0"], volume, params) + + # Thermal pressure + Pth = ( + params["aK(V,T)"] + params["dK_dT_V"] * np.log(params["V_0"] / volume) + ) * (temperature - params["T_0"]) + + # Total pressure + P = P0 + Pth + + return P + + _params_Dewaele_KCl = { + "V_0": 3.28206e-5, + "K_0": 17.2e9, + "Kprime_0": 5.89, + "aK(V,T)": 0.00224e9, + "dK_dT_V": 0.0, + "n": 2.0, + "T_0": 300.0, + "P_0": 0.0, + "Z": 1.0, + } + + Calibrant.__init__(self, _pressure_Dewaele_KCl, "pressure", _params_Dewaele_KCl) diff --git a/burnman/calibrants/Dewaele_2013.py b/burnman/calibrants/Dewaele_2013.py new file mode 100644 index 000000000..8ee604d0b --- /dev/null +++ b/burnman/calibrants/Dewaele_2013.py @@ -0,0 +1,57 @@ +# 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 +import numpy as np + + +""" +Dewaele_2013 +^^^^^^^^^^^^ +""" + + +class Al2O3_corundum(Calibrant): + """ + The alpha-Al2O3 (corundum) pressure standard reported by + Dewaele and Torrent (2013; https://doi.org/10.1103/PhysRevB.88.064107). + The thermal model is from Shi (2022). + """ + + def __init__(self): + def _pressure_Dewaele_Al2O3(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_Al2O3 = { + "V_0": 2.5594e-5, + "K_0": 254.1e9, + "Kprime_0": 4.0, + "Debye_0": 1100.0, + "grueneisen_0": 1.32, + "q_0": 0.8, + "n": 5.0, + "T_0": 300.0, + "P_0": 0.0, + "Z": 6.0, + } + + Calibrant.__init__( + self, _pressure_Dewaele_Al2O3, "pressure", _params_Dewaele_Al2O3 + ) diff --git a/burnman/calibrants/Dewaele_2020.py b/burnman/calibrants/Dewaele_2020.py new file mode 100644 index 000000000..b3bc0f013 --- /dev/null +++ b/burnman/calibrants/Dewaele_2020.py @@ -0,0 +1,57 @@ +# 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 +import numpy as np + + +""" +Dewaele_2020 +^^^^^^^^^^^^ +""" + + +class CsCl(Calibrant): + """ + The CsCl pressure standard reported by + Dewaele (2020; https://doi.org/10.1080/08957959.2020.1774754). + The thermal model is from Decker (1971). + """ + + def __init__(self): + def _pressure_Dewaele_CsCl(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_CsCl = { + "V_0": 4.2179e-5, + "K_0": 16.74e9, + "Kprime_0": 5.703, + "Debye_0": 151.0, + "grueneisen_0": 1.99, + "q_0": 1.18, + "n": 2.0, + "T_0": 300.0, + "P_0": 0.0, + "Z": 1.0, + } + + Calibrant.__init__( + self, _pressure_Dewaele_CsCl, "pressure", _params_Dewaele_CsCl + ) diff --git a/burnman/calibrants/Dorogokupets_2017.py b/burnman/calibrants/Dorogokupets_2017.py new file mode 100644 index 000000000..3f78fb7bf --- /dev/null +++ b/burnman/calibrants/Dorogokupets_2017.py @@ -0,0 +1,137 @@ +# 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 + + +""" +Dorogokupets_2017 +^^^^^^^^^^^^^^^^^ +""" + + +class Fe_bcc(Calibrant): + """ + The BCC Fe pressure standard reported by + Dorogokupets (2017; https://doi.org/10.1038/srep41863). + """ + + def __init__(self): + def _pressure_Dorogokupets_bccFe(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_Dorogokupets_bccFe = { + "V_0": 7.09197e-06, + "K_0": 164.0e9, + "Kprime_0": 5.5, + "Debye_0": 303.0, + "grueneisen_0": 1.736, + "q_0": 1.125, + "n": 1.0, + "T_0": 300.0, + "P_0": 0.0, + "Z": 2.0, + } + + Calibrant.__init__( + self, _pressure_Dorogokupets_bccFe, "pressure", _params_Dorogokupets_bccFe + ) + + +class Fe_fcc(Calibrant): + """ + The FCC Fe pressure standard reported by + Dorogokupets (2017; https://doi.org/10.1038/srep41863). + """ + + def __init__(self): + def _pressure_Dorogokupets_fccFe(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_Dorogokupets_fccFe = { + "V_0": 6.9285e-06, + "K_0": 146.2e9, + "Kprime_0": 4.67, + "Debye_0": 222.5, + "grueneisen_0": 2.203, + "q_0": 0.01, + "n": 1.0, + "T_0": 300.0, + "P_0": 0.0, + "Z": 4.0, + } + + Calibrant.__init__( + self, _pressure_Dorogokupets_fccFe, "pressure", _params_Dorogokupets_fccFe + ) + + +class Fe_hcp(Calibrant): + """ + The HCP Fe pressure standard reported by + Dorogokupets (2017; https://doi.org/10.1038/srep41863). + """ + + def __init__(self): + def _pressure_Dorogokupets_hcpFe(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_Dorogokupets_hcpFe = { + "V_0": 6.81706e-6, + "K_0": 148.0e9, + "Kprime_0": 5.86, + "Debye_0": 227.0, + "grueneisen_0": 2.2, + "q_0": 0.01, + "n": 1.0, + "T_0": 300.0, + "P_0": 0.0, + "Z": 2.0, + } + + Calibrant.__init__( + self, _pressure_Dorogokupets_hcpFe, "pressure", _params_Dorogokupets_hcpFe + ) diff --git a/burnman/calibrants/Dubrovinsky_1998.py b/burnman/calibrants/Dubrovinsky_1998.py new file mode 100644 index 000000000..75ac680e4 --- /dev/null +++ b/burnman/calibrants/Dubrovinsky_1998.py @@ -0,0 +1,74 @@ +# 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.classes.calibrant import Calibrant +import numpy as np + + +""" +Dubrovinsky_1998 +^^^^^^^^^^^^^^^^ +""" + + +class Al2O3_corundum(Calibrant): + """ + The Al2O3 pressure standard reported by + Dubrovinsky (1998; https://dx.doi.org/10.1007/s002690050133). + """ + + def __init__(self): + def _pressure_Dubrovinsky_Al2O3(volume, temperature, params): + + # Modified BM3+Thermal + a0 = params["a"] + a1 = params["b"] + a2 = params["c"] + K0 = params["K_0"] + Kprime0 = params["Kprime_0"] + dK_dT = params["dK_dT_P"] + dKprime_dT = params["dKprime_dT"] + + KT = (K0) + dK_dT * (temperature - params["T_0"]) + KprimeT = Kprime0 + dKprime_dT * (temperature - params["T_0"]) + V0T = params["V_0"] * np.exp( + ( + (a0 * temperature) + + (a1 * ((temperature**2.0) / 2.0)) + - (a2 / temperature) + ) + - ( + (a0 * params["T_0"]) + + (a1 * ((params["T_0"] ** 2.0) / 2.0)) + - (a2 / params["T_0"]) + ) + ) + V_V0T = volume / V0T + f = 0.5 * ((V_V0T ** (-2.0 / 3.0)) - 1.0) + + P = (3.0 * KT * f * (1.0 + 2.0 * f) ** (5.0 / 2.0)) * ( + 1.0 - 3.0 / 2.0 * (4.0 - KprimeT) * f + ) + + return P + + _params_Dubrovinsky_Al2O3 = { + "V_0": 2.558e-05, + "K_0": 253.0e9, + "Kprime_0": 5.0, + "a": 2.515e-5, + "b": 1.958e-9, + "c": -0.305, + "dK_dT_P": -0.02e9, + "dKprime_dT": 0.0, + "n": 5.0, + "T_0": 300.0, + "P_0": 0.0, + "Z": 6.0, + } + + Calibrant.__init__( + self, _pressure_Dubrovinsky_Al2O3, "pressure", _params_Dubrovinsky_Al2O3 + ) diff --git a/burnman/calibrants/Fei_2007.py b/burnman/calibrants/Fei_2007.py new file mode 100644 index 000000000..ac8e529d8 --- /dev/null +++ b/burnman/calibrants/Fei_2007.py @@ -0,0 +1,63 @@ +# 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.birch_murnaghan import BirchMurnaghanBase as BM3 +from burnman.eos.mie_grueneisen_debye import MGDBase +from burnman.classes.calibrant import Calibrant + + +""" +Fei_2007 +^^^^^^^^ +""" + + +class Pt(Calibrant): + """ + The Pt pressure standard reported by + Fei et al. (2007; https://doi.org/10.1073/pnas.0609013104). + """ + + def __init__(self): + def _pressure_Fei_Pt(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) + + # Electronic pressure + Pel = ( + 1.1916e-15 * temperature**4.0 + - 1.4551e-11 * temperature**3.0 + + 1.6209e-07 * temperature**2.0 + + 1.8269e-4 * temperature + - 0.069 + ) * 1.0e09 + + # Total pressure + P = P0 + Pth - Pth0 + Pel + + return P + + _params_Fei_Pt = { + "V_0": 9.0904e-06, + "K_0": 277.0e9, + "Kprime_0": 5.08, + "Debye_0": 230.0, + "grueneisen_0": 2.72, + "q_0": 0.5, + "n": 1.0, + "T_0": 300.0, + "P_0": 0.0, + "Z": 4.0, + } + + Calibrant.__init__(self, _pressure_Fei_Pt, "pressure", _params_Fei_Pt) diff --git a/burnman/calibrants/Fei_2016.py b/burnman/calibrants/Fei_2016.py new file mode 100644 index 000000000..add907024 --- /dev/null +++ b/burnman/calibrants/Fei_2016.py @@ -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 + + +""" +Fei_2016 +^^^^^^^^ +""" + + +class Fe_hcp(Calibrant): + """ + The HCP Fe pressure standard reported by + Fei et al. (2016; https://doi.org/10.1002/2016GL069456). + """ + + def __init__(self): + def _pressure_Fei_hcpFe(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_Fei_hcpFe = { + "V_0": 6.8050e-6, + "K_0": 172.7e9, + "Kprime_0": 4.79, + "Debye_0": 422.0, + "grueneisen_0": 1.74, + "q_0": 0.78, + "n": 1.0, + "T_0": 300.0, + "P_0": 0.0, + "Z": 2.0, + } + + Calibrant.__init__(self, _pressure_Fei_hcpFe, "pressure", _params_Fei_hcpFe) diff --git a/burnman/calibrants/Huang_2016.py b/burnman/calibrants/Huang_2016.py new file mode 100644 index 000000000..a0ae1ce6c --- /dev/null +++ b/burnman/calibrants/Huang_2016.py @@ -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 + + +""" +Huang_2016 +^^^^^^^^^^ +""" + + +class Mo(Calibrant): + """ + The Mo pressure standard reported by + Huang et al. (2016; https://doi.org/10.1038/srep19923). + """ + + def __init__(self): + def _pressure_Huang_Mo(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_Huang_Mo = { + "V_0": 9.37647e-06, + "K_0": 255.0e9, + "Kprime_0": 4.25, + "Debye_0": 470.0, + "grueneisen_0": 2.01, + "q_0": 0.6, + "n": 1.0, + "T_0": 300.0, + "P_0": 0.0, + "Z": 2.0, + } + + Calibrant.__init__(self, _pressure_Huang_Mo, "pressure", _params_Huang_Mo) diff --git a/burnman/calibrants/LeGodec_2000.py b/burnman/calibrants/LeGodec_2000.py new file mode 100644 index 000000000..22dd22335 --- /dev/null +++ b/burnman/calibrants/LeGodec_2000.py @@ -0,0 +1,62 @@ +# 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.classes.calibrant import Calibrant +import numpy as np + + +""" +LeGodec_2000 +^^^^^^^^^^^^ +""" + + +class hBN(Calibrant): + """ + The hexagonal boron nitride pressure standard reported by + LeGodec et al. (2000; http://dx.doi.org/10.1080/08957950008200304). + """ + + def __init__(self): + def _pressure_LeGodec_hBN(volume, temperature, params): + + # Modified BM3+Thermal (see Zhao et al. 1997) + a0 = params["a0"] + a1 = params["a1"] + K0 = params["K_0"] + Kprime0 = params["Kprime_0"] + dK_dT = params["dK_dT"] + dKprime_dT = params["dKprime_dT"] + + KT = (K0) + dK_dT * (temperature - params["T_0"]) + KprimeT = Kprime0 + dKprime_dT * (temperature - params["T_0"]) + V0T = params["V_0"] * np.exp( + ((a0 * temperature) + (a1 * ((temperature**2.0) / 2.0))) + - ((a0 * params["T_0"]) + (a1 * ((params["T_0"] ** 2.0) / 2.0))) + ) + V_V0T = volume / V0T + f = 0.5 * ((V_V0T ** (-2.0 / 3.0)) - 1.0) + + P = (3.0 * KT * f * (1.0 + 2.0 * f) ** (5.0 / 2.0)) * ( + 1.0 - 3.0 / 2.0 * (4.0 - KprimeT) * f + ) + + return P + + _params_LeGodec_hBN = { + "V_0": 1.0891e-05, + "K_0": 27.6e9, + "Kprime_0": 10.5, + "a0": 3.53e-05, + "a1": 2.1e-09, + "dK_dT": -0.0081e9, + "dKprime_dT": 0.0016, + "n": 2.0, + "T_0": 300.0, + "P_0": 0.0, + "Z": 2.0, + } + + Calibrant.__init__(self, _pressure_LeGodec_hBN, "pressure", _params_LeGodec_hBN) diff --git a/burnman/calibrants/Litasov_2013.py b/burnman/calibrants/Litasov_2013.py new file mode 100644 index 000000000..51a7b8cbb --- /dev/null +++ b/burnman/calibrants/Litasov_2013.py @@ -0,0 +1,92 @@ +# 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 + + +""" +Litasov_2013 +^^^^^^^^^^^^ +""" + + +class Mo_bcc(Calibrant): + """ + The BCC Mo pressure standard reported by + Litasov et al. (2013; https://doi.org/10.1063/1.4794127). + """ + + def __init__(self): + def _pressure_Litasov_Mo(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_Litasov_Mo = { + "V_0": 9.37647e-06, + "K_0": 260.0e9, + "Kprime_0": 4.21, + "Debye_0": 470.0, + "grueneisen_0": 2.03, + "q_0": 0.24, + "n": 1.0, + "T_0": 300.0, + "P_0": 0.0, + "Z": 2.0, + } + + Calibrant.__init__(self, _pressure_Litasov_Mo, "pressure", _params_Litasov_Mo) + + +class W_bcc(Calibrant): + """ + The BCC W pressure standard reported by + Litasov et al. (2013; https://doi.org/10.1063/1.4799018). + """ + + def __init__(self): + def _pressure_Litasov_W(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_Litasov_W = { + "V_0": 9.5481e-06, + "K_0": 308.0e9, + "Kprime_0": 4.2, + "Debye_0": 388.0, + "grueneisen_0": 1.81, + "q_0": 0.71, + "n": 1.0, + "T_0": 300.0, + "P_0": 0.0, + "Z": 2.0, + } + + Calibrant.__init__(self, _pressure_Litasov_W, "pressure", _params_Litasov_W) diff --git a/burnman/calibrants/Matsui_2009.py b/burnman/calibrants/Matsui_2009.py new file mode 100644 index 000000000..96e179f0a --- /dev/null +++ b/burnman/calibrants/Matsui_2009.py @@ -0,0 +1,62 @@ +# 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 + + +""" +Matsui_2009 +^^^^^^^^^^^ +""" + + +class Pt(Calibrant): + """ + The Pt pressure standard reported by + Matsui (2009; https://doi.org/10.1063/1.3054331). + """ + + def __init__(self): + def _pressure_Matsui_Pt(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) + + # Electronic pressure + Pel = ( + 1.1916e-15 * temperature**4.0 + - 1.4551e-11 * temperature**3.0 + + 1.6209e-07 * temperature**2.0 + + 1.8269e-4 * temperature + - 0.069 + ) * 1.0e09 + + # Total pressure + P = P0 + Pth - Pth0 + Pel + + return P + + _params_Matsui_Pt = { + "V_0": 9.0904e-06, + "K_0": 273.0e9, + "Kprime_0": 5.2, + "Debye_0": 230.0, + "grueneisen_0": 2.7, + "q_0": 1.1, + "n": 1.0, + "T_0": 300.0, + "P_0": 0.0, + "Z": 4.0, + } + + Calibrant.__init__(self, _pressure_Matsui_Pt, "pressure", _params_Matsui_Pt) diff --git a/burnman/calibrants/Matsui_2010.py b/burnman/calibrants/Matsui_2010.py new file mode 100644 index 000000000..41ac612ee --- /dev/null +++ b/burnman/calibrants/Matsui_2010.py @@ -0,0 +1,62 @@ +# 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 + + +""" +Matsui_2010 +^^^^^^^^^^^ +""" + + +class Au(Calibrant): + """ + The Au pressure standard reported by + Matsui (2010; https://dx.doi.org/10.1088/1742-6596/215/1/012197). + """ + + def __init__(self): + def _pressure_Matsui_Au(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) + + # Electronic pressure + Pel = ( + 1.4664e-16 * temperature**4.0 + - 8.0179e-13 * temperature**3.0 + + 1.6205e-8 * temperature**2.0 + - 5.4573e-6 * temperature + - 7.8273e-5 + ) * 1.0e09 + + # Total pressure + P = P0 + Pth - Pth0 + Pel + + return P + + _params_Matsui_Au = { + "V_0": 1.0215e-05, + "K_0": 167.0e9, + "Kprime_0": 6.0, + "Debye_0": 170.0, + "grueneisen_0": 2.97, + "q_0": 1.6, + "n": 1.0, + "T_0": 300.0, + "P_0": 0.0, + "Z": 4.0, + } + + Calibrant.__init__(self, _pressure_Matsui_Au, "pressure", _params_Matsui_Au) diff --git a/burnman/calibrants/Matsui_2012.py b/burnman/calibrants/Matsui_2012.py new file mode 100644 index 000000000..c4437183d --- /dev/null +++ b/burnman/calibrants/Matsui_2012.py @@ -0,0 +1,66 @@ +# 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 + + +""" +Matsui_2012 +^^^^^^^^^^^ +""" + + +class NaCl_B1(Calibrant): + """ + The NaCl (B1 structured) pressure standard reported by + Matsui (2012; https://doi.org/10.2138/am.2012.4136). + """ + + def __init__(self): + def _pressure_Matsui_NaCl(volume, temperature, params): + + # 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) + ) + 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_Matsui_NaCl = { + "V_0": 2.7013e-05, + "K_0": 23.7, + "Kprime_0": 5.14, + "Kprime_prime_0": -0.392, + "Debye_0": 279.0, + "grueneisen_0": 1.56, + "q_0": 0.96, + "n": 2.0, + "T_0": 300.0, + "P_0": 0.0, + "Z": 4.0, + } + + Calibrant.__init__(self, _pressure_Matsui_NaCl, "pressure", _params_Matsui_NaCl) diff --git a/burnman/calibrants/Miozzi_2020.py b/burnman/calibrants/Miozzi_2020.py new file mode 100644 index 000000000..9c094a0d7 --- /dev/null +++ b/burnman/calibrants/Miozzi_2020.py @@ -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 + + +""" +Miozzi_2020 +^^^^^^^^^^^ +""" + + +class Fe_hcp(Calibrant): + """ + The HCP Fe pressure standard reported by + Miozzi (2020; https://doi.org/10.3390/min10020100). + """ + + def __init__(self): + def _pressure_Miozzi_hcpFe(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_Miozzi_hcpFe = { + "V_0": 6.86825e-06, + "K_0": 129.0e9, + "Kprime_0": 6.24, + "Debye_0": 420.0, + "grueneisen_0": 1.11, + "q_0": 0.3, + "n": 1.0, + "T_0": 300.0, + "P_0": 0.0, + "Z": 2.0, + } + + Calibrant.__init__( + self, _pressure_Miozzi_hcpFe, "pressure", _params_Miozzi_hcpFe + ) diff --git a/burnman/calibrants/Ono_2022.py b/burnman/calibrants/Ono_2022.py new file mode 100644 index 000000000..fc4765ec5 --- /dev/null +++ b/burnman/calibrants/Ono_2022.py @@ -0,0 +1,51 @@ +# 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.classes.calibrant import Calibrant +import numpy as np + +""" +Ono_2022 +^^^^^^^^ +""" + + +class Re(Calibrant): + """ + The Re pressure standard reported by + Ono (2022; https://doi.org/10.1155/2022/7545777). + """ + + def __init__(self): + def _pressure_Ono_Re(volume, temperature, params): + + # Isothermal pressure (GPa) + pressure_model = Vinet() + P0 = pressure_model.pressure(params["T_0"], volume, params) + + # Thermal pressure + Pth = ( + params["dK_dT"] + params["dK_dT_V"] * np.log(params["V_0"] / volume) + ) * (temperature - params["T_0"]) + + # Total pressure + P = P0 + Pth + + return P + + _params_Ono_Re = { + "V_0": 8.87798e-06, + "K_0": 384.0e9, + "Kprime_0": 3.26, + "dK_dT": 0.0056e9, # Pa/K + "dK_dT_V": -0.00042e9, # Pa/K + "n": 1.0, + "T_0": 300.0, + "P_0": 0.0, + "Z": 2.0, + } + + Calibrant.__init__(self, _pressure_Ono_Re, "pressure", _params_Ono_Re) diff --git a/burnman/calibrants/Pigott_2015.py b/burnman/calibrants/Pigott_2015.py new file mode 100644 index 000000000..23a315df0 --- /dev/null +++ b/burnman/calibrants/Pigott_2015.py @@ -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 + + +""" +Pigott_2015 +^^^^^^^^^^^ +""" + + +class Ni(Calibrant): + """ + The Ni pressure standard reported by + Pigott (2015; https://doi.org/10.1002/2015GL066577). + """ + + def __init__(self): + def _pressure_Pigott_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_Pigott_Ni = { + "V_0": 6.5790e-06, + "K_0": 201.0e9, + "Kprime_0": 4.4, + "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_Pigott_Ni, "pressure", _params_Pigott_Ni) diff --git a/burnman/calibrants/Shi_2022.py b/burnman/calibrants/Shi_2022.py new file mode 100644 index 000000000..494796335 --- /dev/null +++ b/burnman/calibrants/Shi_2022.py @@ -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 + + +""" +Shi_2022 +^^^^^^^^ +""" + + +class Al2O3_corundum(Calibrant): + """ + The corundum-structured Al2O3 pressure standard reported by + Shi (2022; https://doi.org/10.1029/2021JB023805). + """ + + def __init__(self): + def _pressure_Shi_Al2O3(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_Shi_Al2O3 = { + "V_0": 2.5604e-05, + "K_0": 246.0e9, + "Kprime_0": 4.0, + "Debye_0": 1100.0, + "grueneisen_0": 1.32, + "q_0": 0.8, + "n": 5.0, + "T_0": 300.0, + "P_0": 0.0, + "Z": 6.0, + } + + Calibrant.__init__(self, _pressure_Shi_Al2O3, "pressure", _params_Shi_Al2O3) diff --git a/burnman/calibrants/Shim_2002.py b/burnman/calibrants/Shim_2002.py new file mode 100644 index 000000000..67830cde2 --- /dev/null +++ b/burnman/calibrants/Shim_2002.py @@ -0,0 +1,62 @@ +# 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 + + +""" +Shim_2002 +^^^^^^^^^ +""" + + +class Au(Calibrant): + """ + The Au pressure standard reported by + Shim et al. (2002; https://doi.org/10.1016/S0012-821X(02)00917-2). + """ + + def __init__(self): + def _pressure_Shim_Au(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) + + # Electronic pressure + Pel = ( + 1.4664e-16 * temperature**4.0 + - 8.0179e-13 * temperature**3.0 + + 1.6205e-8 * temperature**2.0 + - 5.4573e-6 * temperature + - 7.8273e-5 + ) * 1.0e09 + + # Total pressure + P = P0 + Pth - Pth0 + Pel + + return P + + _params_Shim_Au = { + "V_0": 1.0215e-05, + "K_0": 167.0e9, + "Kprime_0": 5.0, + "Debye_0": 170.0, + "grueneisen_0": 2.97, + "q_0": 1.0, + "n": 1.0, + "T_0": 300.0, + "P_0": 0.0, + "Z": 4.0, + } + + Calibrant.__init__(self, _pressure_Shim_Au, "pressure", _params_Shim_Au) diff --git a/burnman/calibrants/Sokolova_2013.py b/burnman/calibrants/Sokolova_2013.py new file mode 100644 index 000000000..f6e6bbf04 --- /dev/null +++ b/burnman/calibrants/Sokolova_2013.py @@ -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 + + +""" +Sokolova_2013 +^^^^^^^^^^^^^ +""" + + +class Mo(Calibrant): + """ + The Mo pressure standard reported by Sokolova et al. (2013), + as reported by Huang et al. (2016; https://doi.org/10.1038/srep19923). + """ + + def __init__(self): + def _pressure_Sokolova_Mo(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_Sokolova_Mo = { + "V_0": 9.37647e-06, + "K_0": 249.0e9, + "Kprime_0": 4.47, + "Debye_0": 470.0, + "grueneisen_0": 1.98, + "q_0": 1.99, + "n": 1.0, + "T_0": 300.0, + "P_0": 0.0, + "Z": 2.0, + } + + Calibrant.__init__(self, _pressure_Sokolova_Mo, "pressure", _params_Sokolova_Mo) diff --git a/burnman/calibrants/Speziale_2001.py b/burnman/calibrants/Speziale_2001.py new file mode 100644 index 000000000..e99fa47bd --- /dev/null +++ b/burnman/calibrants/Speziale_2001.py @@ -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 + + +""" +Speziale_2001 +^^^^^^^^^^^^^ +""" + + +class MgO(Calibrant): + """ + The MgO pressure standard reported by + Speziale (2001; https://doi.org/10.1029/2000JB900318). + """ + + def __init__(self): + def _pressure_Speziale_MgO(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_Speziale_MgO = { + "V_0": 1.12463e-05, + "K_0": 160.2e9, + "Kprime_0": 3.99, + "Debye_0": 773.0, + "grueneisen_0": 1.524, + "q_0": 1.65, + "n": 2.0, + "T_0": 300.0, + "P_0": 0.0, + "Z": 4.0, + } + + Calibrant.__init__( + self, _pressure_Speziale_MgO, "pressure", _params_Speziale_MgO + ) diff --git a/burnman/calibrants/Tange_2009.py b/burnman/calibrants/Tange_2009.py new file mode 100644 index 000000000..286f78a97 --- /dev/null +++ b/burnman/calibrants/Tange_2009.py @@ -0,0 +1,123 @@ +# 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.vinet import Vinet +from burnman.eos import debye +from burnman.classes.calibrant import Calibrant +import numpy as np + +""" +Tange_2009 +^^^^^^^^^^ +""" + + +class MgO_BM3(Calibrant): + """ + The MgO pressure standard reported by + Tange et al. (2009; https://doi.org/10.1029/2008JB005813). + BM3 version. + """ + + def __init__(self): + def _pressure_Tange_MgO(volume, temperature, params): + + # Isothermal pressure (GPa) + pressure_model = BM3() + P0 = pressure_model.pressure(params["T_0"], volume, params) + + # Thermal pressure + gra = params["grueneisen_0"] * ( + 1.0 + params["a"] * ((volume / params["V_0"]) ** params["b"] - 1.0) + ) + debye_Ta = ( + params["Debye_0"] + * (volume / params["V_0"]) + ** (-params["grueneisen_0"] * (1.0 - params["a"])) + * np.exp(-(gra - params["grueneisen_0"]) / params["b"]) + ) + + E_th = debye.thermal_energy(temperature, debye_Ta, params["n"]) + E_th_ref = debye.thermal_energy( + params["T_0"], debye_Ta, params["n"] + ) # thermal energy at reference temperature + + Pth = gra * (E_th - E_th_ref) / volume + + # Total pressure + P = P0 + Pth + + return P + + _params_Tange_MgO = { + "V_0": 1.12463e-05, + "K_0": 160.64e9, + "Kprime_0": 4.221, + "Debye_0": 761.0, + "grueneisen_0": 1.431, + "a": 0.29, + "b": 3.5, + "n": 2.0, + "T_0": 300.0, + "P_0": 0.0, + "Z": 4.0, + } + + Calibrant.__init__(self, _pressure_Tange_MgO, "pressure", _params_Tange_MgO) + + +class MgO_Vinet(Calibrant): + """ + The MgO pressure standard reported by + Tange et al. (2009; https://doi.org/10.1029/2008JB005813). + Vinet version. + """ + + def __init__(self): + def _pressure_Tange_MgO(volume, temperature, params): + + # Isothermal pressure (GPa) + pressure_model = Vinet() + P0 = pressure_model.pressure(params["T_0"], volume, params) + + # Thermal pressure + gra = params["grueneisen_0"] * ( + 1.0 + params["a"] * ((volume / params["V_0"]) ** params["b"] - 1.0) + ) + debye_Ta = ( + params["Debye_0"] + * (volume / params["V_0"]) + ** (-params["grueneisen_0"] * (1.0 - params["a"])) + * np.exp(-(gra - params["grueneisen_0"]) / params["b"]) + ) + + E_th = debye.thermal_energy(temperature, debye_Ta, params["n"]) + E_th_ref = debye.thermal_energy( + params["T_0"], debye_Ta, params["n"] + ) # thermal energy at reference temperature + + Pth = gra * (E_th - E_th_ref) / volume + + # Total pressure + P = P0 + Pth + + return P + + _params_Tange_MgO = { + "V_0": 1.12463e-05, + "K_0": 160.63e9, + "Kprime_0": 4.367, + "Debye_0": 761.0, + "grueneisen_0": 1.442, + "a": 0.138, + "b": 5.4, + "n": 2.0, + "T_0": 300.0, + "P_0": 0.0, + "Z": 4.0, + } + + Calibrant.__init__(self, _pressure_Tange_MgO, "pressure", _params_Tange_MgO) diff --git a/burnman/calibrants/Tateno_2019.py b/burnman/calibrants/Tateno_2019.py new file mode 100644 index 000000000..e16a2569b --- /dev/null +++ b/burnman/calibrants/Tateno_2019.py @@ -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 + +""" +Tateno_2019 +^^^^^^^^^^^ +""" + + +class KCl_B2(Calibrant): + """ + The B2 KCl pressure standard reported by + Tateno (2019; https://doi.org/10.2138/am-2019-6779). + """ + + def __init__(self): + def _pressure_Tateno_KCl(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_Tateno_KCl = { + "V_0": 3.28206e-05, + "K_0": 17.4e9, + "Kprime_0": 5.77, + "Debye_0": 235.0, + "grueneisen_0": 1.8, + "q_0": 0.7, + "n": 2.0, + "T_0": 300.0, + "P_0": 0.0, + "Z": 1.0, + } + + Calibrant.__init__(self, _pressure_Tateno_KCl, "pressure", _params_Tateno_KCl) diff --git a/burnman/calibrants/Walker_2002.py b/burnman/calibrants/Walker_2002.py new file mode 100644 index 000000000..067d1229b --- /dev/null +++ b/burnman/calibrants/Walker_2002.py @@ -0,0 +1,51 @@ +# 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.classes.calibrant import Calibrant +import numpy as np + +""" +Walker_2002 +^^^^^^^^^^^ +""" + + +class KCl_B2(Calibrant): + """ + The B2 KCl pressure standard reported by + Walker (2002; https://doi.org/10.2138/am-2002-0701). + """ + + def __init__(self): + def _pressure_Walker_KCl(volume, temperature, params): + + # Isothermal pressure (GPa) + pressure_model = BM3() + P0 = pressure_model.pressure(params["T_0"], volume, params) + + # Thermal pressure + Pth = ( + params["aK(V,T)"] + params["dK_dT_V"] * np.log(params["V_0"] / volume) + ) * (temperature - params["T_0"]) + + # Total pressure + P = P0 + Pth + + return P + + _params_Walker_KCl = { + "V_0": 3.22365e-05, + "K_0": 23.7e9, + "Kprime_0": 4.4, + "aK(V,T)": 0.00284e9, + "dK_dT_V": 0.00012e9, + "n": 2.0, + "T_0": 300.0, + "P_0": 0.0, + "Z": 1.0, + } + + Calibrant.__init__(self, _pressure_Walker_KCl, "pressure", _params_Walker_KCl) diff --git a/burnman/calibrants/Zeng_2010.py b/burnman/calibrants/Zeng_2010.py new file mode 100644 index 000000000..21743b755 --- /dev/null +++ b/burnman/calibrants/Zeng_2010.py @@ -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 + + +""" +Zeng_2010 +^^^^^^^^^ +""" + + +class Mo(Calibrant): + """ + The Mo pressure standard from Zeng (2010), as reported by + Huang et al. (2016; https://doi.org/10.1038/srep19923). + """ + + def __init__(self): + def _pressure_Zeng_Mo(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_Zeng_Mo = { + "V_0": 9.37647e-06, + "K_0": 245.0e9, + "Kprime_0": 4.66, + "Debye_0": 470.0, # 455-470 + "grueneisen_0": 1.97, + "q_0": 0.82, + "n": 1.0, + "T_0": 300.0, + "P_0": 0.0, + "Z": 2.0, + } + + Calibrant.__init__(self, _pressure_Zeng_Mo, "pressure", _params_Zeng_Mo) diff --git a/burnman/calibrants/Zha_2004.py b/burnman/calibrants/Zha_2004.py new file mode 100644 index 000000000..cc2fa8089 --- /dev/null +++ b/burnman/calibrants/Zha_2004.py @@ -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.birch_murnaghan import BirchMurnaghanBase as BM3 +from burnman.eos.mie_grueneisen_debye import MGDBase +from burnman.classes.calibrant import Calibrant +import numpy as np + +""" +Zha_2004 +^^^^^^^^ +""" + + +class Re(Calibrant): + """ + The Re pressure standard reported by + Zha et al. (2004; https://doi.org/10.1063/1.1765752). + """ + + def __init__(self): + def _pressure_Zha_Re(volume, temperature, params): + + # Isothermal pressure (GPa) + pressure_model = BM3() + P0 = pressure_model.pressure(params["T_0"], volume, params) + + # Thermal pressure + Pth = ( + params["aK(V,T)"] + params["dK_dT_V"] * np.log(params["V_0"] / volume) + ) * (temperature - params["T_0"]) + + # Total pressure + P = P0 + Pth + + return P + + _params_Zha_Re = { + "V_0": 8.85516e-06, + "K_0": 360.0e9, + "Kprime_0": 4.5, + "aK(V,T)": 0.00776e9, + "dK_dT_V": -0.00815e9, + "n": 1.0, + "T_0": 300.0, + "P_0": 0.0, + "Z": 2.0, + } + + Calibrant.__init__(self, _pressure_Zha_Re, "pressure", _params_Zha_Re) diff --git a/burnman/calibrants/Zha_2008.py b/burnman/calibrants/Zha_2008.py new file mode 100644 index 000000000..0cbbab4fc --- /dev/null +++ b/burnman/calibrants/Zha_2008.py @@ -0,0 +1,63 @@ +# 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 +import numpy as np + + +""" +Zha_2008 +^^^^^^^^ +""" + + +class Pt(Calibrant): + """ + The Pt pressure standard reported by + Zha (2008; https://doi.org/10.1063/1.2844358). + """ + + def __init__(self): + def _pressure_Zha_Pt(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) + + # Electronic pressure + Pel = ( + 1.1916e-15 * temperature**4.0 + - 1.4551e-11 * temperature**3.0 + + 1.6209e-07 * temperature**2.0 + + 1.8269e-4 * temperature + - 0.069 + ) * 1.0e09 + + # Total pressure + P = P0 + Pth - Pth0 + Pel + + return P + + _params_Zha_Pt = { + "V_0": 9.0904e-06, + "K_0": 273.5e9, + "Kprime_0": 4.7, + "Debye_0": 230.0, # 370-405 + "grueneisen_0": 2.75, + "q_0": 0.25, + "n": 1.0, + "T_0": 300.0, + "P_0": 0.0, + "Z": 4.0, + } + + Calibrant.__init__(self, _pressure_Zha_Pt, "pressure", _params_Zha_Pt) diff --git a/burnman/calibrants/Zhang_1999.py b/burnman/calibrants/Zhang_1999.py new file mode 100644 index 000000000..583aa2301 --- /dev/null +++ b/burnman/calibrants/Zhang_1999.py @@ -0,0 +1,51 @@ +# 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.classes.calibrant import Calibrant +import numpy as np + +""" +Zhang_1999 +^^^^^^^^^^ +""" + + +class Fe_bcc(Calibrant): + """ + The BCC Fe pressure standard reported by + Zhang et al. (1999; https://dx.doi.org/10.1007/s002690050178). + """ + + def __init__(self): + def _pressure_Zhang_bccFe(volume, temperature, params): + + # Isothermal pressure (GPa) + pressure_model = BM3() + P0 = pressure_model.pressure(params["T_0"], volume, params) + + # Thermal pressure + Pth = ( + params["aK(V,T)"] + params["dK_dT_V"] * np.log(params["V_0"] / volume) + ) * (temperature - params["T_0"]) + + # Total pressure + P = P0 + Pth + + return P + + _params_Zhang_bccFe = { + "V_0": 7.08384e-06, + "K_0": 155.0e9, + "Kprime_0": 5.3, + "aK(V,T)": 0.00648e9, + "dK_dT_V": -0.022e9, + "n": 1.0, + "T_0": 300.0, + "P_0": 0.0, + "Z": 2.0, + } + + Calibrant.__init__(self, _pressure_Zhang_bccFe, "pressure", _params_Zhang_bccFe) diff --git a/burnman/calibrants/Zhao_1997.py b/burnman/calibrants/Zhao_1997.py new file mode 100644 index 000000000..1279b70ce --- /dev/null +++ b/burnman/calibrants/Zhao_1997.py @@ -0,0 +1,61 @@ +# 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.classes.calibrant import Calibrant +import numpy as np + +""" +Zhao_1997 +^^^^^^^^^ +""" + + +class hBN(Calibrant): + """ + The hBN pressure standard reported by + Zhao et al. (1997; https://doi.org/10.1080/08957959708240481). + """ + + def __init__(self): + def _pressure_Zhao_hBN(volume, temperature, params): + + # Modified BM3+Thermal (see Zhao et al. 1997) + a0 = params["a0"] + a1 = params["a1"] + K0 = params["K_0"] + Kprime0 = params["Kprime_0"] + dK_dT = params["dK_dT"] + dKprime_dT = params["dKprime_dT"] + + KT = (K0) + dK_dT * (temperature - 300.0) + KprimeT = Kprime0 + dKprime_dT * (temperature - 300.0) + V0T = params["V_0"] * np.exp( + ((a0 * temperature) + (a1 * ((temperature**2.0) / 2.0))) + - ((a0 * 300.0) + (a1 * ((300.0**2.0) / 2.0))) + ) + V_V0T = volume / V0T + f = 0.5 * ((V_V0T ** (-2.0 / 3.0)) - 1.0) + + P = (3.0 * KT * f * (1.0 + 2.0 * f) ** (5.0 / 2.0)) * ( + 1.0 - 3.0 / 2.0 * (4.0 - KprimeT) * f + ) + + return P + + _params_Zhao_hBN = { + "V_0": 1.08164e-05, + "K_0": 17.6e9, + "Kprime_0": 19.5, + "a0": 4.38e-05, + "a1": 1.75e-08, + "dK_dT": -0.0069e9, + "dKprime_dT": 0.0, + "n": 2.0, + "T_0": 300.0, + "P_0": 0.0, + "Z": 2.0, + } + + Calibrant.__init__(self, _pressure_Zhao_hBN, "pressure", _params_Zhao_hBN) diff --git a/burnman/calibrants/Zhao_2000.py b/burnman/calibrants/Zhao_2000.py new file mode 100644 index 000000000..08657e13e --- /dev/null +++ b/burnman/calibrants/Zhao_2000.py @@ -0,0 +1,61 @@ +# 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.classes.calibrant import Calibrant +import numpy as np + +""" +Zhao_2000 +^^^^^^^^^ +""" + + +class Mo(Calibrant): + """ + The Mo pressure standard reported by + Zhao et al. (2000; https://doi.org/10.1103/PhysRevB.62.8766). + """ + + def __init__(self): + def _pressure_Zhao_Mo(volume, temperature, params): + + # Modified BM3+Thermal (see Zhao et al. 1997) + a0 = params["a0"] + a1 = params["a1"] + K0 = params["K_0"] + Kprime0 = params["Kprime_0"] + dK_dT = params["dK_dT"] + dKprime_dT = params["dKprime_dT"] + + KT = (K0) + dK_dT * (temperature - params["T_0"]) + KprimeT = Kprime0 + dKprime_dT * (temperature - params["T_0"]) + V0T = params["V_0"] * np.exp( + ((a0 * temperature) + (a1 * ((temperature**2.0) / 2.0))) + - ((a0 * params["T_0"]) + (a1 * ((params["T_0"] ** 2.0) / 2.0))) + ) + V_V0T = volume / V0T + f = 0.5 * ((V_V0T ** (-2.0 / 3.0)) - 1.0) + + P = (3.0 * KT * f * (1.0 + 2.0 * f) ** (5.0 / 2.0)) * ( + 1.0 - 3.0 / 2.0 * (4.0 - KprimeT) * f + ) + + return P + + _params_Zhao_Mo = { + "V_0": 9.37647e-06, + "K_0": 268.0e9, + "Kprime_0": 3.82, + "a0": 1.27e-5, + "a1": 1.12e-8, + "dK_dT": -0.0213e9, + "dKprime_dT": -1.41e-2, + "n": 1.0, + "T_0": 300.0, + "P_0": 0.0, + "Z": 2.0, + } + + Calibrant.__init__(self, _pressure_Zhao_Mo, "pressure", _params_Zhao_Mo) diff --git a/burnman/calibrants/__init__.py b/burnman/calibrants/__init__.py index 1ff40c9ea..128f58ac1 100644 --- a/burnman/calibrants/__init__.py +++ b/burnman/calibrants/__init__.py @@ -10,6 +10,38 @@ - :mod:`~burnman.calibrants.Decker_1971` """ - +from . import Armentrout_2015 +from . import Campbell_2009 +from . import Chidester_2021 from . import Decker_1971 +from . import Dewaele_2008 +from . import Dewaele_2012 +from . import Dewaele_2013 +from . import Dewaele_2020 +from . import Dorogokupets_2017 +from . import Dubrovinsky_1998 +from . import Fei_2007 +from . import Fei_2016 +from . import Huang_2016 +from . import LeGodec_2000 +from . import Litasov_2013 +from . import Matsui_2009 +from . import Matsui_2010 +from . import Matsui_2012 +from . import Miozzi_2020 +from . import Ono_2022 +from . import Pigott_2015 +from . import Shi_2022 +from . import Shim_2002 +from . import Sokolova_2013 +from . import Speziale_2001 +from . import Tange_2009 +from . import Tateno_2019 +from . import Walker_2002 +from . import Zeng_2010 +from . import Zha_2004 +from . import Zha_2008 +from . import Zhang_1999 +from . import Zhao_1997 +from . import Zhao_2000 from . import tools diff --git a/misc/ref/example_calibrants.py.out b/misc/ref/example_calibrants.py.out index 9504dfda6..06eebe131 100644 --- a/misc/ref/example_calibrants.py.out +++ b/misc/ref/example_calibrants.py.out @@ -1,26 +1,26 @@ Experimental observations: -Volume: 19.0344 +/- 0.1903 m^3/mol +Volume: 19.0287 +/- 0.1903 m^3/mol Temperature: 1073.15 +/- 10.0 K Pressure estimated using the Decker equation of state: -21.7087 GPa +21.6417 GPa Pressure with propagated uncertainty estimated using the Decker equation of state: -21.7087 +/- 1.0263 GPa +21.6417 +/- 1.0010 GPa PVT correlation matrix: -[[ 1. -0.99957758 0.02906305] - [-0.99957758 1. 0. ] - [ 0.02906305 0. 1. ]] +[[ 1. -0.99955588 0.02979992] + [-0.99955588 1. 0. ] + [ 0.02979992 0. 1. ]] The uncertainties and correlation matrix only take into account the uncertainties in the measured volume and temperature, not the uncertainties in the calibrated equation of state. Consistency checks: -Volume: 19.0344 +/- 0.1903 m^3/mol +Volume: 19.0287 +/- 0.1903 m^3/mol Temperature: 1073.15 +/- 10.0000 K V-T correlation: -0.000000 Result of conversion from Decker calibration to Decker calibration: -21.7087 +/- 1.0263 GPa +21.6417 +/- 1.0010 GPa (This should be the same as the pressures above) diff --git a/tests/test_calibrants.py b/tests/test_calibrants.py new file mode 100644 index 000000000..596f953e2 --- /dev/null +++ b/tests/test_calibrants.py @@ -0,0 +1,37 @@ +from __future__ import absolute_import +from util import BurnManTest +import numpy as np +import unittest +import inspect +import burnman +from burnman import calibrants + + +class test_calibrants(BurnManTest): + + def test_calibrant_initialisation(self): + pressures = [] + + libs = dir(calibrants) + for lib in libs: + + objectgroup = getattr(calibrants, lib) + if objectgroup.__class__.__name__ == "module": + for m in dir(objectgroup): + obj = getattr(objectgroup, m) + if ( + inspect.isclass(obj) + and obj != burnman.Calibrant + and issubclass(obj, burnman.Calibrant) + ): + + calibrant = obj() + V = calibrant.volume(10.0e9, 1000.0) + pressures.append(calibrant.pressure(V, 1000.0)) + + pressures = np.array(pressures) + self.assertArraysAlmostEqual(pressures, 10.0e9 + pressures * 0.0) + + +if __name__ == "__main__": + unittest.main() From 960e5b7ddc269f174e3bef66434e75ddcda32500 Mon Sep 17 00:00:00 2001 From: Bob Myhill Date: Thu, 4 Jul 2024 18:51:56 +0100 Subject: [PATCH 2/2] added autodocs --- burnman/calibrants/__init__.py | 36 +++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/burnman/calibrants/__init__.py b/burnman/calibrants/__init__.py index 128f58ac1..65104b82a 100644 --- a/burnman/calibrants/__init__.py +++ b/burnman/calibrants/__init__.py @@ -1,6 +1,6 @@ # 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 +# Copyright (C) 2012 - 2024 by the BurnMan team, released under the GNU # GPL v2 or later. @@ -8,6 +8,40 @@ Calibrant database - :mod:`~burnman.calibrants.Decker_1971` + - :mod:`~burnman.calibrants.Armentrout_2015` + - :mod:`~burnman.calibrants.Campbell_2009` + - :mod:`~burnman.calibrants.Chidester_2021` + - :mod:`~burnman.calibrants.Decker_1971` + - :mod:`~burnman.calibrants.Dewaele_2008` + - :mod:`~burnman.calibrants.Dewaele_2012` + - :mod:`~burnman.calibrants.Dewaele_2013` + - :mod:`~burnman.calibrants.Dewaele_2020` + - :mod:`~burnman.calibrants.Dorogokupets_2017` + - :mod:`~burnman.calibrants.Dubrovinsky_1998` + - :mod:`~burnman.calibrants.Fei_2007` + - :mod:`~burnman.calibrants.Fei_2016` + - :mod:`~burnman.calibrants.Huang_2016` + - :mod:`~burnman.calibrants.LeGodec_2000` + - :mod:`~burnman.calibrants.Litasov_2013` + - :mod:`~burnman.calibrants.Matsui_2009` + - :mod:`~burnman.calibrants.Matsui_2010` + - :mod:`~burnman.calibrants.Matsui_2012` + - :mod:`~burnman.calibrants.Miozzi_2020` + - :mod:`~burnman.calibrants.Ono_2022` + - :mod:`~burnman.calibrants.Pigott_2015` + - :mod:`~burnman.calibrants.Shi_2022` + - :mod:`~burnman.calibrants.Shim_2002` + - :mod:`~burnman.calibrants.Sokolova_2013` + - :mod:`~burnman.calibrants.Speziale_2001` + - :mod:`~burnman.calibrants.Tange_2009` + - :mod:`~burnman.calibrants.Tateno_2019` + - :mod:`~burnman.calibrants.Walker_2002` + - :mod:`~burnman.calibrants.Zeng_2010` + - :mod:`~burnman.calibrants.Zha_2004` + - :mod:`~burnman.calibrants.Zha_2008` + - :mod:`~burnman.calibrants.Zhang_1999` + - :mod:`~burnman.calibrants.Zhao_1997` + - :mod:`~burnman.calibrants.Zhao_2000` """ from . import Armentrout_2015