[cig-commits] [commit] add_thermodynamic_potentials: Updated chemical potential processing to accept solid solutions (2547bee)
cig_noreply at geodynamics.org
cig_noreply at geodynamics.org
Tue Nov 11 13:01:12 PST 2014
Repository : https://github.com/geodynamics/burnman
On branch : add_thermodynamic_potentials
Link : https://github.com/geodynamics/burnman/compare/f9a1e215ff875e89f69b5e717b85d9af5d44e93b...83c31a2149ddfb6f77c6a72fb5cf3eef08996a42
>---------------------------------------------------------------
commit 2547bee82c10c9f43780a62d2afb28efb9cdb8fd
Author: Bob Myhill <myhill.bob at gmail.com>
Date: Tue Nov 11 22:06:06 2014 +0100
Updated chemical potential processing to accept solid solutions
>---------------------------------------------------------------
2547bee82c10c9f43780a62d2afb28efb9cdb8fd
burnman/chemicalpotentials.py | 37 +++++++++++++++++++++++++++----------
burnman/solidsolution.py | 1 -
2 files changed, 27 insertions(+), 11 deletions(-)
diff --git a/burnman/chemicalpotentials.py b/burnman/chemicalpotentials.py
index fb57d96..89ab1fc 100644
--- a/burnman/chemicalpotentials.py
+++ b/burnman/chemicalpotentials.py
@@ -30,6 +30,7 @@ def chemicalpotentials(assemblage, component_formulae):
assemblage : list of classes
List of material classes
set_method and set_state should already have been used
+ the composition of the solid solutions should also have been set
component_formulae : list of dictionaries
List of chemical component formula dictionaries
@@ -41,25 +42,41 @@ def chemicalpotentials(assemblage, component_formulae):
Array of chemical potentials of components
"""
- mineral_gibbs=[mineral.gibbs for mineral in assemblage]
- mineral_formulae=[mineral.params['formula'] for mineral in assemblage]
- mineral_compositions, elements=compositional_array(mineral_formulae)
-
- pl, u = lu(mineral_compositions, permute_l=True)
+ # Split solid solutions into their respective endmembers
+ # Find the chemical potentials of all the endmembers
+ endmember_list=[]
+ endmember_potentials=[]
+ for mineral in assemblage:
+ if isinstance(mineral, burnman.SolidSolution):
+ for member in mineral.base_material:
+ endmember_list.append(member[0])
+ for potential in mineral.partial_gibbs:
+ endmember_potentials.append(potential)
+ else:
+ endmember_list.append(mineral)
+ endmember_potentials.append(mineral.gibbs)
+
+ # Make an array of all the endmember formulae
+ endmember_formulae=[endmember.params['formula'] for endmember in endmember_list]
+ endmember_compositions, elements=compositional_array(endmember_formulae)
+
+ pl, u = lu(endmember_compositions, permute_l=True)
assert(min(np.dot(np.square(u), np.ones(shape=len(elements)))) > 1e-6), \
- 'Mineral compositions do not form an independent set of basis vectors'
+ 'Endmember compositions do not form an independent set of basis vectors'
+ # Make an array of component formulae with elements in the same order as the endmember array
component_compositions=ordered_compositional_array(component_formulae, elements)
- p=np.linalg.lstsq(mineral_compositions.T,component_compositions.T)
+ p=np.linalg.lstsq(endmember_compositions.T,component_compositions.T)
for idx, error in enumerate(p[1]):
assert (error < 1e-10), \
'Component %d not defined by prescribed assemblage' % (idx+1)
- mineral_proportions=np.around(p[0],10).T
-
- component_potentials=np.dot(mineral_proportions, mineral_gibbs)
+ # Create an array of endmember proportions which sum to each component composition
+ endmember_proportions=np.around(p[0],10).T
+ # Calculate the chemical potential of each component
+ component_potentials=np.dot(endmember_proportions, endmember_potentials)
return component_potentials
def fugacity(component_formula, standard_material, assemblage):
diff --git a/burnman/solidsolution.py b/burnman/solidsolution.py
index 6297db6..80c864f 100644
--- a/burnman/solidsolution.py
+++ b/burnman/solidsolution.py
@@ -60,7 +60,6 @@ class SolidSolution(Mineral):
self.V= sum([ self.base_material[i][0].V * self.molar_fraction[i] for i in range(self.n_endmembers) ]) + self.excess_volume
-
'''
for prop in self.base_materials[0].params:
try:
More information about the CIG-COMMITS
mailing list