[cig-commits] [commit] add_thermodynamic_potentials: Added non-ideal contribution to solidsolution test file (0540640)
cig_noreply at geodynamics.org
cig_noreply at geodynamics.org
Tue Dec 9 09:53:49 PST 2014
Repository : https://github.com/geodynamics/burnman
On branch : add_thermodynamic_potentials
Link : https://github.com/geodynamics/burnman/compare/2e5646d93cedbbf8eae54cc37cffc14e0aa85180...d5ddad03ff9f30f5a4efaddb4e3ec585ea1a7c51
>---------------------------------------------------------------
commit 054064030e8831d57b05660f64ce1772aa0312d6
Author: Bob Myhill <myhill.bob at gmail.com>
Date: Fri Aug 29 22:09:39 2014 +0200
Added non-ideal contribution to solidsolution test file
>---------------------------------------------------------------
054064030e8831d57b05660f64ce1772aa0312d6
burnman/test_process_solidsolution.py | 40 +++++++++++++++++++++++++++--------
1 file changed, 31 insertions(+), 9 deletions(-)
diff --git a/burnman/test_process_solidsolution.py b/burnman/test_process_solidsolution.py
index 978136b..55a6b61 100644
--- a/burnman/test_process_solidsolution.py
+++ b/burnman/test_process_solidsolution.py
@@ -14,10 +14,12 @@ base_material = [['pyrope()', '[Mg]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, 29.1e3, 15e3][10e3,18e3][48e3]]
-excess_entropy=[[0., 0., 0.][0., 0.][0.]]
-excess_volume=[[0., 0., 0.][0., 0.][0.]]
+excess_enthalpy=[[2.5e3, 29.1e3, 15e3],[10e3,18e3],[48e3]]
+excess_entropy=[[0., 0., 0.],[0., 0.],[0.]]
+excess_volume=[[0., 0., 0.],[0., 0.],[0.]]
interaction_parameter=[excess_enthalpy,excess_entropy,excess_volume]
@@ -38,7 +40,7 @@ sites=[[] for i in range(nsites)]
site_occupancies=[]
site_multiplicity=np.empty(shape=(nsites))
n_elements=0
-for endmember in range(len(base_material)):
+for endmember in range(n_endmembers):
site_occupancies.append([[0]*len(sites[site]) for site in range(nsites)])
s=re.split(r'\[', base_material[endmember][1])[1:]
for site in range(nsites):
@@ -69,9 +71,9 @@ for endmember in range(len(base_material)):
-array_occupancies=np.empty(shape=(len(base_material),n_elements))
+array_occupancies=np.empty(shape=(n_endmembers,n_elements))
array_multiplicities=np.empty(shape=(n_elements))
-for endmember in range(len(base_material)):
+for endmember in range(n_endmembers):
n_element=0
for site in range(nsites):
for element in range(len(site_occupancies[endmember][site])):
@@ -90,8 +92,8 @@ print ''
# Ideal activities
-ideal_activity=np.empty(shape=(len(base_material)))
-for endmember in range(len(base_material)):
+ideal_activity=np.empty(shape=(n_endmembers))
+for endmember in range(n_endmembers):
ideal_activity[endmember]=1.0
normalisation_constant=1.0
for element in range(n_elements):
@@ -106,4 +108,24 @@ print 'Ideal activities'
print ideal_activity
# Non ideal activities
-# STILL TO DO
+# alpha^T*p*(phi^T*W*phi)
+
+alpha=np.empty(shape=(n_endmembers))
+phi=np.empty(shape=(n_endmembers))
+for i in range(n_endmembers):
+ alpha[i]=base_material[i][2]
+ phi[i]=alpha[i]*endmember_proportions[i]
+phi=np.divide(phi, np.sum(phi))
+
+Wh=np.zeros(shape=(n_endmembers,n_endmembers))
+Ws=np.zeros(shape=(n_endmembers,n_endmembers))
+Wv=np.zeros(shape=(n_endmembers,n_endmembers))
+for i in range(n_endmembers):
+ for j in range(i+1, n_endmembers):
+ Wh[i][j]=2*excess_enthalpy[i][j-i-1]/(alpha[i]+alpha[j])
+ Ws[i][j]=2*excess_entropy[i][j-i-1]/(alpha[i]+alpha[j])
+ Wv[i][j]=2*excess_volume[i][j-i-1]/(alpha[i]+alpha[j])
+
+print ''
+print 'Nonideal contribution to gibbs'
+print np.dot(alpha.T,endmember_proportions)*np.dot(phi.T,np.dot(Wh,phi))
More information about the CIG-COMMITS
mailing list