pyrolite 0.0.14__zip

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/__init__.py +10 -0
  2. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/__pycache__/__init__.cpython-36.pyc +0 -0
  3. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/__pycache__/_version.cpython-36.pyc +0 -0
  4. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/__pycache__/alteration.cpython-36.pyc +0 -0
  5. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/__pycache__/classification.cpython-36.pyc +0 -0
  6. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/__pycache__/compositions.cpython-36.pyc +0 -0
  7. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/__pycache__/geochem.cpython-36.pyc +0 -0
  8. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/__pycache__/melts.cpython-36.pyc +0 -0
  9. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/__pycache__/norm.cpython-36.pyc +0 -0
  10. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/__pycache__/normalisation.cpython-36.pyc +0 -0
  11. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/__pycache__/plot.cpython-36.pyc +0 -0
  12. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/_version.py +21 -0
  13. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/alteration.py +66 -0
  14. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/classification.py +222 -0
  15. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/comp/__init__.py +9 -0
  16. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/comp/__pycache__/__init__.cpython-36.pyc +0 -0
  17. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/comp/__pycache__/aggregate.cpython-36.pyc +0 -0
  18. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/comp/__pycache__/codata.cpython-36.pyc +0 -0
  19. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/comp/__pycache__/impute.cpython-36.pyc +0 -0
  20. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/comp/__pycache__/renorm.cpython-36.pyc +0 -0
  21. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/comp/aggregate.py +391 -0
  22. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/comp/codata.py +266 -0
  23. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/comp/impute.py +82 -0
  24. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/comp/renorm.py +40 -0
  25. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/compositions.py +524 -0
  26. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/georoc/GEOROC_CFB_Dataset_List.csv +42 -0
  27. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/georoc/GEOROC_Convergent_Dataset_List.csv +42 -0
  28. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/georoc/GEOROC_OBFB_Dataset_List.csv +5 -0
  29. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/georoc/GEOROC_OIB_Dataset_List.csv +49 -0
  30. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/georoc/GEOROC_OceanicPlateau_Dataset_List.csv +18 -0
  31. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/georoc/contents.json +1 -0
  32. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/melts/__pycache__/env.cpython-35.pyc +0 -0
  33. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/melts/__pycache__/env.cpython-36.pyc +0 -0
  34. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/melts/env.py +1063 -0
  35. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.Ba.modelfield +0 -0
  36. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.Bs.modelfield +0 -0
  37. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.F.modelfield +0 -0
  38. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.O1.modelfield +0 -0
  39. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.O2.modelfield +0 -0
  40. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.O3.modelfield +0 -0
  41. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.Pc.modelfield +0 -0
  42. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.Ph.modelfield +0 -0
  43. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.R.modelfield +0 -0
  44. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.S1.modelfield +0 -0
  45. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.S2.modelfield +0 -0
  46. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.S3.modelfield +0 -0
  47. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.T1.modelfield +0 -0
  48. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.T2.modelfield +0 -0
  49. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.U1.modelfield +0 -0
  50. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.U2.modelfield +0 -0
  51. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.U3.modelfield +0 -0
  52. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.modelfields +0 -0
  53. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.nan.modelfield +0 -0
  54. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS/TAS.none.modelfield +0 -0
  55. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/TAS.clsf.gz +0 -0
  56. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/aphanitic.clsf.gz +0 -0
  57. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/gabbroic.clsf.gz +0 -0
  58. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/peralkalinity.clsf.gz +0 -0
  59. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/phaneritic.clsf.gz +0 -0
  60. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/models/ultramafic.clsf.gz +0 -0
  61. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/refcomp/CH_PalmeONeill2014.csv +95 -0
  62. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/refcomp/DDMM_WorkmanHart2005.csv +105 -0
  63. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/refcomp/DMM_WorkmanHart2005.csv +105 -0
  64. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/refcomp/DM_SaltersStrake2004.csv +95 -0
  65. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/refcomp/EDMM_WorkmanHart2005.csv +105 -0
  66. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/refcomp/PM_PalmeONeill2014.csv +95 -0
  67. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/data/timescale/geotimescale_spans.csv +180 -0
  68. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/geochem.py +821 -0
  69. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/melts.py +92 -0
  70. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/mineral/__init__.py +10 -0
  71. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/mineral/__pycache__/__init__.cpython-36.pyc +0 -0
  72. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/mineral/__pycache__/db.cpython-36.pyc +0 -0
  73. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/mineral/__pycache__/ions.cpython-36.pyc +0 -0
  74. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/mineral/__pycache__/mineral.cpython-36.pyc +0 -0
  75. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/mineral/__pycache__/sites.cpython-36.pyc +0 -0
  76. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/mineral/db.py +88 -0
  77. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/mineral/ions.py +78 -0
  78. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/mineral/mineral.py +587 -0
  79. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/mineral/sites.py +134 -0
  80. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/norm.py +224 -0
  81. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/normalisation.py +204 -0
  82. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/plot.py +514 -0
  83. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__init__.py +13 -0
  84. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/__init__.cpython-36.pyc +0 -0
  85. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/database.cpython-36.pyc +0 -0
  86. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/env.cpython-36.pyc +0 -0
  87. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/general.cpython-36.pyc +0 -0
  88. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/georoc.cpython-36.pyc +0 -0
  89. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/math.cpython-36.pyc +0 -0
  90. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/melts.cpython-36.pyc +0 -0
  91. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/multip.cpython-36.pyc +0 -0
  92. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/multiprocessing.cpython-36.pyc +0 -0
  93. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/pd.cpython-36.pyc +0 -0
  94. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/plot.cpython-36.pyc +0 -0
  95. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/skl.cpython-36.pyc +0 -0
  96. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/spatial.cpython-36.pyc +0 -0
  97. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/text.cpython-36.pyc +0 -0
  98. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/time.cpython-36.pyc +0 -0
  99. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/__pycache__/wfs.cpython-36.pyc +0 -0
  100. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/database.py +88 -0
  101. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/env.py +81 -0
  102. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/general.py +266 -0
  103. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/georoc.py +444 -0
  104. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/math.py +371 -0
  105. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/melts.py +397 -0
  106. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/multip.py +29 -0
  107. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/multiprocessing.py +29 -0
  108. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/pd.py +214 -0
  109. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/plot.py +345 -0
  110. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/skl.py +847 -0
  111. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/spatial.py +91 -0
  112. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/text.py +207 -0
  113. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/time.py +224 -0
  114. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite/util/wfs.py +10 -0
  115. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite-0.0.14-py3.6.egg-info/PKG-INFO +61 -0
  116. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite-0.0.14-py3.6.egg-info/SOURCES.txt +83 -0
  117. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite-0.0.14-py3.6.egg-info/dependency_links.txt +1 -0
  118. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite-0.0.14-py3.6.egg-info/requires.txt +47 -0
  119. ProgramData/Anaconda3_64/Lib/site-packages/pyrolite-0.0.14-py3.6.egg-info/top_level.txt +1 -0
@@ -0,0 +1,1063 @@
1
+ from pyrolite.util.text import normalise_whitespace, to_width
2
+ from pathlib import Path
3
+
4
+
5
+ def mvar(**kwargs):
6
+ """A data dictonary specifying MELTS environment variables."""
7
+ d = dict(
8
+ validate=None,
9
+ desc=None,
10
+ type=None,
11
+ units=None,
12
+ set=True,
13
+ default=None,
14
+ overridden_by=None,
15
+ dependent_on=None,
16
+ priorty=0,
17
+ )
18
+ d.update(kwargs)
19
+ return d
20
+
21
+
22
+ def description(text, width=69):
23
+ return to_width(normalise_whitespace(text), width=width)
24
+
25
+
26
+ def filepath_validator(path):
27
+ """Validator for file paths."""
28
+ if isinstance(path, str):
29
+ path = Path(path)
30
+ return path.exists() and path.isfile()
31
+
32
+
33
+ def dirpath_validator(path):
34
+ """Validator for directory paths."""
35
+ if isinstance(path, str):
36
+ path = Path(path)
37
+ return path.exists() and path.isdir()
38
+
39
+
40
+ def numeric_validator(value):
41
+ """Validator for numeric values."""
42
+ return isinstance(float(value), float) or isinstance(int(value), int)
43
+
44
+
45
+ def typecast(type, item):
46
+ """Typecasts argument input for lambda functions."""
47
+
48
+ if isinstance(item, list):
49
+ # Return each of the function items as Typecast
50
+ # equivalents
51
+ return [lambda x: f(type(x)) if callable(f) else f for f in item]
52
+ else:
53
+ return lambda x: item(type(x))
54
+
55
+
56
+ ## The following is directly form the alphaMELTS Documentation v1.8
57
+ ## Written by Paula Antoshechkina and Paul Asimow October 13, 2017
58
+ MELTS_environment_variables = { # Solution Models
59
+ "VERSION": mvar(
60
+ default="pMELTS",
61
+ validate=lambda x: x in ["MELTS", "pMELTS"],
62
+ desc=description(
63
+ """Set to choose the liquid thermodynamic model.
64
+ pMELTS is only recommended for peridotite bulk
65
+ compositions between 1 and 4 GPa. If doing pHMELTS
66
+ calculations then use ‘pMELTS’ for melting and
67
+ ‘MELTS’ for low-pressure crystallization."""
68
+ ),
69
+ ),
70
+ "OLD_GARNET": mvar(
71
+ set=False,
72
+ type=bool,
73
+ desc=description(
74
+ """Uses the old, incorrect, garnet model. When set,
75
+ the behavior will resemble that of all GUI
76
+ versions of MELTS released before 2005 (including
77
+ Java MELTS) and the default behavior of
78
+ Adiabat_1ph versions 1.4 – 2.X. When unset,
79
+ will behave as if ADIABAT_FIX_GARNET was set in
80
+ older (pre-3.0) versions of Adiabat_1ph."""
81
+ ),
82
+ ),
83
+ "OLD_SPINEL": mvar(
84
+ set=False,
85
+ type=bool,
86
+ desc=description(
87
+ """Use the spinel model from Sack and
88
+ Ghiorso [1991], with perfectly ideal
89
+ mixing of volumes. When set, gives the
90
+ same behavior as Java MELTS and
91
+ earlier (pre-3.0) versions of
92
+ Adiabat_1ph. When unset, uses the
93
+ spinel volume model as formulated in
94
+ Ghiorso and Sack [1991]."""
95
+ ),
96
+ ),
97
+ "OLD_BIOTITE": mvar(
98
+ set=False,
99
+ type=bool,
100
+ desc=description(
101
+ """Uses the biotite model from Sack and Ghiorso
102
+ [1989] instead of the default alphaMELTS one.
103
+ When set, the program uses the same code as
104
+ GUI versions of MELTS (2005-present). The
105
+ behavior may differ slightly from earlier GUI
106
+ versions of MELTS as a small error was fixed."""
107
+ ),
108
+ ),
109
+ "2_AMPH": mvar(
110
+ set=False,
111
+ type=bool,
112
+ desc=description(
113
+ """Uses separate orthoamphibole and clinoamphibole
114
+ phases. When set, gives the same behavior as Java
115
+ MELTS and Corba MELTS applets, and earlier versions
116
+ of Adiabat_1ph (which inherited its code from the
117
+ Java MELTS branch). When unset, will use a single
118
+ cummingtonite-grunerite-tremolite solution and deduce
119
+ the amphibole structure from the energetics."""
120
+ ),
121
+ ),
122
+ "NO_CHLORITE": mvar(
123
+ set=False,
124
+ type=bool,
125
+ desc=description(
126
+ """As of version 1.6, the chlorite model of
127
+ Hunziker [2003] is included in alphaMELTS
128
+ (see Smith et al. [2007]). To reproduce previous
129
+ results for bulk compositions that may stabilize
130
+ chlorite, add a ‘Suppress: chlorite’ line to the
131
+ melts_file or set this variable."""
132
+ ),
133
+ ),
134
+ # P-T Path and fO2 control
135
+ "MODE": mvar(
136
+ validate=lambda x: x
137
+ in [
138
+ "geothermal",
139
+ "isenthalpic",
140
+ "isentropic",
141
+ "isobaric",
142
+ "isochoric",
143
+ "isothermal",
144
+ "ptfile",
145
+ "ptgrid",
146
+ "tpgrid",
147
+ ],
148
+ default="isentropic",
149
+ desc=description(
150
+ """Sets the calculation mode. This variable is case
151
+ insensitive. ‘PTfile’ (‘PTPath’ is also accepted
152
+ for backwards compatibility) reads in P and T from
153
+ a file; see below. ‘PTgrid’ and ‘TPgrid’ perform
154
+ calculations on a grid bounded by the starting T
155
+ and ALPHAMELTS_MINT/MAXT, and by the starting P and
156
+ ALPHAMELTS_MINP/MAXP. For ‘PTgrid’ the T-loop is
157
+ inside the P-loop, whereas ‘TPgrid’ is the other
158
+ way round; in either case the (superliquidus or
159
+ subsolidus) starting solution migrates with the
160
+ outer loop. Generally, unless liquid is suppressed,
161
+ ‘PTgrid’ with ALPHAMELTS_DELTAT < 0 will be the
162
+ easiest combination. For other modes, there are
163
+ various ways to initialize P, T and / or reference
164
+ entropy, enthalpy or volume, and the thermodynamic
165
+ path is set using ALPHAMELTS_DELTAP and / or
166
+ ALPHAMELTS_DELTAT."""
167
+ ),
168
+ ),
169
+ "PTPATH_FILE": mvar(
170
+ set=False,
171
+ validate=filepath_validator,
172
+ desc=description(
173
+ """Gives the name of the ptpath_file, which is a simple
174
+ space delimited text file with one ‘P_value T_value’
175
+ pair per line. If ALPHAMELTS_DELTAP and
176
+ ALPHAMELTS_DELTAT are both zero the user will be asked
177
+ for a maximum number of iterations to perform."""
178
+ ),
179
+ ),
180
+ "DELTAP": mvar(
181
+ validate=numeric_validator,
182
+ type=float,
183
+ default=1000.0,
184
+ units="bars",
185
+ desc=description(
186
+ """This sets the pressure increment for isentropic,
187
+ isothermal, geothermal or phase diagram mode.
188
+ This is a signed number; i.e., a positive value steps
189
+ upwards in P, negative steps down. If using a ptpath_file,
190
+ a non-zero ALPHAMELTS_DELTAP means the whole will be read
191
+ in and executed. Setting ALPHAMELTS_DELTAP to zero, with a
192
+ non-zero value for ALPHAMELTS_DELTAT, means that phase
193
+ diagram mode will step in temperature instead of pressure
194
+ (except for liquid)."""
195
+ ),
196
+ ),
197
+ "DELTAT": mvar(
198
+ validate=numeric_validator,
199
+ default=10.0,
200
+ type=float,
201
+ units="Degrees Celsius",
202
+ desc=description(
203
+ """This sets the temperature increment for isobaric,
204
+ isochoric, geothermal or phase diagram mode. This is a
205
+ signed number; i.e., a positive value steps upwards in T,
206
+ negative steps down. If using a ptpath_file, a non-zero
207
+ ALPHAMELTS_DELTAT means the whole will be read in and
208
+ executed. For phase diagram mode to step in temperature
209
+ ALPHAMELTS_DELTAP must be set to zero."""
210
+ ),
211
+ ),
212
+ "MAXP": mvar(
213
+ validate=numeric_validator,
214
+ type=float,
215
+ default=lambda env: [30000, 40000][env["VERSION"] != "MELTS"],
216
+ dependent_on=["VERSION"],
217
+ units="bars",
218
+ desc=description(
219
+ """Sets the maximum pressure the program will go to on
220
+ execution."""
221
+ ),
222
+ ),
223
+ "MINP": mvar(
224
+ validate=numeric_validator,
225
+ type=float,
226
+ default=lambda env: [1, 10000][env["VERSION"] != "MELTS"],
227
+ dependent_on=["VERSION"],
228
+ units="bars",
229
+ desc=description(
230
+ """Sets the minimum pressure the program will go to on
231
+ execution."""
232
+ ),
233
+ ),
234
+ "MAXT": mvar(
235
+ validate=numeric_validator,
236
+ type=float,
237
+ default=2000,
238
+ units="Degrees Celsius",
239
+ desc=description(
240
+ """Sets the maximum temperature the program will go to on
241
+ execution."""
242
+ ),
243
+ ),
244
+ "MINT": mvar(
245
+ validate=numeric_validator,
246
+ type=float,
247
+ default=0,
248
+ units="Degrees Celsius",
249
+ desc=description(
250
+ """Sets the minimum temperature the program will go to on
251
+ execution."""
252
+ ),
253
+ ),
254
+ "ALTERNATIVE_FO2": mvar(
255
+ set=False,
256
+ type=bool,
257
+ desc=description(
258
+ """Normally, the parameterization of Kress and
259
+ Carmichael [1991] is used to calculate fO2 in the
260
+ liquid. If conditions are subsolidus or liquid is
261
+ suppressed then the approach detailed in Asimow and
262
+ Ghiorso [1998] is used to construct an appropriate
263
+ redox reaction to solve for fO2 of the bulk
264
+ assemblage. If this environment variable is set,
265
+ however, then the method of Asimow and Ghiorso
266
+ [1998] is used to calculate fO2 regardless of
267
+ whether liquid is present and so, in theory, allows
268
+ for a smoother transition across the solidus. """
269
+ ),
270
+ ),
271
+ "LIQUID_FO2": mvar(
272
+ set=False,
273
+ type=bool,
274
+ overridden_by=["LIQUID_FO2"],
275
+ desc=description(
276
+ """The method of Asimow and Ghiorso
277
+ [1998] is computationally more involved than the
278
+ parameterization of Kress and Carmichael [1991] and it
279
+ is not uncommon for fO2 calculations to be successful
280
+ with liquid present but fail subsolidus. It is possible
281
+ to turn off the fO2 buffer manually (option 5).
282
+ Alternatively, if this environment variable is set then
283
+ the fO2 buffer, as formulated in Kress and Carmichael
284
+ [1991], will only be imposed when liquid is present.
285
+ Note that setting this variable does not change the
286
+ fO2 buffer setting (e.g. ‘FMQ’); the program just ignores
287
+ the flag if no liquid is around."""
288
+ ),
289
+ ),
290
+ "IMPOSE_FO2": mvar(
291
+ set=False,
292
+ type=bool,
293
+ desc=description(
294
+ """Normally, for isentropic, isenthalpic and isochoric
295
+ modes any fO2 buffer will be switched off on execution
296
+ once the reference entropy, enthalpy or volume has been
297
+ set (usually after the first calculation or before if set
298
+ manually). If this environment variable is set then the
299
+ program will alternate between (1) an unbuffered
300
+ isenthalpic / isentropic / isochoric step and (2) an
301
+ isobaric / isothermal fO2 buffered step. Overall this
302
+ approximates an isenthalpic, isentropic or isochoric
303
+ path with a desired fO2 buffer."""
304
+ ),
305
+ ),
306
+ "FO2_PRESSURE_TERM": mvar(
307
+ set=False,
308
+ type=bool,
309
+ desc=description(
310
+ """In most versions of MELTS, including Corba
311
+ MELTS and alphaMELTS, by default, reference fO2
312
+ buffers in the system Fe-Si-O are calculated from
313
+ the equations given in Myers and Eugster [1983].
314
+ In the standalone GUI version of MELTS a pressure
315
+ term is added to the fayalite-magnetite-quartz
316
+ buffer (FMQ) to give:
317
+
318
+ log(fO2) = − 24441.9/T + 0.110 (P − 1)/T + 8.290
319
+
320
+ When this environment variable is set then
321
+ alphaMELTS uses the equation as shown whereas by
322
+ default the second term is omitted. Inclusion of
323
+ the pressure term can have subtle effects on the
324
+ stability of certain phases such as pyroxenes.
325
+ Note that in Kessel et al. [2001] the coefficient
326
+ on the pressure term is 0.05, rather than 0.110;
327
+ the value of 0.110 was chosen by Ghiorso to
328
+ maintain consistency with Berman [1988]."""
329
+ ),
330
+ ),
331
+ # Open vs closed system
332
+ "CONTINUOUS_MELTING": mvar(
333
+ set=False,
334
+ type=bool,
335
+ desc=description(
336
+ """By default, batch melting equations are used.
337
+ Setting this environment variable will change the
338
+ melting mode to continuous or fractional, where
339
+ melt is extracted after each equilibrium. Set
340
+ ALPHAMELTS_MINF to 0 for perfect fractional
341
+ melting. In practice though, the program will
342
+ run more smoothly if ALPHAMELTS_MINF is slightly
343
+ greater than 0. See the next four environment
344
+ variables’ entries for more details."""
345
+ ),
346
+ ),
347
+ "MINF": mvar(
348
+ default=0.005,
349
+ type=float,
350
+ validator=typecast(
351
+ float, [numeric_validator, lambda x: (x >= 0.0) & (x < 1.0)]
352
+ ),
353
+ overridden_by=["MINPHI"],
354
+ desc=description(
355
+ """If ALPHAMELTS_CONTINUOUS_MELTING is set, then by default a
356
+ fixed melt fraction, by mass, marks the threshold above which
357
+ melt is extracted. This variable is used to change the amount
358
+ of melt retained. If the current melt fraction is less than
359
+ ALPHAMELTS_MINF then all the melt will be retained until the
360
+ next step, otherwise the amount of melt removed (approximately
361
+ F - ALPHAMELTS_MINF) will be adjusted so such that the melt
362
+ fraction is exactly ALPHAMELTS_MINF after extraction."""
363
+ ),
364
+ ),
365
+ "MINPHI": mvar(
366
+ set=False,
367
+ type=float,
368
+ validator=typecast(
369
+ float, [numeric_validator, lambda x: (x >= 0.0) & (x < 1.0)]
370
+ ),
371
+ overridden_by=["CONTINUOUS_RATIO"],
372
+ desc=description(
373
+ """If ALPHAMELTS_CONTINUOUS_MELTING is set, then set this
374
+ environment variable controls the retained melt fraction,
375
+ by volume i.e. the ‘residual porosity’. If the current melt
376
+ fraction is less than ALPHAMELTS_MINPHI then all the melt
377
+ will be retained until the next step, otherwise the amount
378
+ of melt removed (approximately phi - ALPHAMELTS_MINPHI) will
379
+ be adjusted so that the melt fraction, by volume, is exactly
380
+ ALPHAMELTS_MINPHI after extraction."""
381
+ ),
382
+ ),
383
+ "CONTINUOUS_RATIO": mvar(
384
+ set=False,
385
+ type=float,
386
+ validator=typecast(
387
+ float, [numeric_validator, lambda x: (x >= 0.0) & (x < 1.0)]
388
+ ),
389
+ overridden_by=["CONTINUOUS_VOLUME"],
390
+ desc=description(
391
+ """This implements another alternative definition
392
+ of continuous melting. Instead of extracting all
393
+ liquid above a fixed mass or volume fraction, this
394
+ option, if set, causes the program to multiply the
395
+ liquid mass by a fixed ratio."""
396
+ ),
397
+ ),
398
+ "CONTINUOUS_VOLUME": mvar(
399
+ set=False,
400
+ type=float,
401
+ desc=description(
402
+ """"This option, if set, extracts the required
403
+ amount of melt to retain a constant total volume.
404
+ This reference volume is set the first time
405
+ melting occurs and is equal to the solid volume
406
+ plus whatever melt volume is retained according
407
+ to the ALPHAMELTS_MINPHI variable (or a default
408
+ value of 0.002 if that is unset). Only for
409
+ isobaric or isothermal calculations. Note that
410
+ this is not an ‘isochoric’ calculation as far
411
+ as alphaMELTS is concerned because melting is
412
+ still allowed to cause expansion; this option
413
+ only controls how much melt must be extracted
414
+ to return to the original volume and, if
415
+ necessary, also adjusts pressure (for isothermal
416
+ calculations) or temperature (for isobaric
417
+ calculations) to maintain equilibrium."""
418
+ ),
419
+ ),
420
+ "FRACTIONATE_SOLIDS": mvar(
421
+ set=False,
422
+ type=bool,
423
+ desc=description(
424
+ """To turn on fractional crystallization of all
425
+ solid phases, set this option to true (does not
426
+ include water, see below). Do not use this
427
+ option if you wish to selectively fractionate
428
+ just a few phases; instead put ‘Fractionate:
429
+ phase’ lines in you melts_file (see the ‘MELTS
430
+ file’ section) or adjust individual phase
431
+ settings with menu option 8."""
432
+ ),
433
+ ),
434
+ "MASSIN": mvar(
435
+ default=0.001,
436
+ type=float,
437
+ validator=typecast(
438
+ float, [numeric_validator, lambda x: (x >= 0.0) & (x < 1.0)]
439
+ ),
440
+ overridden_by=["MINW"],
441
+ desc=description(
442
+ """Set to the mass in grams of each solid phase that is
443
+ retained during fractional crystallization. An increased
444
+ value may help to stabilize the calculation. A smaller value
445
+ can also be used, but a minimum of 10-6 grams is recommended.
446
+ nce the phase is no longer in the equilibrium assemblage it
447
+ will be completely exhausted, regardless of the
448
+ ALPHAMELTS_MASSIN value."""
449
+ ),
450
+ ),
451
+ "FRACTIONATE_WATER": mvar(
452
+ set=False,
453
+ type=bool,
454
+ desc=description(
455
+ """To remove free water at each calculation stage
456
+ in an analogous way to how melt is removed during
457
+ continuous melting, set this variable true. (Note
458
+ that, in MELTS and pMELTS, water is treated like
459
+ a ‘solid’, in the sense that it is not melt, so
460
+ you can achieve the same effect by putting a
461
+ ‘Fractionate: water’ line in your melts_file.
462
+ However, water is treated differently from the
463
+ other mineral phases in that it may be extracted
464
+ during melting or crystallization.)"""
465
+ ),
466
+ ),
467
+ "MINW": mvar(
468
+ set=False,
469
+ type=float,
470
+ validator=typecast(
471
+ float, [numeric_validator, lambda x: (x >= 0.0) & (x < 1.0)]
472
+ ),
473
+ desc=description(
474
+ """Set to the proportion of retained water, relative to the
475
+ total system mass. Works in a similar way, for water, as
476
+ ALPHAMELTS_MINF does for melt; may be set to exactly zero. If
477
+ not set then fractionation of water is treated in a similar way
478
+ to fractionation of a solid phase i.e. a nominal mass of 10-4
479
+ grams is retained at each stage to stabilize the calculation;
480
+ the smaller mass of water retained, compared to other solid
481
+ phases, reflects its significantly lower molecular mass."""
482
+ ),
483
+ ),
484
+ "FRACTIONATE_TARGET": mvar(
485
+ set=False,
486
+ type=float,
487
+ desc=description(
488
+ """During normal forward fractional
489
+ crystallization a (negative) increment is added
490
+ to the temperature at each step,
491
+ ALPHAMELTS_DELTAT, and the run is terminated when
492
+ the temperature goes below ALPHAMELTS_MINT. If
493
+ this environment variable is set then forward or
494
+ backward fractionation is performed so that the
495
+ MgO content (in wt %) or the Mg# (in mol %) hits
496
+ a particular target; see the next two entries.
497
+ When option 3 is called alphaMELTS will perform
498
+ a single calculation for the current P-T
499
+ conditions, in the normal way. When option 4 is
500
+ used it will first try to find the liquidus
501
+ instead and use that to decide whether forward
502
+ or backwards fractionation is required to move
503
+ the liquid towards the target composition.
504
+ For forward fractionation, temperature will be
505
+ reduced, by an amount equal to the absolute value
506
+ of ALPHAMELTS_DELTAT, each time. For backwards
507
+ fractionation the program will step down (by the
508
+ same temperature increment) until one or more
509
+ ‘allowed’ solid phases join the assemblage. The
510
+ ‘allowed’ solid phases are any MgO-brearing
511
+ phases that have been ‘allowed’ by setting
512
+ ALPHAMELTS_FRACTIONATE_SOLIDS or by having
513
+ ‘Fractionate:’ lines in the melts_file. The
514
+ routine then assimilates these phases before
515
+ searching for the new liquidus. For H2O-rich
516
+ compositions, the liquidus temperature will be
517
+ for a melt composition that is water-saturated,
518
+ but not oversaturated enough to exsolve vapor (it
519
+ may also help to buffer aH2O).
520
+ Output will be written each time the new liquidus
521
+ is found. Forward- or backward-fractionated trace
522
+ element compostions will be calculated if
523
+ ALPHAMELTS_DO_TRACE is on. Execution continues
524
+ until the target MgO or Mg# is reached or just
525
+ passed; therefore, the smaller ALPHAMELTS_DELTAT
526
+ is, the closer the liquid composition will be to
527
+ the target. In the limit as the step size tends
528
+ to zero a liquid composition that is on, say,
529
+ the plagioclase + clinopyroxene cotectic would
530
+ be expected to stay on the cotectic as back
531
+ fractionation proceeds (at least until a thermal
532
+ divide is encountered); in practice one or other
533
+ solid phase may occasionally be dropped from the
534
+ assemblage. For complicated peritectic
535
+ relationships the ‘Amoeba’ routine (menu option
536
+ 17) is more useful for constraining a plausible,
537
+ but still non-unique, parental melt."""
538
+ ),
539
+ ),
540
+ "MGO_TARGET": mvar(
541
+ default=8.0,
542
+ type=float,
543
+ validator=typecast(
544
+ float, [lambda x: isinstance(x, float), lambda x: (x > 0.0) & (x < 100.0)]
545
+ ),
546
+ overridden_by=["MGNUMBER_TARGET"],
547
+ desc=description(
548
+ """Sets the target MgO content of the liquid for forward
549
+ or backward fractionation to the value in wt %. When
550
+ using ‘Amoeba’ (menu option 17) the value of
551
+ ALPHAMELTS_MGO_TARGET is used to set the MgO of the
552
+ parental liquid composition and the target MgO content
553
+ for the evolved liquid composition is taken from the
554
+ melts_file(s). Once ‘Amoeba’ is finished, reading in
555
+ another melts_file will revert to using
556
+ ALPHAMELTS_MGO_TARGET as the stop point for forward or
557
+ backward fractional crystallization."""
558
+ ),
559
+ ),
560
+ "MGNUMBER_TARGET": mvar(
561
+ set=False,
562
+ type=float,
563
+ validator=typecast(
564
+ float, [lambda x: isinstance(x, float), lambda x: (x > 0.0) & (x < 100.0)]
565
+ ),
566
+ desc=description(
567
+ """Sets the target Mg# of the liquid for forward or
568
+ backward fractionation to the value in mol %. When
569
+ using ‘Amoeba’ the value of
570
+ ALPHAMELTS_MGNUMBER_TARGET is used in a comparable
571
+ way to ALPHAMELTS MGO_TARGET above."""
572
+ ),
573
+ ),
574
+ "ASSIMILATE": mvar(
575
+ set=False,
576
+ type=bool,
577
+ desc=description(
578
+ """This environment variable causes a user-defined mass
579
+ of a second bulk composition to be added after each
580
+ calculation stage (see ‘Bulk composition’). It is
581
+ intended for calculations at specified P-T conditions
582
+ (e.g. isobaric, isothermal or PTpath modes) or for
583
+ heat-balanced assimilation in isenthalpic mode. It also
584
+ works for isentropic or isochoric constraints under
585
+ certain circumstances but these options are under
586
+ development and, as yet, untested. Melt may be extracted
587
+ or solid phases fractionated simultaneously.
588
+ On execution, if the mode is isothermal or
589
+ ALPHAMELTS_DELTAT is zero and the mode is isobaric or
590
+ ALPHAMELTS_DELTAP is zero then you will be asked the
591
+ number of iterations you wish to perform. The program
592
+ will then request the file type / number of files and the
593
+ name(s) before the first equilibration9. The assimilant
594
+ bulk composition may be fixed by a single enrichment_file
595
+ or binary restart_file, or by providing separate
596
+ enrichment_files for each mineral phase in the
597
+ assimilant. For separate enrichment_files, phase
598
+ compositions are given in wt% oxides and it is up to the
599
+ user to ensure the solid compositions are close to
600
+ stoichiometric in the appropriate pure phase or solid
601
+ solution model (see the forum for a list of mineral phase
602
+ end members). Trace element concentrations should be the
603
+ bulk assimilant values rather than individual mineral
604
+ ones. A single liquid composition can be input instead
605
+ of, or in addition to, mineral compositions.
606
+ Alternatively, multiple enrichment_files can be requested
607
+ so that the assimilant bulk composition can be changed
608
+ for each iteration. To use multiple enrichment_files in
609
+ this way, see the ‘Table file’ section for the filename
610
+ format. The program assumes that the indices are reset
611
+ each time option 4 is called.
612
+ You can enter the mass of assimilant to be added at each
613
+ subsequent stage or, for melts_file(s) only, take the
614
+ value(s) from the ‘Initial Mass:’ line(s). If the mass of
615
+ assimilant is specified for separate mineral melts_files
616
+ then the value entered is the total mass and the
617
+ ‘Initial Mass:’ lines will be used to determine the
618
+ proportions of the mineral phases. Major and, if
619
+ appropriate, trace elements will be mixed (to mix trace
620
+ elements only use ALPHAMELTS_FLUX_MELTING). If trace
621
+ element calculations are switched on, the
622
+ enrichment_file(s) must contain the same trace elements
623
+ as the melts_file. For separate mineral files, the trace
624
+ elements can be included in each mineral file, to avoid
625
+ read errors, but only the vales from the first
626
+ enrichment_file will be used. If running in isothermal
627
+ mode, or the like, then the P, T and fO2 buffer from the
628
+ assimilant file will be ignored and set to the current
629
+ values, regardless of the input file type. For
630
+ isenthalpic mode: please set ALPHAMELTS_DELTAP to zero,
631
+ for reasons given in ‘Thermodynamic Path’, and
632
+ ALPHAMELTS_DELTAT to zero so that the number of
633
+ iterations can be controlled. We suggest you set
634
+ ALPHAMELTS_SAVE_ALL so that you can gradually build up
635
+ the number of iterations. In this mode, if you use a
636
+ single text enrichment_file (or files) for the assimilant
637
+ then the program will try to find a thermodynamically
638
+ equilibrated state, using a superliquidus start. If you
639
+ use separate mineral phase enrichment_files the
640
+ enthalphy of each phase is calculated at temperature
641
+ given in the first enrichment_file, without
642
+ re-equilibration; this is similar to the GUI
643
+ assimilation routines. If you use a binary assimilant
644
+ file then it will use the previously calculated starting
645
+ conditions but the pressure in the file must match the
646
+ current pressure (or the temperatures must match for
647
+ isochoric mode). If this is not the case an error message
648
+ will be printed; either (a) redo the restart_file for the
649
+ correct conditions or (b) use menu option 2 to set the
650
+ current values to those used to generate the restart_file
651
+ and then call option 4 again."""
652
+ ),
653
+ ),
654
+ "FLUX_MELTING": mvar(
655
+ set=False,
656
+ type=bool,
657
+ desc=description(
658
+ """This variable causes a user-defined proportion of a
659
+ second composition, trace elements only, to be mixed
660
+ in after each calculation stage (see ‘Bulk
661
+ composition’). If used in conjunction with
662
+ ALPHAMELTS_CONTINUOUS_MELTING and
663
+ ALPHAMELTS_DO_TRACE_H2O it can simulate flux melting by
664
+ a hydrous fluid (to simulate fluxing by a metasomatic
665
+ melt use ALPHAMELTS_ASSIMILATE instead). We suggest you
666
+ set ALPHAMELTS_SAVE_ALL so that you can gradually build
667
+ up the number of iterations, e.g. until the system
668
+ achieves steady state, by repeated calling of the
669
+ ‘execute’ menu option. Execution is essentially the
670
+ same as for ALPHAMELTS_ASSIMILATE but for trace
671
+ elements only. As the mass of the enriching
672
+ composition is not necessarily defined, the user is
673
+ asked instead for the mass proportion of the new
674
+ composition to add (similar to ‘Source Mixer’ in menu
675
+ option 12). Alternatively, for melts_files(s), the
676
+ ‘Initial Mass:’ lines may be used; in which case the
677
+ old and new compositions are mixed in the ratio
678
+ old_mass:new_mass. Note that, as major elements are not
679
+ mixed, the total system mass (i.e. old_mass) will be
680
+ unaffected."""
681
+ ),
682
+ ),
683
+ "DRY_ITER_PATIENCE": mvar(
684
+ default=100,
685
+ type=int,
686
+ validator=typecast(
687
+ int, [lambda x: isinstance(x, int), lambda x: (x >= 0) & (x <= 100)]
688
+ ),
689
+ desc=description(
690
+ """If simulating flux melting or assimilation,
691
+ this is the maximum number of consecutive
692
+ iterations that alphaMELTS will run without any
693
+ melting occurring before it will give up and
694
+ return to the menu."""
695
+ ),
696
+ ),
697
+ # pHMELTS and Trace Elements
698
+ "DO_TRACE": mvar(
699
+ set=False,
700
+ type=bool,
701
+ desc=description(
702
+ """Implements attached trace element partitioning function
703
+ for those elements listed in the melts_file."""
704
+ ),
705
+ ),
706
+ "DO_TRACE_H2O": mvar(
707
+ set=False,
708
+ type=bool,
709
+ desc=description(
710
+ """For the case where water is to be treated as a trace
711
+ element this option adds an iteration on the H2O
712
+ content, as described in Asimow, et al. [2004]."""
713
+ ),
714
+ ),
715
+ "HK_OL_TRACE_H2O": mvar(
716
+ set=False,
717
+ type=bool,
718
+ desc=description(
719
+ """By default the Mosenfelder, et al. [2005] model
720
+ for water solubility in olivine is used. This
721
+ environment variable uses the Hirth and Kohlstedt
722
+ [1996] model instead, which gives lower solubility
723
+ and consequently lower partition coefficients."""
724
+ ),
725
+ ),
726
+ "HK_PXGT_TRACE_H2O": mvar(
727
+ default="mineral-melt",
728
+ type=bool,
729
+ validator=lambda x: x in ["mineral-melt", "mineral-mineral"],
730
+ desc=description(
731
+ """If the Mosenfelder, et al. [2005] model for
732
+ water solubility in olivine is used then by
733
+ default the mineral-melt partition coefficients
734
+ for water with orthopyroxene, clinopyroxene and
735
+ garnet are still those of Hirth and Kohlstedt
736
+ [1996]. Setting this variable to ‘mineral-mineral’
737
+ means the solubility of water in opx, cpx and
738
+ garnet are linked to the newer water solubility
739
+ in olivine model, which is equivalent to
740
+ preserving the mineral-mineral water partition
741
+ coefficients of Hirth and Kohlstedt [1996].
742
+ Setting it to ‘mineral-melt’ retains the default
743
+ behavior."""
744
+ ),
745
+ ),
746
+ "2X_OPX_TRACE_H2O": mvar(
747
+ set=False,
748
+ type=bool,
749
+ desc=description(
750
+ """By default the solubility of water in
751
+ clinopyroxene is twice that in orthopyroxene,
752
+ based on the results of Hirth and Kohlstedt [1996].
753
+ If this variable is set then the solubility of
754
+ water in opx is scaled up by to be equal to the
755
+ cpx value, consistent with the observations of
756
+ Hauri et al. [2006]. This option can be used
757
+ regardless of whether the Mosenfelder, et al.
758
+ [2005] or Hirth and Kohlstedt [1996] models are
759
+ being used for olivine or opx, cpx and garnet. For
760
+ example, if either ALPHAMELTS_HK_OL_TRACE_H2O or
761
+ ALPHAMELTS_HK_PXGT_TRACE_H2O is set then the
762
+ mineral-mineral partition coefficients will be
763
+ those from Table 1 of Hirth and Kohlstedt [1996],
764
+ except that olivine-opx value of 0.2 will be
765
+ replaced by 0.1."""
766
+ ),
767
+ ),
768
+ "TRACE_DEFAULT_DPTX": mvar(
769
+ set=False,
770
+ type=bool,
771
+ desc=description(
772
+ """By default all partition coefficients used in
773
+ trace element calculations are constant. If
774
+ ALPHAMELTS_TRACE_VARIABLE_D is set then D =
775
+ D(P,T,X) are calculated for elements and phases
776
+ in Table 1. Constant partition coefficients will
777
+ be used for all other elements / phases. This
778
+ list may be modified in the trace_data_file, as
779
+ previously explained."""
780
+ ),
781
+ ),
782
+ "TS_TRACE_NORMALIZATION": mvar(
783
+ set=False,
784
+ type=int,
785
+ validator=typecast(
786
+ int, [lambda x: isinstance(x, int), lambda x: (x >= 1) & (x <= 4)]
787
+ ),
788
+ desc=description(
789
+ """If set, this chooses one of four
790
+ compositions to normalize trace elements to
791
+ (if any):
792
+ 1. PM Sun and McDonough [1989];
793
+ 2. DMM Workman and Hart [2005];
794
+ 3. PM McKenzie and O'Nions [1991; 1995];
795
+ 4. DM of McKenzie and O'Nions [1991; 1995].
796
+ Sample input files showing concentrations for
797
+ each of the idealized source compositions
798
+ above are provided as illustrations; note
799
+ that some elements (i.e. Ni, Cr, and Mn)
800
+ appear as major and trace elements because
801
+ their inclusion in the liquid calibration
802
+ differs between MELTS and pMELTS. Isotopes
803
+ are normalized to the ‘non-isotope’ abundance
804
+ (see the ‘MELTS file’ section). This option
805
+ is useful if the source composition given in
806
+ the melts_file is different from the four
807
+ options above. If you wish to normalize to
808
+ the source in the melts_file the simplest
809
+ thing is to provide the list of elements with
810
+ ‘1.0’ for each of the abundances (except
811
+ isotopes)."""
812
+ ),
813
+ ),
814
+ "TRACE_INPUT_FILE": mvar(
815
+ set=False,
816
+ desc=description(
817
+ """Gives the name of the trace_data_file, which may
818
+ be used to change partition coefficients, determine
819
+ whether variable partition coefficients are
820
+ calculated and with which parameters, as described
821
+ above."""
822
+ ),
823
+ ),
824
+ "TRACE_USELIQFEMG": mvar(
825
+ set=False,
826
+ type=bool,
827
+ desc=description(
828
+ """By default the Mg# of the melt, needed to
829
+ estimate D(P,T,X) for clinopyroxene, is estimated
830
+ from the clinopyroxene composition using Equation
831
+ 35 from Wood and Blundy [1997]). If this
832
+ environment variable is set then the Mg# of the
833
+ melt is taken directly from the (pH)MELTS
834
+ calculated liquid composition. If no liquid is
835
+ present then the program will revert to the default
836
+ behavior and use the clinopyroxene composition."""
837
+ ),
838
+ ),
839
+ # Input options
840
+ "ALPHAMELTS_ADIABAT_BIN_FILE": mvar(
841
+ set=False,
842
+ desc=description(
843
+ """Unavoidable changes within the
844
+ programs mean that binary restart_files
845
+ created with version 2.0+ of Adiabat_1ph
846
+ will not read into alphaMELTS. Once you
847
+ have read in the file, if you
848
+ immediately save it again it will be
849
+ updated to Adiabat_1ph 3.0 format.
850
+ Adiabat_1ph 3.0 format is compatible
851
+ with alphaMELTS 1.0+ so unset this
852
+ environment variable for subsequent
853
+ runs. For more details see
854
+ ADIABAT_V20_BIN_FILE in the
855
+ Adiabat_1ph 3 documentation."""
856
+ ),
857
+ ),
858
+ # Output options
859
+ "CELSIUS_OUTPUT": mvar(
860
+ set=False,
861
+ type=bool,
862
+ desc=description(
863
+ """By default, temperature input to alphaMELTS is in
864
+ °C, whereas temperature output is in Kelvin. When
865
+ this environment variable is set, text file and
866
+ screen output is also in °C."""
867
+ ),
868
+ ),
869
+ "SAVE_ALL": mvar(
870
+ set=False,
871
+ type=bool,
872
+ desc=description(
873
+ """By default, the main output file is only written for
874
+ calculations made in the most recent call to menu option 4.
875
+ If this variable is set then results from all calculations
876
+ are saved and output. This provides a simple way to record
877
+ single calculations (menu option 3) or to build up results
878
+ from multiple iterations or multiple melts_files. Note that
879
+ even if the appropriate environment variables are set, no
880
+ solid or liquid fractionation will occur until menu option
881
+ 4 is run. If using ‘Amoeba’ (menu option 17) the
882
+ ALPHAMELTS_SAVE_ALL function will be temporarily switched
883
+ off (so that iterations of the search algorithm are not
884
+ saved); when it is finished a single calculation (menu
885
+ option 3) may be used to write output for the best-fit
886
+ parental melt."""
887
+ ),
888
+ ),
889
+ "SKIP_FAILURE": mvar(
890
+ set=False,
891
+ type=bool,
892
+ desc=description(
893
+ """Normally failure of the minimization routines means
894
+ that the alphamelts executable must be restarted to
895
+ clear the memory. If this environment variable is set
896
+ then a copy of the thermodynamic state is made each
897
+ time a successful calculation is made. If the next
898
+ calculation fails, this last good state (or the bulk
899
+ composition and starting conditions from the
900
+ melts_file, if it is the first calculation) is used
901
+ for subsequent attempts. This may be useful if you are
902
+ very close to a reaction when the algorithms may have
903
+ trouble deciding whether to add a phase to the
904
+ assemblage and need to overstep just slightly. It is
905
+ also helpful when trying out starting solutions using
906
+ options 2 and 3. If ALPHAMELTS_SAVE_ALL is also set,
907
+ the last good state will also be written to the output
908
+ files as a placeholder; it should be obvious that this
909
+ represents a skipped failure as all values, including
910
+ pressure and temperature, will be identical to the
911
+ previous output.."""
912
+ ),
913
+ ),
914
+ "FAILED_ITER_PATIENCE": mvar(
915
+ default=10,
916
+ type=int,
917
+ validator=typecast(
918
+ int, [lambda x: isinstance(x, int), lambda x: (x >= 0) & (x <= 10)]
919
+ ),
920
+ desc=description(
921
+ """If the minimization routines do not recover
922
+ in the next few iterations then one drawback of
923
+ ALPHAMELTS_SKIP_FAILURE is that it can lead to
924
+ infinite loops of failure or, if triggered
925
+ repeatedly, eventually to a segmentation fault.
926
+ If ALPHAMELTS_SKIP_FAILURE is set, this
927
+ variable is the maximum number of consecutive
928
+ failed iterations that alphaMELTS will run
929
+ before a clean return to the menu where
930
+ parameters, such as the choice of fO2 buffer,
931
+ can be adjusted or alphaMELTS completely
932
+ restarted. If running in PTgrid or TPgrid
933
+ modes, it will be the maximum number of failed
934
+ iterations before alpahMELTS moves to the next
935
+ internal loop (T-loop or P-loop
936
+ respectively)."""
937
+ ),
938
+ ),
939
+ "INTEGRATE_FILE": mvar(
940
+ set=False,
941
+ type=bool,
942
+ desc=description(
943
+ """Normally the integrated_output_file can be written
944
+ immediately after execution finishes, but if
945
+ alphamelts tends to crash before the menu option 16
946
+ can be called then memory contents will be lost. As a
947
+ precaution, ALPHAMELTS_INTEGRATE_FILE should be set
948
+ to record details of the packets of melt extracted
949
+ during melting to a file. If run_alphamelts.command
950
+ is restarted with the same settings and menu option
951
+ 16 is called before execution then the resulting file
952
+ will be used as input for the melt integration. Note
953
+ that ALPHAMELTS_INTEGRATE_FILE is not the
954
+ integrated_output_file itself but an intermediate
955
+ file that may be used in its generation."""
956
+ ),
957
+ ),
958
+ "LATENT_HEAT": mvar(
959
+ set=False,
960
+ type=bool,
961
+ desc=description(
962
+ """Normally text file output is done just after
963
+ equilibration and before any fractionation. If
964
+ ALPHAMELTS_LATENT_HEAT to set to ‘true’ alphamelts will
965
+ also output the state just after fractionation and just
966
+ before the next equilibration (when the temperature has
967
+ been lowered and the system cooled but not allowed to
968
+ crystallise any more yet). This gives a simple way to
969
+ calculate the latent heat of crystallization, without
970
+ having to do the cooling adjustment described in Ghiorso
971
+ [1997]. Note that, for the same MORB composition, the
972
+ results will differ from Figure 5 of Ghiorso [1997].
973
+ This apparent discrepancy is due to changes in the MELTS
974
+ software since it was first released and not to
975
+ differences in how the variation in latent heat is
976
+ accessed."""
977
+ ),
978
+ ),
979
+ "QUICK_OUTPUT": mvar(
980
+ set=False,
981
+ type=bool,
982
+ desc=description(
983
+ """If this environment variable is set then
984
+ equilibrated thermodynamic states from previous
985
+ calculations are not saved, except as required for
986
+ ALPHAMELTS_SKIP_FAILURE etc. For calculations
987
+ comprising a large number of iterations, such as those
988
+ on a closely spaced P-T grid, setting this variable can
989
+ significantly reduce memory usage and therefore
990
+ increase computational speed as the calculation
991
+ proceeds. Reporting of fO2 will be affected slightly.
992
+ The Phase_mass_tbl.txt and Phase_vol_tbl.txt files will
993
+ not be written, which will cause
994
+ run_alphamelts.command to issue a warning about not
995
+ being able to find these files; the warning can be
996
+ safely ignored."""
997
+ ),
998
+ ),
999
+ # Others
1000
+ "MULTIPLE_LIQUIDS": mvar(
1001
+ set=False,
1002
+ type=bool,
1003
+ desc=description(
1004
+ """This turns on exsolution of immiscible liquids. The
1005
+ solvi are not very well determined, and we do not
1006
+ recommend serious use of this feature, but in some
1007
+ cases operation inside an unrecognized two-liquid field
1008
+ can lead to path-dependent non-unique equilibria. This
1009
+ option should not be used if trace element calculations
1010
+ are enabled."""
1011
+ ),
1012
+ ),
1013
+ "FRACTIONATE_SECOND_LIQUID": mvar(
1014
+ set=False,
1015
+ type=bool,
1016
+ desc=description(
1017
+ """When running with
1018
+ ALPHAMELTS_MULTIPLE_LIQUIDS set, treat all
1019
+ liquids except the first as fractionating
1020
+ phases and remove them from the system
1021
+ after each equilibration."""
1022
+ ),
1023
+ ),
1024
+ "FOCUS": mvar(
1025
+ set=False,
1026
+ type=bool,
1027
+ desc=description(
1028
+ """Option to do the focusing calculation described in Asimow
1029
+ and Stolper [1999]. It works by multiplying the mass of liquid
1030
+ in system by a fixed factor after each equilibration."""
1031
+ ),
1032
+ ),
1033
+ "FOCUS_FACTOR": mvar(
1034
+ set=False,
1035
+ type=float,
1036
+ validator=typecast(float, numeric_validator),
1037
+ desc=description(
1038
+ """When ALPHAMELTS_FOCUS is set, this determines the
1039
+ multiplication factor for the mass of liquid. Usually
1040
+ it will be a number slightly greater than unity, like
1041
+ the 100th root of 2. If ALPHAMELTS_FOCUS is set without
1042
+ a value in ALPHAMELTS_FOCUS_FACTOR the focusing
1043
+ calculation loop will be ignored."""
1044
+ ),
1045
+ ),
1046
+ "INTEGRATE_PHI": mvar(
1047
+ set=False,
1048
+ type=bool,
1049
+ desc=description(
1050
+ """Normally, packets of extracted melt are saved in
1051
+ memory (and, optionally, written out to the
1052
+ ALPHAMELTS_INTEGRATE_FILE ‘crash’ file, described
1053
+ above) by mass i.e. in terms of dF. If this variable
1054
+ is set then the packets of extracted melt will be
1055
+ saved by volume i.e. in terms of dPhi. As the full
1056
+ pressure integral (calculation of crustal thickness
1057
+ etc.) is not strictly correct for increments in Phi,
1058
+ that option will not be offered. However, the
1059
+ opportunity to interpolate for equal increments of
1060
+ melt fraction by volume will be available."""
1061
+ ),
1062
+ ),
1063
+ }