[cig-commits] [commit] master: molar_fraction to molar_fractions (for consistency) (2990e1f)

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


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

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

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

commit 2990e1f46d8781580a322de25c19638cf4c89a13
Author: Bob Myhill <myhill.bob at gmail.com>
Date:   Fri Dec 12 21:00:48 2014 -0800

    molar_fraction to molar_fractions (for consistency)


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

2990e1f46d8781580a322de25c19638cf4c89a13
 burnman/solidsolution.py                    |  8 +--
 burnman/solutionmodel.py                    | 89 ++++++++++++++---------------
 misc/benchmarks/solidsolution_benchmarks.py | 17 +++---
 3 files changed, 55 insertions(+), 59 deletions(-)

diff --git a/burnman/solidsolution.py b/burnman/solidsolution.py
index 7dcc85e..cee8daf 100644
--- a/burnman/solidsolution.py
+++ b/burnman/solidsolution.py
@@ -98,8 +98,8 @@ class SolidSolution(Mineral):
             self.K_S = self.K_T*self.C_p/self.C_v
             self.gr = self.alpha*self.K_T*self.V/self.C_v     
 
-    def calcgibbs(self, pressure, temperature, molar_fractions): 
-        return sum([ self.base_material[i][0].calcgibbs(pressure, temperature) * molar_fractions[i] for i in range(self.n_endmembers) ]) + self.solution_model.excess_gibbs_free_energy( pressure, temperature, molar_fractions)
+    def calcgibbs(self, pressure, temperature, molar_fraction): 
+        return sum([ self.base_material[i][0].calcgibbs(pressure, temperature) * molar_fraction[i] for i in range(self.n_endmembers) ]) + self.solution_model.excess_gibbs_free_energy( pressure, temperature, molar_fraction)
 
-    def calcpartialgibbsexcesses(self, pressure, temperature, molar_fractions):
-        return self.solution_model.excess_partial_gibbs_free_energies(self, pressure, temperature, molar_fractions)
+    def calcpartialgibbsexcesses(self, pressure, temperature, molar_fraction):
+        return self.solution_model.excess_partial_gibbs_free_energies(self, pressure, temperature, molar_fraction)
diff --git a/burnman/solutionmodel.py b/burnman/solutionmodel.py
index e12dba3..30d4d5f 100644
--- a/burnman/solutionmodel.py
+++ b/burnman/solutionmodel.py
@@ -33,7 +33,7 @@ class SolutionModel(object):
         """
         pass
 
-    def excess_gibbs_free_energy( self, pressure, temperature, molar_fractions):
+    def excess_gibbs_free_energy( self, pressure, temperature, molar_fraction):
         """
         Given a list of molar fractions of different phases,
         compute the excess Gibbs free energy of the solution.
@@ -48,7 +48,7 @@ class SolutionModel(object):
         temperature : float
             Temperature at which to evaluate the solution. [K]
 
-        molar_fractions : list of floats
+        molar_fraction : list of floats
             List of molar fractions of the different endmembers in solution
 
         Returns
@@ -56,9 +56,9 @@ class SolutionModel(object):
         G_excess : float
             The excess Gibbs free energy
         """
-        return np.dot(np.array(molar_fractions), self.excess_partial_gibbs_free_energies( pressure, temperature, molar_fractions))
+        return np.dot(np.array(molar_fraction), self.excess_partial_gibbs_free_energies( pressure, temperature, molar_fraction))
 
-    def excess_partial_gibbs_free_energies( self, pressure, temperature, molar_fractions):
+    def excess_partial_gibbs_free_energies( self, pressure, temperature, molar_fraction):
         """
         Given a list of molar fractions of different phases,
         compute the excess Gibbs free energy for each endmember of the solution.
@@ -73,7 +73,7 @@ class SolutionModel(object):
         temperature : float
             Temperature at which to evaluate the solution. [K]
 
-        molar_fractions : list of floats
+        molar_fraction : list of floats
             List of molar fractions of the different endmembers in solution
 
         Returns
@@ -81,9 +81,9 @@ class SolutionModel(object):
         partial_G_excess : numpy array
             The excess Gibbs free energy of each endmember
         """
-        return np.empty_like( np.array(molar_fractions) )
+        return np.empty_like( np.array(molar_fraction) )
 
-    def excess_volume( self, pressure, temperature, molar_fractions):
+    def excess_volume( self, pressure, temperature, molar_fraction):
         """
         Given a list of molar fractions of different phases,
         compute the excess Gibbs free energy of the solution,
@@ -97,7 +97,7 @@ class SolutionModel(object):
         temperature : float
             Temperature at which to evaluate the solution. [K]
 
-        molar_fractions : list of floats
+        molar_fraction : list of floats
             List of molar fractions of the different endmembers in solution
 
         Returns
@@ -115,7 +115,6 @@ class IdealSolution (SolutionModel):
     entropy, all the other excess terms return zero.
     """
     def __init__(self, endmembers):
-
         self.n_endmembers = len(endmembers)
         self.formulas = [e[1] for e in endmembers]
 
@@ -125,8 +124,8 @@ class IdealSolution (SolutionModel):
 
         self._calculate_endmember_configurational_entropies()
 
-    def excess_partial_gibbs_free_energies( self, pressure, temperature, molar_fractions ):
-        return self._ideal_excess_partial_gibbs( temperature, molar_fractions )
+    def excess_partial_gibbs_free_energies( self, pressure, temperature, molar_fraction ):
+        return self._ideal_excess_partial_gibbs( temperature, molar_fraction )
 
     def _calculate_endmember_configurational_entropies( self ):
         self.endmember_configurational_entropies=np.zeros(shape=(self.n_endmembers))
@@ -137,11 +136,11 @@ class IdealSolution (SolutionModel):
                         self.endmember_configurational_entropies[idx] - \
                         constants.gas_constant*self.site_multiplicities[occ]*endmember_occupancy[occ]*np.log(endmember_occupancy[occ])
 
-    def _endmember_configurational_entropy_contribution(self, molar_fractions):
-        return np.dot(molar_fractions, self.endmember_configurational_entropies)
+    def _endmember_configurational_entropy_contribution(self, molar_fraction):
+        return np.dot(molar_fraction, self.endmember_configurational_entropies)
 
-    def _configurational_entropy (self, molar_fractions):
-        site_occupancies=np.dot(molar_fractions, self.endmember_occupancies)
+    def _configurational_entropy (self, molar_fraction):
+        site_occupancies=np.dot(molar_fraction, self.endmember_occupancies)
         conf_entropy=0
         for idx, occupancy in enumerate(site_occupancies):
             if occupancy > 1e-10:
@@ -150,11 +149,11 @@ class IdealSolution (SolutionModel):
         return conf_entropy
 
 
-    def _ideal_excess_partial_gibbs( self, temperature, molar_fractions ):
-        return  constants.gas_constant*temperature * self._log_ideal_activities(molar_fractions)
+    def _ideal_excess_partial_gibbs( self, temperature, molar_fraction ):
+        return  constants.gas_constant*temperature * self._log_ideal_activities(molar_fraction)
 
-    def _log_ideal_activities ( self, molar_fractions ):
-        site_occupancies=np.dot(molar_fractions, self.endmember_occupancies)
+    def _log_ideal_activities ( self, molar_fraction ):
+        site_occupancies=np.dot(molar_fraction, self.endmember_occupancies)
         lna=np.empty(shape=(self.n_endmembers))
 
         for e in range(self.n_endmembers):
@@ -167,8 +166,8 @@ class IdealSolution (SolutionModel):
             lna[e]=lna[e] + self.endmember_configurational_entropies[e]/constants.gas_constant
         return lna
 
-    def _ideal_activities ( self, molar_fractions ):
-        site_occupancies=np.dot(molar_fractions, self.endmember_occupancies)
+    def _ideal_activities ( self, molar_fraction ):
+        site_occupancies=np.dot(molar_fraction, self.endmember_occupancies)
         activities=np.empty(shape=(self.n_endmembers))
 
         for e in range(self.n_endmembers):
@@ -216,21 +215,21 @@ 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)])
+    def _phi( self, molar_fraction):
+        phi=np.array([self.alpha[i]*molar_fraction[i] for i in range(self.n_endmembers)])
         phi=np.divide(phi, np.sum(phi))
         return phi
 
-    def _non_ideal_interactions( self, molar_fractions ):
+    def _non_ideal_interactions( self, molar_fraction ):
         # -sum(sum(qi.qj.Wij*)
         # equation (2) of Holland and Powell 2003
 
-        phi=self._phi(molar_fractions)
+        phi=self._phi(molar_fraction)
 
-        q=np.zeros(len(molar_fractions))
-        Hint=np.zeros(len(molar_fractions))
-        Sint=np.zeros(len(molar_fractions))
-        Vint=np.zeros(len(molar_fractions))
+        q=np.zeros(len(molar_fraction))
+        Hint=np.zeros(len(molar_fraction))
+        Sint=np.zeros(len(molar_fraction))
+        Vint=np.zeros(len(molar_fraction))
 
         for l in range(self.n_endmembers):
             q=np.array([kd(i,l)-phi[i] for i in range(self.n_endmembers)])
@@ -241,32 +240,32 @@ class AsymmetricRegularSolution (IdealSolution):
      
         return Hint, Sint, Vint
 
-    def _non_ideal_excess_partial_gibbs( self, pressure, temperature, molar_fractions) :
+    def _non_ideal_excess_partial_gibbs( self, pressure, temperature, molar_fraction) :
 
-        Hint, Sint, Vint = self._non_ideal_interactions( molar_fractions )
+        Hint, Sint, Vint = self._non_ideal_interactions( molar_fraction )
         return Hint - temperature*Sint + pressure*Vint
 
-    def excess_partial_gibbs_free_energies( self, pressure, temperature, molar_fractions ):
+    def excess_partial_gibbs_free_energies( self, pressure, temperature, molar_fraction ):
 
-        ideal_gibbs = IdealSolution._ideal_excess_partial_gibbs (self, temperature, molar_fractions )
-        non_ideal_gibbs = self._non_ideal_excess_partial_gibbs(pressure, temperature, molar_fractions)
+        ideal_gibbs = IdealSolution._ideal_excess_partial_gibbs (self, temperature, molar_fraction )
+        non_ideal_gibbs = self._non_ideal_excess_partial_gibbs(pressure, temperature, molar_fraction)
         return ideal_gibbs + non_ideal_gibbs
 
-    def excess_volume ( self, pressure, temperature, molar_fractions ):
-        phi=self._phi(molar_fractions)
-        V_excess=np.dot(self.alpha.T,molar_fractions)*np.dot(phi.T,np.dot(self.Wv,phi))
+    def excess_volume ( self, pressure, temperature, molar_fraction ):
+        phi=self._phi(molar_fraction)
+        V_excess=np.dot(self.alpha.T,molar_fraction)*np.dot(phi.T,np.dot(self.Wv,phi))
         return V_excess
 
-    def excess_entropy( self, pressure, temperature, molar_fractions ):
-        phi=self._phi(molar_fractions)
-        S_conf=np.dot(IdealSolution._ideal_excess_partial_gibbs(self, temperature, molar_fractions),molar_fractions)
-        S_excess=np.dot(self.alpha.T,molar_fractions)*np.dot(phi.T,np.dot(self.Ws,phi))
+    def excess_entropy( self, pressure, temperature, molar_fraction ):
+        phi=self._phi(molar_fraction)
+        S_conf=np.dot(IdealSolution._ideal_excess_partial_gibbs(self, temperature, molar_fraction),molar_fraction)
+        S_excess=np.dot(self.alpha.T,molar_fraction)*np.dot(phi.T,np.dot(self.Ws,phi))
         return S_conf + S_excess
 
-    def excess_enthalpy( self, pressure, temperature, molar_fractions ):
-        phi=self._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 )
+    def excess_enthalpy( self, pressure, temperature, molar_fraction ):
+        phi=self._phi(molar_fraction)
+        H_excess=np.dot(self.alpha.T,molar_fraction)*np.dot(phi.T,np.dot(self.Wh,phi))
+        return H_excess + pressure*self.excess_volume ( pressure, temperature, molar_fraction )
 
 
 class SymmetricRegularSolution (AsymmetricRegularSolution):
diff --git a/misc/benchmarks/solidsolution_benchmarks.py b/misc/benchmarks/solidsolution_benchmarks.py
index 21c2986..65ec5b9 100644
--- a/misc/benchmarks/solidsolution_benchmarks.py
+++ b/misc/benchmarks/solidsolution_benchmarks.py
@@ -13,8 +13,6 @@ import matplotlib.image as mpimg
 atomic_masses=read_masses()
 
 
-
-
 '''
 Solvus shapes (a proxy for Gibbs free energy checking
 '''
@@ -54,10 +52,10 @@ sp=o_d_spinel()
 sp_entropies = np.empty_like(comp)
 sp_entropies_NK1967= np.empty_like(comp)
 for i,c in enumerate(comp):
-        molar_fractions=[1.0-c, c]
-        sp.set_composition( np.array(molar_fractions) )
+        molar_fraction=[1.0-c, c]
+        sp.set_composition( np.array(molar_fraction) )
         sp.set_state( 1e5, 298.15 )
-        sp_entropies[i] = sp.solution_model._configurational_entropy( molar_fractions )
+        sp_entropies[i] = sp.solution_model._configurational_entropy( molar_fraction )
         sp_entropies_NK1967[i] = -8.3145*(c*np.log(c) + (1.-c)*np.log(1.-c) + c*np.log(c/2.) + (2.-c)*np.log(1.-c/2.)) # eq. 7 in Navrotsky and Kleppa, 1967.
 
 #fig1 = mpimg.imread('configurational_entropy.png')  # Uncomment these two lines if you want to overlay the plot on a screengrab from SLB2011
@@ -134,11 +132,10 @@ opx_models=[orthopyroxene_red(), orthopyroxene_blue(), orthopyroxene_long_dashed
 opx_entropies = [ np.empty_like(comp) for model in opx_models ]
 for idx, model in enumerate(opx_models):
     for i,c in enumerate(comp):
-        molar_fractions=[1.0-c, c]
-        model.set_composition( np.array(molar_fractions) )
-        model.set_state( 0., 0. )
-        opx_entropies[idx][i] = model.solution_model._configurational_entropy( molar_fractions )
-
+        molar_fraction=[1.0-c, c]
+        model.set_composition(np.array(molar_fraction))
+        model.set_state(0., 0.)
+        opx_entropies[idx][i] = model.solution_model._configurational_entropy(molar_fraction)
 
 fig1 = mpimg.imread('configurational_entropy.png')  # Uncomment these two lines if you want to overlay the plot on a screengrab from SLB2011
 plt.imshow(fig1, extent=[0.0, 1.0,0.,17.0], aspect='auto')



More information about the CIG-COMMITS mailing list