Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add HGP melt model #454

Merged
merged 1 commit into from
Nov 3, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
271 changes: 269 additions & 2 deletions burnman/minerals/HGP_2018_ds633.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,18 @@
HGP_2018_ds633
^^^^^^^^^^^^^^

Endmember minerals from Holland, Green and Powell (2018) and references therein.
Endmember minerals and melt solutions
from Holland, Green and Powell (2018) and references therein.
Dataset version 6.33.
The values in this document are all in S.I. units,
unlike those in the original tc-ds633.txt.
File autogenerated using HGP633data_to_burnman.py.
The endmember section of this file is autogenerated using
HGP633data_to_burnman.py.
"""

from ..classes.mineral import Mineral
from ..classes.solidsolution import SolidSolution
from ..classes.combinedmineral import CombinedMineral

"""
ENDMEMBERS
Expand Down Expand Up @@ -4825,3 +4829,266 @@ def cov():

from .HGP_2018_ds633_cov import cov
return cov


"""
MELT SOLUTIONS
"""

# q4L 1 3 xv 2 sumT -1 pq 1
# make 1 qL 4
# delG(mod) 0.22 0 -0.059
q4L = CombinedMineral([qL()], [4.], [0.22e3, 0, -0.059e-5],
name='q4L')

# sl1L 1 5 xv 2 sumT -1 psl 1 AlM 1 sumM -1
# make 1 silL 1
# delG(mod) 6.20 0 -0.318
sl1L = CombinedMineral([silL()], [1.],
[6.2e3, 0, -0.318e-5],
name='sl1L')

# wo1L 1 5 xv 2 sumT -1 pwo 1 CaM 1 sumM -1
# make 1 woL 1
# delG(mod) -0.45 0 -0.114
wo1L = CombinedMineral([woL()], [1.],
[-0.45e3, 0, -0.114e-5],
name='wo1L')

# fo2L 1 5 xv 2 sumT -1 pol 1 mgM 4 sumM -4
# make 1 foL 2
# delG(mod) 8.67 0 -0.131
fo2L = CombinedMineral([foL()], [2.],
[8.67e3, 0, -0.131e-5],
name='fo2L')

# fa2L 1 5 xv 2 sumT -1 pol 1 feM 4 sumM -4
# make 1 faL 2
# delG(mod) 13.70 0 -0.055
fa2L = CombinedMineral([faL()], [2.],
[13.7e3, 0, -0.055e-5],
name='fa2L')

# jdL 1 3 xv 2 sumT -1 pjd 1
# make 2 abL 1 qL -1
# delG(make) 12.19 0 -0.089
jdL = CombinedMineral([abL(), qL()],
[1., -1.], [12.19e3, 0, -0.089e-5],
name='jdL')

# hmL 1 3 xv 2 sumT -1 phm 1
# make 1 hemL 1/2
# delG(mod) 3.30 0 -0.032
hmL = CombinedMineral([hemL()], [0.5],
[3.3e3, 0, -0.032e-5],
name='hmL')

# ekL 1 3 xv 2 sumT -1 pek 1
# make 1 eskL 1/2
# delG(mod) 24.85 .245
ekL = CombinedMineral([eskL()], [0.5],
[24.85e3, 0, 0.245e-5],
name='ekL')

# tiL 1 3 xv 2 sumT -1 pti 1
# make 1 ruL 1
# delG(mod) 5.58 0 -0.489
tiL = CombinedMineral([ruL()], [1.],
[5.58e3, 0, -0.489e-5],
name='tiL')

# kjL 1 3 xv 2 sumT -1 pkj 1
# make 2 kspL 1 qL -1
# delG(make) 11.98 0 -0.210
kjL = CombinedMineral([kspL(), qL()],
[1., -1.], [11.98e3, 0, -0.210e-5],
name='kjL')

# ctL 1 3 xv 2 sumT -1 pct 1
# make 3 woL 1 silL 1 qL -1
# delG(make) -108.3 0.055 0.053
ctL = CombinedMineral([woL(),
silL(),
qL()],
[1., 1., -1.], [-108.3e3, -0.055e3, 0.053e-5],
name='ctL')

# h2o1L 1 1 xh 2
# make 1 h2oL 1
# delG(mod) 3.20 -0.0039 0.00087
h2o1L = CombinedMineral([h2oL()],
[1.], [3.2e3, -0.0039e3, 0.00087e-5],
name='h2o1L')

W = {}
W['q4L'] = {}
W['q4L']['sl1L'] = [9.5, 0, -0.10]
W['q4L']['wo1L'] = [-10.3, 0, 0]
W['q4L']['fo2L'] = [-26.5, 0, -3.12]
W['q4L']['fa2L'] = [-12.0, 0, -0.55]
W['q4L']['jdL'] = [-15.1, 0, -0.13]
W['q4L']['hmL'] = [20, 0, 0]
W['q4L']['ekL'] = [0, 0, 0]
W['q4L']['tiL'] = [24.6, 0, 0]
W['q4L']['kjL'] = [-17.8, 0, -0.05]
W['q4L']['ctL'] = [-14.6, 0, 0]
W['q4L']['h2o1L'] = [17.8, 0, -0.61]

W['sl1L'] = {}
W['sl1L']['wo1L'] = [-26.5, 0, 0.85]
W['sl1L']['fo2L'] = [2.2, 0, 0]
W['sl1L']['fa2L'] = [2.5, 0, 0]
W['sl1L']['jdL'] = [16.8, 0, 0]
W['sl1L']['hmL'] = [-5, 0, 0]
W['sl1L']['ekL'] = [0, 0, 0]
W['sl1L']['tiL'] = [15.2, 0, -0.04]
W['sl1L']['kjL'] = [7.0, 0, 0]
W['sl1L']['ctL'] = [4.0, 0, 0]
W['sl1L']['h2o1L'] = [23.7, 0, -0.94]

W['wo1L'] = {}
W['wo1L']['fo2L'] = [25.5, 0, 0.11]
W['wo1L']['fa2L'] = [14.0, 0, 0]
W['wo1L']['jdL'] = [-1.2, 0, 0]
W['wo1L']['hmL'] = [0, 0, 0]
W['wo1L']['ekL'] = [0, 0, 0]
W['wo1L']['tiL'] = [18.0, 0, 0]
W['wo1L']['kjL'] = [-1.1, 0, 0]
W['wo1L']['ctL'] = [9.5, 0, 0]
W['wo1L']['h2o1L'] = [40.3, 0, -0.86]

W['fo2L'] = {}
W['fo2L']['fa2L'] = [18.0, 0, 0]
W['fo2L']['jdL'] = [1.5, 0, 0]
W['fo2L']['hmL'] = [0, 0, 0]
W['fo2L']['ekL'] = [0, 0, 0]
W['fo2L']['tiL'] = [7.5, 0, 0]
W['fo2L']['kjL'] = [3.0, 0, 0]
W['fo2L']['ctL'] = [-5.6, 0, 0]
W['fo2L']['h2o1L'] = [9.4, 0, -1.58]

W['fa2L'] = {}
W['fa2L']['jdL'] = [7.5, 0, -0.05]
W['fa2L']['hmL'] = [-30, 0, 0]
W['fa2L']['ekL'] = [0, 0, 0]
W['fa2L']['tiL'] = [6.7, 0, 0]
W['fa2L']['kjL'] = [10.0, 0, 0]
W['fa2L']['ctL'] = [-6.5, 0, 0]
W['fa2L']['h2o1L'] = [9.2, 0, -1.58]

W['jdL'] = {}
W['jdL']['hmL'] = [10, 0, 0]
W['jdL']['ekL'] = [0, 0, 0]
W['jdL']['tiL'] = [16.5, 0, 0.14]
W['jdL']['kjL'] = [-5.9, 0, 0]
W['jdL']['ctL'] = [7.6, 0, 0]
W['jdL']['h2o1L'] = [-8.3, 0, -0.06]

W['hmL'] = {}
W['hmL']['ekL'] = [0, 0, 0]
W['hmL']['tiL'] = [0, 0, 0]
W['hmL']['kjL'] = [10, 0, 0]
W['hmL']['ctL'] = [0, 0, 0]
W['hmL']['h2o1L'] = [60.0, 0, -0.66]

W['ekL'] = {}
W['ekL']['tiL'] = [0, 0, 0]
W['ekL']['kjL'] = [0, 0, 0]
W['ekL']['ctL'] = [0, 0, 0]
W['ekL']['h2o1L'] = [30.0, 0, -0.66]

W['tiL'] = {}
W['tiL']['kjL'] = [9.0, 0, 0]
W['tiL']['ctL'] = [0, 0, 0]
W['tiL']['h2o1L'] = [30.0, 0, -0.60]

W['kjL'] = {}
W['kjL']['ctL'] = [-5.6, 0, 0]
W['kjL']['h2o1L'] = [-0.1, 0, 0.22]

W['ctL'] = {}
W['ctL']['h2o1L'] = [17.3, 0, 0.05]

a = {'q4L': 100,
'sl1L': 120,
'wo1L': 140,
'fo2L': 240,
'fa2L': 100,
'jdL': 120,
'hmL': 100,
'ekL': 100,
'tiL': 100,
'kjL': 100,
'ctL': 100,
'h2o1L': 100}

site_formulae = {'q4L': '[]0[Sinet][]0[Vac]2',
'sl1L': '[Al][Alsi][]0[Vac]2',
'wo1L': '[Ca][Sichain][]0[Vac]2',
'fo2L': '[Mg]4[Sitet][]0[Vac]2',
'fa2L': '[Fe]4[Sitet][]0[Vac]2',
'jdL': '[]0[Alsi2][Na][Vac]2',
'hmL': '[]0[Fef][]0[Vac]2',
'ekL': '[]0[Cr][]0[Vac]2',
'tiL': '[]0[Ti][]0[Vac]2',
'kjL': '[]0[Alsi2][K][Vac]2',
'ctL': '[]0[Caaltwosi][]0[Vac]2',
'h2o1L': '[]0[]0[]0[H]2'}


def make_melt_class(selected_endmembers):
"""
A function that generates a melt class that is a subclass of the
Holland et al. (2018) silicate melt model.

Parameters
----------
selected_endmembers: list of Minerals
Endmembers to include in the model.
Valid endmembers are given in the following list,
and should be specified in the same order
as they appear in the list:
['q4L', 'sl1L', 'wo1L', 'fo2L', 'fa2L', 'jdL',
'hmL', 'ekL', 'tiL', 'kjL', 'ctL', 'h2o1L'].

Returns
-------
melt_class: SolidSolution class
Melt class spanning the specified endmembers.
"""
endmembers = [[mbr, site_formulae[mbr.name]]
for mbr in selected_endmembers]
alphas = [a[mbr.name] for mbr in selected_endmembers]
We = [[W[selected_endmembers[i].name][selected_endmembers[j].name][0]
* 1.e3
for j in range(i+1, len(selected_endmembers))]
for i in range(len(selected_endmembers))]

Wv = [[W[selected_endmembers[i].name][selected_endmembers[j].name][2]
* 1.e-5
for j in range(i+1, len(selected_endmembers))]
for i in range(len(selected_endmembers))]

class silicate_melt(SolidSolution):

def __init__(self, molar_fractions=None):
self.name = 'Holland et al. (2018) melt model'
self.solution_type = 'asymmetric'
self.endmembers = endmembers
self.energy_interaction = We
self.volume_interaction = Wv
self.alphas = alphas

SolidSolution.__init__(self, molar_fractions=molar_fractions)

return silicate_melt


silicate_melt = make_melt_class([q4L, sl1L, wo1L,
fo2L, fa2L, jdL,
hmL, ekL, tiL,
kjL, ctL, h2o1L])

CMS_melt = make_melt_class([q4L, wo1L, fo2L])

MS_melt = make_melt_class([q4L, fo2L])