[cig-commits] [commit] master: Added site fraction test (1c6cf41)

cig_noreply at geodynamics.org cig_noreply at geodynamics.org
Fri Dec 12 21:32:59 PST 2014


Repository : https://github.com/geodynamics/burnman

On branch  : master
Link       : https://github.com/geodynamics/burnman/compare/881b878da7bd7228b4e714d9d10c4a75c876efb6...7c010ac6610ee014aabcb76a2a4f667a06a8e7f7

>---------------------------------------------------------------

commit 1c6cf410fba27b2610060d2ab1cb8cb96d0886ab
Author: Bob Myhill <myhill.bob at gmail.com>
Date:   Fri Dec 12 21:02:17 2014 -0800

    Added site fraction test


>---------------------------------------------------------------

1c6cf410fba27b2610060d2ab1cb8cb96d0886ab
 burnman/test_solidsolution_parsing.py | 76 -----------------------------------
 tests/test_solidsolution.py           | 26 ++++++++++++
 2 files changed, 26 insertions(+), 76 deletions(-)

diff --git a/burnman/test_solidsolution_parsing.py b/burnman/test_solidsolution_parsing.py
deleted file mode 100644
index 28af132..0000000
--- a/burnman/test_solidsolution_parsing.py
+++ /dev/null
@@ -1,76 +0,0 @@
-# BurnMan - a lower mantle toolkit
-# Copyright (C) 2012-2014, Myhill, R., Heister, T., Unterborn, C., Rose, I. and Cottaar, S.
-# Released under GPL v2 or later.
-
-# This is a test script which is the precursor to implementing a solid solution BaseClass.
-
-
-'''
-# Inputs
-Solid solution model
-Endmember proportions
-P,T
-
-# Things we can initialise without endmember proportions
-n_sites
-n_occupancies
-n_endmembers
-alpha
-Wh, Ws, Wv
-site_occupancies
-site_multiplicities
-
-# Endmember proportions needed
-phi
-ideal activities
-occupancies
-
-# P, T needed
-Wtotal / nonideal contribution to gibbs
-'''
-
-import re
-import numpy as np
-from fractions import Fraction
-from processchemistry import ProcessSolidSolutionChemistry
-
-# Endmembers
-base_material = [['pyrope()',    '[Mg]3[Al]2Si3O12',         1.0], \
-                 ['almandine()', '[Fe]3[Al]2Si3O12',         1.0], \
-                 ['grossular()', '[Ca]3[Al]2Si3O12',         2.7], \
-                 ['majorite()',  '[Mg]3[Mg1/2Si1/2]2Si3O12', 1.0]]
-
-n_endmembers=len(base_material)
-
-# Interaction parameters
-excess_enthalpy=[[2.5e3, 30.1e3, 15e3],[10e3,18e3],[48e3]]
-excess_entropy=[[0., 0., 0.],[0., 0.],[0.]]
-excess_volume=[[0., 0.164e-5, 0.],[0., 0.],[0.]]
-interaction_parameter=[excess_enthalpy,excess_entropy,excess_volume]
-
-
-# INPUT PROPORTIONS
-molar_fraction = np.array([ 0.5, 0.2, 0.1, 0.2 ])
-
-
-print 'Garnet'
-solution_formulae, n_sites, sites, n_occupancies, endmember_occupancies, site_multiplicities = ProcessSolidSolutionChemistry([base_material[i][1] for i in range(len(base_material))])
-
-
-print solution_formulae
-print n_sites
-print n_occupancies
-print sites
-print endmember_occupancies
-print site_multiplicities 
-print ''
-
-print 'Diopside - Ca-tschermaks molecule'
-solution_formulae, n_sites, sites, n_occupancies, endmember_occupancies, site_multiplicities = ProcessSolidSolutionChemistry(['[Ca][Mg][Si]2O6', '[Ca][Al][Si1/2Al1/2]2O6'])
-
-print solution_formulae
-print n_sites
-print n_occupancies
-print sites
-print endmember_occupancies
-print site_multiplicities 
diff --git a/tests/test_solidsolution.py b/tests/test_solidsolution.py
index a123db9..5580489 100644
--- a/tests/test_solidsolution.py
+++ b/tests/test_solidsolution.py
@@ -105,7 +105,18 @@ class orthopyroxene(burnman.SolidSolution):
         burnman.SolidSolution.__init__(self, base_material, \
                           burnman.solutionmodel.SymmetricRegularSolution(base_material, enthalpy_interaction) )
 
+# Three-endmember, two site solid solution
+class two_site_ss(burnman.SolidSolution):
+    def __init__(self):
+        # Name
+        self.name='two_site_ss'
+
+        # Endmembers (symmetric)
+        base_material = [[forsterite(), '[Mg]3[Al]2Si3O12'],[forsterite(), '[Fe]3[Al]2Si3O12'],[forsterite(), '[Mg]3[Mg1/2Si1/2]2Si3O12']]
+        # Interaction parameters
+        enthalpy_interaction=[[0.0, 0.0],[0.0]]
 
+        burnman.SolidSolution.__init__(self, base_material, burnman.solutionmodel.SymmetricRegularSolution(base_material, enthalpy_interaction) )
 
 
 class test_solidsolution(BurnManTest):
@@ -172,8 +183,23 @@ class test_solidsolution(BurnManTest):
     def test_order_disorder(self):
         opx = orthopyroxene()
         opx.set_composition( np.array([0.0, 1.0]) )
+        opx.set_state(1.e5,300.)
         self.assertArraysAlmostEqual([opx.excess_gibbs], [0.])
 
+    def test_site_totals(self):
+        ss=two_site_ss()
+        ss.set_composition([0.3,0.3,0.4])
+        ss.set_state(1.e5,300.)
+
+        site_fractions=np.dot(ss.molar_fraction, ss.solution_model.endmember_occupancies)
+        i=0
+        site_fill=[]
+        ones=[1.] * ss.solution_model.n_sites
+        for site in ss.solution_model.sites:
+            site_fill.append(sum(site_fractions[i:i+len(site)]))
+            i += len(site)
+
+        self.assertArraysAlmostEqual(site_fill, ones)
 
 if __name__ == '__main__':
     unittest.main()



More information about the CIG-COMMITS mailing list