# This file is part of BurnMan - a thermoelastic
# and thermodynamic toolkit for the Earth and Planetary Sciences
# Copyright (C) 2012 - 2025 by the BurnMan team, released under the GNU
# GPL v2 or later.
"""
mp50KFMASH
^^^^^^^^^^
HPx-eos solutions using endmembers from
dataset HP_2011_ds62.
Contains the following solutions:
* g
* mu
* bi
* opx
* sa
* cd
* st
* chl
* ctd
* sp1
The values in this document are all in S.I. units,
unlike those in the original THERMOCALC file.
This file is autogenerated using hpx_eos_to_burnman.py
"""
import numpy as np
from numpy import array, nan
from . import HP_2011_ds62
from ..classes.mineral import Mineral
from ..classes.solution import Solution
from ..classes.solutionmodel import SymmetricRegularSolution
from ..classes.solutionmodel import AsymmetricRegularSolution
from ..classes.combinedmineral import CombinedMineral
annm = CombinedMineral(
[HP_2011_ds62.ann()],
[1.0],
[np.float64(-3000.0), np.float64(-0.0), np.float64(0.0)],
"annm",
)
obi = CombinedMineral(
[HP_2011_ds62.ann(), HP_2011_ds62.phl()],
[0.3333333333333333, 0.6666666666666666],
[np.float64(-3000.0), np.float64(-0.0), np.float64(0.0)],
"obi",
)
fm = CombinedMineral(
[HP_2011_ds62.en(), HP_2011_ds62.fs()],
[0.5, 0.5],
[np.float64(-6600.0), np.float64(-0.0), np.float64(0.0)],
"fm",
)
fspm = CombinedMineral(
[HP_2011_ds62.fspr()],
[1.0],
[np.float64(-2000.0), np.float64(-0.0), np.float64(0.0)],
"fspm",
)
spro = CombinedMineral(
[HP_2011_ds62.fspr(), HP_2011_ds62.spr4()],
[0.75, 0.25],
[np.float64(-3500.0), np.float64(-0.0), np.float64(0.0)],
"spro",
)
mstm = CombinedMineral(
[HP_2011_ds62.mst()],
[1.0],
[np.float64(0.0), np.float64(-0.0), np.float64(0.0)],
"mstm",
)
ochl1 = CombinedMineral(
[HP_2011_ds62.afchl(), HP_2011_ds62.clin(), HP_2011_ds62.daph()],
[1.0, -1.0, 1.0],
[np.float64(3000.0), np.float64(-0.0), np.float64(0.0)],
"ochl1",
)
ochl4 = CombinedMineral(
[HP_2011_ds62.afchl(), HP_2011_ds62.clin(), HP_2011_ds62.daph()],
[1.0, -0.2, 0.2],
[np.float64(2400.0), np.float64(-0.0), np.float64(0.0)],
"ochl4",
)
[docs]
class g(Solution):
def __init__(self, molar_fractions=None):
"""
Initialisation for a g solution object.
Contains the following endmembers with associated site occupancies:
* [HP_2011_ds62.py(), "[Mgx]3"]
* [HP_2011_ds62.alm(), "[Fex]3"]
This is implemented as a symmetric solution.
"""
self.name = "g"
self.solution_model = SymmetricRegularSolution(
endmembers=[
[HP_2011_ds62.py(), "[Mgx]3"],
[HP_2011_ds62.alm(), "[Fex]3"],
],
energy_interaction=[[2500.0]],
)
Solution.__init__(self, molar_fractions=molar_fractions)
[docs]
class mu(Solution):
def __init__(self, molar_fractions=None):
"""
Initialisation for a mu solution object.
Contains the following endmembers with associated site occupancies:
* [HP_2011_ds62.mu(), "[Almtwoa][Sitone1/2Altone1/2]2"]
* [HP_2011_ds62.cel(), "[Mgmtwoa][Sitone]2"]
* [HP_2011_ds62.fcel(), "[Femtwoa][Sitone]2"]
This is implemented as an asymmetric solution.
"""
self.name = "mu"
self.solution_model = AsymmetricRegularSolution(
endmembers=[
[HP_2011_ds62.mu(), "[Almtwoa][Sitone1/2Altone1/2]2"],
[HP_2011_ds62.cel(), "[Mgmtwoa][Sitone]2"],
[HP_2011_ds62.fcel(), "[Femtwoa][Sitone]2"],
],
alphas=[0.63, 0.63, 0.63],
energy_interaction=[[0.0, 0.0], [0.0]],
volume_interaction=[
[2.0000000000000003e-06, 2.0000000000000003e-06],
[0.0],
],
)
Solution.__init__(self, molar_fractions=molar_fractions)
[docs]
class bi(Solution):
def __init__(self, molar_fractions=None):
"""
Initialisation for a bi solution object.
Contains the following endmembers with associated site occupancies:
* [HP_2011_ds62.phl(), "[Mgmthree][Mgmonetwo]2[Sit1/2Alt1/2]2"]
* [annm, "[Femthree][Femonetwo]2[Sit1/2Alt1/2]2"]
* [obi, "[Femthree][Mgmonetwo]2[Sit1/2Alt1/2]2"]
* [HP_2011_ds62.east(), "[Almthree][Mgmonetwo]2[Alt]2"]
This is implemented as a symmetric solution.
"""
self.name = "bi"
self.solution_model = SymmetricRegularSolution(
endmembers=[
[HP_2011_ds62.phl(), "[Mgmthree][Mgmonetwo]2[Sit1/2Alt1/2]2"],
[annm, "[Femthree][Femonetwo]2[Sit1/2Alt1/2]2"],
[obi, "[Femthree][Mgmonetwo]2[Sit1/2Alt1/2]2"],
[HP_2011_ds62.east(), "[Almthree][Mgmonetwo]2[Alt]2"],
],
energy_interaction=[
[12000.0, 4000.0, 10000.0],
[8000.0, 15000.0],
[7000.0],
],
)
Solution.__init__(self, molar_fractions=molar_fractions)
[docs]
class opx(Solution):
def __init__(self, molar_fractions=None):
"""
Initialisation for a opx solution object.
Contains the following endmembers with associated site occupancies:
* [HP_2011_ds62.en(), "[Mgmone][Mgmtwo][Sit]1/2"]
* [HP_2011_ds62.fs(), "[Femone][Femtwo][Sit]1/2"]
* [fm, "[Mgmone][Femtwo][Sit]1/2"]
* [HP_2011_ds62.mgts(), "[Almone][Mgmtwo][Alt1/2Sit1/2]1/2"]
This is implemented as a symmetric solution.
"""
self.name = "opx"
self.solution_model = SymmetricRegularSolution(
endmembers=[
[HP_2011_ds62.en(), "[Mgmone][Mgmtwo][Sit]1/2"],
[HP_2011_ds62.fs(), "[Femone][Femtwo][Sit]1/2"],
[fm, "[Mgmone][Femtwo][Sit]1/2"],
[HP_2011_ds62.mgts(), "[Almone][Mgmtwo][Alt1/2Sit1/2]1/2"],
],
energy_interaction=[
[7000.0, 4000.0, 13000.0],
[4000.0, 13000.0],
[17000.0],
],
volume_interaction=[[0.0, 0.0, -1.5e-06], [0.0, -1.5e-06], [-1.5e-06]],
)
Solution.__init__(self, molar_fractions=molar_fractions)
[docs]
class sa(Solution):
def __init__(self, molar_fractions=None):
"""
Initialisation for a sa solution object.
Contains the following endmembers with associated site occupancies:
* [HP_2011_ds62.spr4(), "[Mgmthree][Mgmfourfivesix]3[Sit]"]
* [HP_2011_ds62.spr5(), "[Almthree][Mgmfourfivesix]3[Alt]"]
* [fspm, "[Femthree][Femfourfivesix]3[Sit]"]
* [spro, "[Mgmthree][Femfourfivesix]3[Sit]"]
This is implemented as a symmetric solution.
"""
self.name = "sa"
self.solution_model = SymmetricRegularSolution(
endmembers=[
[HP_2011_ds62.spr4(), "[Mgmthree][Mgmfourfivesix]3[Sit]"],
[HP_2011_ds62.spr5(), "[Almthree][Mgmfourfivesix]3[Alt]"],
[fspm, "[Femthree][Femfourfivesix]3[Sit]"],
[spro, "[Mgmthree][Femfourfivesix]3[Sit]"],
],
energy_interaction=[
[10000.0, 16000.0, 12000.0],
[19000.0, 22000.0],
[4000.0],
],
volume_interaction=[
[-2.0000000000000002e-07, 0.0, 0.0],
[-2.0000000000000002e-07, -2.0000000000000002e-07],
[0.0],
],
)
Solution.__init__(self, molar_fractions=molar_fractions)
[docs]
class cd(Solution):
def __init__(self, molar_fractions=None):
"""
Initialisation for a cd solution object.
Contains the following endmembers with associated site occupancies:
* [HP_2011_ds62.crd(), "[Mgx]2[Vh]"]
* [HP_2011_ds62.fcrd(), "[Fex]2[Vh]"]
* [HP_2011_ds62.hcrd(), "[Mgx]2[Htwooh]"]
This is implemented as a symmetric solution.
"""
self.name = "cd"
self.solution_model = SymmetricRegularSolution(
endmembers=[
[HP_2011_ds62.crd(), "[Mgx]2[Vh]"],
[HP_2011_ds62.fcrd(), "[Fex]2[Vh]"],
[HP_2011_ds62.hcrd(), "[Mgx]2[Htwooh]"],
],
energy_interaction=[[8000.0, 0.0], [9000.0]],
)
Solution.__init__(self, molar_fractions=molar_fractions)
[docs]
class st(Solution):
def __init__(self, molar_fractions=None):
"""
Initialisation for a st solution object.
Contains the following endmembers with associated site occupancies:
* [mstm, "[Mgx]4"]
* [HP_2011_ds62.fst(), "[Fex]4"]
This is implemented as a symmetric solution.
"""
self.name = "st"
self.solution_model = SymmetricRegularSolution(
endmembers=[
[mstm, "[Mgx]4"],
[HP_2011_ds62.fst(), "[Fex]4"],
],
energy_interaction=[[16000.0]],
)
Solution.__init__(self, molar_fractions=molar_fractions)
[docs]
class chl(Solution):
def __init__(self, molar_fractions=None):
"""
Initialisation for a chl solution object.
Contains the following endmembers with associated site occupancies:
* [HP_2011_ds62.clin(), "[Mgmone][Mgmtwothree]4[Almfour][Sittwo1/2Alttwo1/2]2"]
* [HP_2011_ds62.afchl(), "[Mgmone][Mgmtwothree]4[Mgmfour][Sittwo]2"]
* [HP_2011_ds62.ames(), "[Almone][Mgmtwothree]4[Almfour][Alttwo]2"]
* [HP_2011_ds62.daph(), "[Femone][Femtwothree]4[Almfour][Sittwo1/2Alttwo1/2]2"]
* [ochl1, "[Mgmone][Femtwothree]4[Femfour][Sittwo]2"]
* [ochl4, "[Femone][Mgmtwothree]4[Mgmfour][Sittwo]2"]
This is implemented as a symmetric solution.
"""
self.name = "chl"
self.solution_model = SymmetricRegularSolution(
endmembers=[
[
HP_2011_ds62.clin(),
"[Mgmone][Mgmtwothree]4[Almfour][Sittwo1/2Alttwo1/2]2",
],
[HP_2011_ds62.afchl(), "[Mgmone][Mgmtwothree]4[Mgmfour][Sittwo]2"],
[HP_2011_ds62.ames(), "[Almone][Mgmtwothree]4[Almfour][Alttwo]2"],
[
HP_2011_ds62.daph(),
"[Femone][Femtwothree]4[Almfour][Sittwo1/2Alttwo1/2]2",
],
[ochl1, "[Mgmone][Femtwothree]4[Femfour][Sittwo]2"],
[ochl4, "[Femone][Mgmtwothree]4[Mgmfour][Sittwo]2"],
],
energy_interaction=[
[17000.0, 17000.0, 20000.0, 30000.0, 21000.0],
[16000.0, 37000.0, 20000.0, 4000.0],
[30000.0, 29000.0, 13000.0],
[18000.0, 33000.0],
[24000.0],
],
)
Solution.__init__(self, molar_fractions=molar_fractions)
[docs]
class ctd(Solution):
def __init__(self, molar_fractions=None):
"""
Initialisation for a ctd solution object.
Contains the following endmembers with associated site occupancies:
* [HP_2011_ds62.mctd(), "[Mgmoneb]"]
* [HP_2011_ds62.fctd(), "[Femoneb]"]
This is implemented as a symmetric solution.
"""
self.name = "ctd"
self.solution_model = SymmetricRegularSolution(
endmembers=[
[HP_2011_ds62.mctd(), "[Mgmoneb]"],
[HP_2011_ds62.fctd(), "[Femoneb]"],
],
energy_interaction=[[4000.0]],
)
Solution.__init__(self, molar_fractions=molar_fractions)
[docs]
class sp1(Solution):
def __init__(self, molar_fractions=None):
"""
Initialisation for a sp1 solution object.
Contains the following endmembers with associated site occupancies:
* [HP_2011_ds62.herc(), "[Fea]"]
* [HP_2011_ds62.sp(), "[Mga]"]
This is implemented as a symmetric solution.
"""
self.name = "sp1"
self.solution_model = SymmetricRegularSolution(
endmembers=[
[HP_2011_ds62.herc(), "[Fea]"],
[HP_2011_ds62.sp(), "[Mga]"],
],
energy_interaction=[[0.0]],
)
Solution.__init__(self, molar_fractions=molar_fractions)