|
| 1 | +# This file is part of BurnMan - a thermoelastic and thermodynamic toolkit for |
| 2 | +# the Earth and Planetary Sciences |
| 3 | +# Copyright (C) 2012 - 2024 by the BurnMan team, released under the GNU |
| 4 | +# GPL v2 or later. |
| 5 | + |
| 6 | +import numpy as np |
| 7 | +from burnman.classes.calibrant import Calibrant |
| 8 | +from scipy.interpolate import RegularGridInterpolator |
| 9 | + |
| 10 | +""" |
| 11 | +Tsuchiya_2003 |
| 12 | +^^^^^^^^^^^^^ |
| 13 | +""" |
| 14 | + |
| 15 | + |
| 16 | +class Au(Calibrant): |
| 17 | + """ |
| 18 | + The Au pressure standard reported by |
| 19 | + Tsuchiya (2003; https://doi.org/10.1029/2003JB002446). |
| 20 | + """ |
| 21 | + |
| 22 | + def __init__(self): |
| 23 | + |
| 24 | + grid_compressions = np.linspace(0.0, 0.34, 18) |
| 25 | + grid_temperatures = np.array([300.0, 500.0, 1000.0, 1500.0, 2000.0, 2500.0]) |
| 26 | + grid_pressures = np.array( |
| 27 | + [ |
| 28 | + [0.00, 1.52, 5.35, 9.19, 13.04, 16.88], |
| 29 | + [3.55, 5.04, 8.78, 12.54, 16.29, 20.05], |
| 30 | + [7.68, 9.13, 12.79, 16.45, 20.12, 23.79], |
| 31 | + [12.42, 13.83, 17.40, 20.98, 24.56, 28.14], |
| 32 | + [17.86, 19.23, 22.71, 26.20, 29.70, 33.19], |
| 33 | + [24.12, 25.46, 28.85, 32.25, 35.66, 39.07], |
| 34 | + [31.30, 32.60, 35.90, 39.22, 42.54, 45.86], |
| 35 | + [39.52, 40.78, 43.99, 47.22, 50.45, 53.68], |
| 36 | + [48.94, 50.17, 53.29, 56.43, 59.58, 62.72], |
| 37 | + [59.76, 60.95, 63.98, 67.03, 70.09, 73.15], |
| 38 | + [72.11, 73.26, 76.21, 79.18, 82.14, 85.11], |
| 39 | + [86.36, 87.48, 90.34, 93.22, 96.10, 98.98], |
| 40 | + [102.65, 103.73, 106.50, 109.29, 112.08, 114.88], |
| 41 | + [121.38, 122.42, 125.10, 127.80, 130.51, 133.21], |
| 42 | + [142.98, 143.99, 146.58, 149.19, 151.81, 154.43], |
| 43 | + [167.77, 168.74, 171.24, 173.77, 176.30, 178.83], |
| 44 | + [196.48, 197.41, 199.83, 202.26, 204.70, 207.15], |
| 45 | + [229.56, 230.45, 232.78, 235.13, 237.49, 239.84], |
| 46 | + ] |
| 47 | + ) |
| 48 | + |
| 49 | + self.interpolate_pressure = RegularGridInterpolator( |
| 50 | + (grid_compressions, grid_temperatures), |
| 51 | + grid_pressures, |
| 52 | + bounds_error=False, |
| 53 | + fill_value=None, |
| 54 | + method="cubic", |
| 55 | + ) |
| 56 | + |
| 57 | + def _pressure(volume, temperature, params): |
| 58 | + compression = 1.0 - volume / params["V_0"] |
| 59 | + return self.interpolate_pressure([compression, temperature])[0] * 1.0e9 |
| 60 | + |
| 61 | + Calibrant.__init__(self, _pressure, "pressure", {"V_0": 10.207e-06}) |
0 commit comments