[cig-commits] [commit] add_gibbs_energy: Bug fixes (a743951)
cig_noreply at geodynamics.org
cig_noreply at geodynamics.org
Thu Dec 11 17:11:33 PST 2014
Repository : https://github.com/geodynamics/burnman
On branch : add_gibbs_energy
Link : https://github.com/geodynamics/burnman/compare/0000000000000000000000000000000000000000...2148b324d3e8aa7b527f831eb397590942563008
>---------------------------------------------------------------
commit a743951a9f89d7b06cd1b6a0aa3670252ccab6c9
Author: Bob Myhill <myhill.bob at gmail.com>
Date: Wed Sep 3 00:38:27 2014 +0200
Bug fixes
>---------------------------------------------------------------
a743951a9f89d7b06cd1b6a0aa3670252ccab6c9
burnman/processchemistry.py | 37 +++++++++++++++++++----------------
burnman/test_solidsolution_parsing.py | 12 +++++++++++-
2 files changed, 31 insertions(+), 18 deletions(-)
diff --git a/burnman/processchemistry.py b/burnman/processchemistry.py
index bee88c5..00d9545 100644
--- a/burnman/processchemistry.py
+++ b/burnman/processchemistry.py
@@ -141,7 +141,6 @@ def ProcessSolidSolutionChemistry(formulae):
are repeated for each element on each site
"""
-
n_sites=formulae[0].count('[')
n_endmembers=len(formulae)
@@ -155,8 +154,6 @@ def ProcessSolidSolutionChemistry(formulae):
list_multiplicity=np.empty(shape=(n_sites))
n_occupancies=0
- s=re.split(r'\[', formulae[i])[1:]
-
# Number of unique site occupancies (e.g.. Mg on X etc.)
for endmember in range(n_endmembers):
solution_formula=dict()
@@ -164,25 +161,29 @@ def ProcessSolidSolutionChemistry(formulae):
s=re.split(r'\[', formulae[endmember])[1:]
for site in range(n_sites):
- site_occupancy=re.split(r'\]', s[site])[0]
- mult=re.split('[A-Z][^A-Z]*',re.split(r'\]', s[site])[1])[0]
- not_in_site=filter(None, re.split(r'\]', s[site]))[1]
- not_in_site=not_in_site.replace(mult, '', 1)
+ site_split=re.split(r'\]', s[site])
+ site_occupancy=site_split[0]
+
+ mult=re.split('[A-Z][^A-Z]*',site_split[1])[0]
if mult == '':
list_multiplicity[site]=1.0
else:
- list_multiplicity[site]=mult
+ list_multiplicity[site]=float(mult)
# Loop over elements on a site
elements=re.findall('[A-Z][^A-Z]*',site_occupancy)
+
for i in range(len(elements)):
- element_on_site=re.split('[0-9][^A-Z]*',elements[i])[0]
- proportion_element_on_site=re.findall('[0-9][^A-Z]*',elements[i])
- if len(proportion_element_on_site) == 0:
+
+ # Find the element and proportion on the site
+ element_split=re.split('([0-9][^A-Z]*)',elements[i])
+ element_on_site=element_split[0]
+ if len(element_split) == 1:
proportion_element_on_site=Fraction(1.0)
else:
- proportion_element_on_site=Fraction(proportion_element_on_site[0])
- solution_formula[element_on_site]=solution_formula.get(element_on_site, 0.0) + float(mult)*proportion_element_on_site
+ proportion_element_on_site=Fraction(element_split[1])
+
+ solution_formula[element_on_site]=solution_formula.get(element_on_site, 0.0) + list_multiplicity[site]*proportion_element_on_site
if element_on_site not in sites[site]:
n_occupancies=n_occupancies+1
@@ -194,10 +195,12 @@ def ProcessSolidSolutionChemistry(formulae):
element_index=sites[site].index(element_on_site)
list_occupancies[endmember][site][element_index]=proportion_element_on_site
- # Loop over elements not on a site
- for enamenumber in re.findall('[A-Z][^A-Z]*', not_in_site):
- element=filter(None, re.split(r'(\d+)', enamenumber))
- solution_formula[element[0]]=solution_formula.get(element[0], 0.0) + float(element[1])
+ if len(site_split) != 1:
+ not_in_site=filter(None, site_split[1])
+ not_in_site=not_in_site.replace(mult, '', 1)
+ for enamenumber in re.findall('[A-Z][^A-Z]*', not_in_site):
+ element=filter(None, re.split(r'(\d+)', enamenumber))
+ solution_formula[element[0]]=solution_formula.get(element[0], 0.0) + float(element[1])
solution_formulae.append(solution_formula)
diff --git a/burnman/test_solidsolution_parsing.py b/burnman/test_solidsolution_parsing.py
index ba7b863..28af132 100644
--- a/burnman/test_solidsolution_parsing.py
+++ b/burnman/test_solidsolution_parsing.py
@@ -53,7 +53,7 @@ interaction_parameter=[excess_enthalpy,excess_entropy,excess_volume]
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))])
@@ -63,4 +63,14 @@ 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
More information about the CIG-COMMITS
mailing list