[cig-commits] [commit] add_gibbs_energy: 3 more tests for solid solutions (aec027d)
cig_noreply at geodynamics.org
cig_noreply at geodynamics.org
Thu Dec 11 18:51:14 PST 2014
Repository : https://github.com/geodynamics/burnman
On branch : add_gibbs_energy
Link : https://github.com/geodynamics/burnman/compare/89647e0f4d8d7d6b54a88137195d88404e879b59...aec027da7d5d572abb177d12c6214e2a58bcbf99
>---------------------------------------------------------------
commit aec027da7d5d572abb177d12c6214e2a58bcbf99
Author: Bob Myhill <myhill.bob at gmail.com>
Date: Thu Dec 11 18:50:29 2014 -0800
3 more tests for solid solutions
>---------------------------------------------------------------
aec027da7d5d572abb177d12c6214e2a58bcbf99
tests/test_solidsolution.py | 92 ++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 91 insertions(+), 1 deletion(-)
diff --git a/tests/test_solidsolution.py b/tests/test_solidsolution.py
index 93328d1..be5ab2a 100644
--- a/tests/test_solidsolution.py
+++ b/tests/test_solidsolution.py
@@ -29,7 +29,27 @@ class forsterite (Mineral):
'molar_mass': formula_mass(formula, atomic_masses)}
Mineral.__init__(self)
-# Configurational entropy
+class fayalite (Mineral):
+ def __init__(self):
+ formula='Fe2.0Si1.0O4.0'
+ formula = dictionarize_formula(formula)
+ self.params = {
+ 'name': 'fa',
+ 'formula': formula,
+ 'equation_of_state': 'mtait',
+ 'H_0': -1477720.0 ,
+ 'S_0': 151.0 ,
+ 'V_0': 4.631e-05 ,
+ 'Cp': [201.1, 0.01733, -1960600.0, -900.9] ,
+ 'a_0': 2.82e-05 ,
+ 'K_0': 1.256e+11 ,
+ 'Kprime_0': 4.68 ,
+ 'Kdprime_0': -3.7e-11 ,
+ 'n': sum(formula.values()),
+ 'molar_mass': formula_mass(formula, atomic_masses)}
+ Mineral.__init__(self)
+
+# One-mineral solid solution
class forsterite_ss(burnman.SolidSolution):
def __init__(self):
# Name
@@ -43,6 +63,34 @@ class forsterite_ss(burnman.SolidSolution):
burnman.SolidSolution.__init__(self, base_material, \
burnman.solutionmodel.SymmetricRegularSolution(base_material, enthalpy_interaction) )
+# Two-mineral solid solution
+class forsterite_forsterite_ss(burnman.SolidSolution):
+ def __init__(self):
+ # Name
+ self.name='Fo-Fo solid solution'
+
+ base_material = [[forsterite(), '[Mg]2SiO4'], [forsterite(), '[Mg]2SiO4']]
+
+ # Interaction parameters
+ enthalpy_interaction=[[0.]]
+
+ burnman.SolidSolution.__init__(self, base_material, \
+ burnman.solutionmodel.SymmetricRegularSolution(base_material, enthalpy_interaction) )
+
+# Olivine solid solution
+class olivine_ss(burnman.SolidSolution):
+ def __init__(self):
+ # Name
+ self.name='Olivine'
+
+ base_material = [[forsterite(), '[Mg]2SiO4'], [fayalite(), '[Fe]2SiO4']]
+
+ # Interaction parameters
+ enthalpy_interaction=[[8.4e3]]
+
+ burnman.SolidSolution.__init__(self, base_material, \
+ burnman.solutionmodel.SymmetricRegularSolution(base_material, enthalpy_interaction) )
+
@@ -59,11 +107,53 @@ class test_solidsolution(BurnManTest):
fo_ss.set_state(P,T)
return fo, fo_ss
+
+ def setup_2min_ss(self):
+ P=1.e5
+ T=1000.
+ fo=forsterite()
+ fo.set_state(P,T)
+
+ fo_fo_ss=forsterite_forsterite_ss()
+ fo_fo_ss.set_composition([0.3, 0.7])
+ fo_fo_ss.set_state(P,T)
+ return fo, fo_fo_ss
+
+ def setup_ol_ss(self):
+ P=1.e5
+ T=1000.
+ fo=forsterite()
+ fo.set_state(P,T)
+
+ ol_ss=olivine_ss()
+ ol_ss.set_composition([1.0, 0.0])
+ ol_ss.set_state(P,T)
+ return fo, ol_ss
+
+
def test_1_gibbs(self):
fo, fo_ss = self.setup_1min_ss()
endmember_properties=[fo.gibbs, fo.H, fo.S, fo.V, fo.C_p, fo.C_v, fo.alpha, fo.K_T, fo.K_S, fo.gr]
ss_properties=[fo_ss.gibbs, fo_ss.H, fo_ss.S, fo_ss.V, fo_ss.C_p, fo_ss.C_v, fo_ss.alpha, fo_ss.K_T, fo_ss.K_S, fo_ss.gr]
self.assertArraysAlmostEqual(endmember_properties, ss_properties)
+ def test_2_gibbs(self):
+ fo, fo_ss = self.setup_2min_ss()
+ endmember_properties=[fo.gibbs, fo.H, fo.S, fo.V, fo.C_p, fo.C_v, fo.alpha, fo.K_T, fo.K_S, fo.gr]
+ ss_properties=[fo_ss.gibbs, fo_ss.H, fo_ss.S, fo_ss.V, fo_ss.C_p, fo_ss.C_v, fo_ss.alpha, fo_ss.K_T, fo_ss.K_S, fo_ss.gr]
+ self.assertArraysAlmostEqual(endmember_properties, ss_properties)
+
+ def test_ol_gibbs(self):
+ fo, fo_ss = self.setup_ol_ss()
+ endmember_properties=[fo.gibbs, fo.H, fo.S, fo.V, fo.C_p, fo.C_v, fo.alpha, fo.K_T, fo.K_S, fo.gr]
+ ss_properties=[fo_ss.gibbs, fo_ss.H, fo_ss.S, fo_ss.V, fo_ss.C_p, fo_ss.C_v, fo_ss.alpha, fo_ss.K_T, fo_ss.K_S, fo_ss.gr]
+ self.assertArraysAlmostEqual(endmember_properties, ss_properties)
+
+ def test_ol_Wh(self):
+ ol_ss=olivine_ss()
+ H_excess=ol_ss.solution_model.excess_enthalpy(1.e5, 1000., [0.5,0.5])
+ Wh=ol_ss.solution_model.Wh[0][1]
+ self.assertArraysAlmostEqual([Wh/4.0], [H_excess])
+
if __name__ == '__main__':
unittest.main()
More information about the CIG-COMMITS
mailing list