# --------- DEFINE SOME CONSTANTS & CONVERSIONS -----------#
oxideMass = {'sio2': 60.083,
'mgo': 40.304,
'feo': 71.844,
'cao': 56.077,
'al2o3': 101.961,
'na2o': 61.979,
'k2o': 94.195,
'mno': 70.937,
'tio2': 79.867,
'p2o5': 141.943,
'cr2o3': 151.992,
'nio': 74.692,
'coo': 44.01, #CoO
'fe2o3': 159.687}
# -------------CORE DEFINITIONS------------- #
[docs]class Error(Exception):
"""Base class for exceptions in this module."""
pass
# ------------TEMPERATURE CONVERSIONS----------- #
[docs]def C2K(T):
"""Convert temperatures in degrees Celsius to Kelvin"""
return T + 273.15
# -------------PRESSURE CONVERSIONS------------- #
[docs]def bar_to_pa(P):
"""Convert pressure from bar -> pascal (Pa)."""
return P*1e5
[docs]def bar_to_gpa(P):
"""Convert pressure from bar -> gigapascal (GPa)."""
return P*1e-4
[docs]def pa_to_bar(P):
"""Convert pressure from pascal (Pa) -> bar."""
return P*1e-5
[docs]def gpa_to_bar(P):
"""Convert pressure from gigapascal (GPa) -> bar."""
return P*1e4
# -------------- OXIDE CONVERSIONS --------------- #
[docs]def wtOxides_to_molOxides(C:dict)->dict:
"""
Converts units of a major element composition from wt % to mole frac.
Parameters
----------
C : dict
Major element composition of the silicate melt as weight percents.
Returns
-------
dict
major element composition as mole fractions
"""
# Normalise the weight percent to 100
original_sum = sum(C.values())
for ele, wt in C.items():
C[ele] = (wt*100)/original_sum
# convert
C_mol = {}
sm = 0
for ele in C:
if ele.lower() not in oxideMass:
raise KeyError(f"Sorry, I don't know the mass of '{ele}'.")
C_mol[ele] = C[ele] / oxideMass[ele.lower()]
sm += C[ele] / oxideMass[ele.lower()]
for ele in C:
C_mol[ele] = C_mol[ele] / sm
return C_mol
[docs]def molOxides_to_wtOxides(Cmol:dict)->dict:
"""Converts major element composition from mol frac to normalised wt%"""
Cwt = {}
sm = 0
for ele in Cmol:
if ele.lower() not in oxideMass:
raise KeyError(f"Sorry, I don't know the mass of '{ele}'.")
Cwt[ele] = Cmol[ele] * oxideMass[ele.lower()]
sm += Cmol[ele] * oxideMass[ele.lower()]
for ele in Cmol:
Cwt[ele] = Cwt[ele]*100 / sm
return Cwt