[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