[cig-commits] [commit] add_thermodynamic_potentials: Added H, S, V calculations to solidsolution.py (75e6b38)
cig_noreply at geodynamics.org
cig_noreply at geodynamics.org
Wed Dec 10 22:02:11 PST 2014
Repository : https://github.com/geodynamics/burnman
On branch : add_thermodynamic_potentials
Link : https://github.com/geodynamics/burnman/compare/16364559f0c2bd31629704786bfc9fb47bd7eb7d...75e6b38a066d025cf88a2602342cd6a355fb9861
>---------------------------------------------------------------
commit 75e6b38a066d025cf88a2602342cd6a355fb9861
Author: Bob Myhill <myhill.bob at gmail.com>
Date: Wed Dec 10 21:59:51 2014 -0800
Added H, S, V calculations to solidsolution.py
>---------------------------------------------------------------
75e6b38a066d025cf88a2602342cd6a355fb9861
burnman/solidsolution.py | 9 ++++++++-
burnman/solutionmodel.py | 20 ++++++++++++++------
2 files changed, 22 insertions(+), 7 deletions(-)
diff --git a/burnman/solidsolution.py b/burnman/solidsolution.py
index 3c488bc..c999cba 100644
--- a/burnman/solidsolution.py
+++ b/burnman/solidsolution.py
@@ -57,9 +57,16 @@ class SolidSolution(Mineral):
self.partial_gibbs = np.array([self.base_material[i][0].gibbs for i in range(self.n_endmembers)]) + self.excess_partial_gibbs
self.gibbs= sum([ self.base_material[i][0].gibbs * self.molar_fraction[i] for i in range(self.n_endmembers) ]) + self.excess_gibbs
+ self.excess_enthalpy = self.solution_model.excess_enthalpy( pressure, temperature, self.molar_fraction)
+ self.excess_entropy = self.solution_model.excess_entropy( pressure, temperature, self.molar_fraction)
self.excess_volume = self.solution_model.excess_volume( pressure, temperature, self.molar_fraction)
- self.V= sum([ self.base_material[i][0].V * self.molar_fraction[i] for i in range(self.n_endmembers) ]) + self.excess_volume
+ self.H = sum([ self.base_material[i][0].H * self.molar_fraction[i] for i in range(self.n_endmembers) ]) + self.excess_enthalpy
+ self.S = sum([ self.base_material[i][0].S * self.molar_fraction[i] for i in range(self.n_endmembers) ]) + self.excess_entropy
+ self.V = sum([ self.base_material[i][0].V * self.molar_fraction[i] for i in range(self.n_endmembers) ]) + self.excess_volume
+ self.C_p = sum([ self.base_material[i][0].V * self.molar_fraction[i] for i in range(self.n_endmembers) ])
+ #self.alpha =
+ #self.isothermal_bulk_modulus =
'''
diff --git a/burnman/solutionmodel.py b/burnman/solutionmodel.py
index a812b49..f00de6a 100644
--- a/burnman/solutionmodel.py
+++ b/burnman/solutionmodel.py
@@ -206,13 +206,16 @@ class AsymmetricRegularSolution ( IdealSolution ):
#initialize ideal solution model
IdealSolution.__init__(self, endmembers )
+ def _phi( self, molar_fractions):
+ phi=np.array([self.alpha[i]*molar_fractions[i] for i in range(self.n_endmembers)])
+ phi=np.divide(phi, np.sum(phi))
+ return phi
def _non_ideal_interactions( self, molar_fractions ):
# -sum(sum(qi.qj.Wij*)
# equation (2) of Holland and Powell 2003
- phi=np.array([self.alpha[i]*molar_fractions[i] for i in range(self.n_endmembers)])
- phi=np.divide(phi, np.sum(phi))
+ phi=_phi(molar_fractions)
q=np.zeros(len(molar_fractions))
Hint=np.zeros(len(molar_fractions))
@@ -240,14 +243,19 @@ class AsymmetricRegularSolution ( IdealSolution ):
return ideal_gibbs + non_ideal_gibbs
def excess_volume ( self, pressure, temperature, molar_fractions ):
-
- phi=np.array([self.alpha[i]*molar_fractions[i] for i in range(self.n_endmembers)])
- phi=np.divide(phi, np.sum(phi))
-
+ phi=_phi(molar_fractions)
V_excess=np.dot(self.alpha.T,molar_fractions)*np.dot(phi.T,np.dot(self.Wv,phi))
return V_excess
+ def excess_entropy( self, pressure, temperature, molar_fractions ):
+ phi=_phi(molar_fractions)
+ S_excess=np.dot(self.alpha.T,molar_fractions)*np.dot(phi.T,np.dot(self.Ws,phi))
+ return IdealSolution._ideal_excess_partial_gibbs (temperature, molar_fractions ) + S_excess
+ def excess_enthalpy( self, pressure, temperature, molar_fractions ):
+ phi=_phi(molar_fractions)
+ H_excess=np.dot(self.alpha.T,molar_fractions)*np.dot(phi.T,np.dot(self.Wh,phi))
+ return H_excess + pressure*self.excess_volume ( pressure, temperature, molar_fractions )
class SymmetricRegularSolution ( AsymmetricRegularSolution ):
"""
More information about the CIG-COMMITS
mailing list