[cig-commits] [commit] inversion: Added enstpyro inversion. (7bc430a)

cig_noreply at geodynamics.org cig_noreply at geodynamics.org
Sun Dec 14 23:06:51 PST 2014


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

On branch  : inversion
Link       : https://github.com/geodynamics/burnman/compare/e9242b52d6d1ba1cf4d512e6e2c72ba57cc7f26d...7bc430a906d812a68acb26ac2ff6cbe3336644d4

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

commit 7bc430a906d812a68acb26ac2ff6cbe3336644d4
Author: Cayman Unterborn <kmanunterborn at gmail.com>
Date:   Sun Dec 14 23:05:43 2014 -0800

    Added enstpyro inversion.


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

7bc430a906d812a68acb26ac2ff6cbe3336644d4
 inversion/realdata_enstpyro.py | 33 ++++++++++++++++++++++-----------
 1 file changed, 22 insertions(+), 11 deletions(-)

diff --git a/inversion/realdata_enstpyro.py b/inversion/realdata_enstpyro.py
index e46af5a..06af634 100644
--- a/inversion/realdata_enstpyro.py
+++ b/inversion/realdata_enstpyro.py
@@ -18,7 +18,7 @@ if not os.path.exists('burnman') and os.path.exists('../burnman'):
 import burnman
 from burnman import minerals
 
-number_of_points = 5 #set on how many depth slices the computations should be done
+number_of_points = 10 #set on how many depth slices the computations should be done
 
 
 
@@ -28,6 +28,10 @@ Kd_0 = .5
 weight_percents_enst = {'Mg':0.213, 'Fe': 0.0721, 'Si':0.242, 'Ca':0., 'Al':0.}
 weight_percents_pyro = {'Mg':0.228, 'Fe': 0.0626, 'Si':0.21, 'Ca':0., 'Al':0.}
 
+minerals.SLB_2005.mg_fe_perovskite_pt_dependent.method = ('slb3')
+minerals.SLB_2005.ferropericlase_pt_dependent.method = ('slb3')
+
+
 phase_fractions_pyro,relative_molar_percent_pyro = burnman.calculate_phase_percents(weight_percents_pyro)
 phase_fractions_enst,relative_molar_percent_enst = burnman.calculate_phase_percents(weight_percents_enst)
 
@@ -91,8 +95,7 @@ print "preparations done"
 
 
 # Priors on unknown parameters:
-fraction_pyro = pymc.Uniform('fraction_pv', 0.0, 1.0)
-T0 = pymc.Normal('T0',mu=1500.,tau=1./500.)
+fraction_pyro = pymc.Uniform('fraction_pyro', 0.0, 1.0)
 def calc_all_velocities(fraction_pyro):
         method = 'slb3' #slb3|slb2|mgd3|mgd2
         rock = burnman.Composite( [fraction_pyro, 1.0-fraction_pyro],[ pyrolite,enstatite ] )
@@ -119,7 +122,7 @@ def nrmse(funca,funcb):
 
 def error(fraction_pyro):
     if True:
-        if fraction_pyro>0. and fraction_pyro<1.0:
+        if fraction_pyro>=0. and fraction_pyro<=1.0:
             mat_vp, mat_vs, mat_rho, mat_vphi, mat_K, mat_G = calc_all_velocities(fraction_pyro)
 
             misfit = nrmse(mat_rho,seis_rho)+nrmse(mat_K,seis_K)+nrmse(mat_G,seis_G)
@@ -141,7 +144,7 @@ def calc_misfit(fraction_pyro=fraction_pyro):
 #sig = pymc.Uniform('sig', 0.0, 100.0, value=1.)
 sig=1.e-2 # Some sorts of error
 obs = pymc.Normal('d',mu=calc_misfit,tau=1.0/(sig*sig),value=0,observed=True,trace=True)
-model = [fraction_pv, fe_pv, fe_pc, T0,obs]
+model = [fraction_pyro,obs]
 things = ['fraction_pyro']
 
 whattodo = ""
@@ -163,20 +166,20 @@ if whattodo=="run":
     whattodo="continue"
 
 if whattodo=="continue":
-    n_runs = 100
+    n_runs = 1000
     for l in range(0,n_runs):
         db = pymc.database.pickle.load(dbname)
-        print "*** run=%d/%d, # samples: %d" % (l, n_runs, db.trace('fraction_pv').stats()['n'] )
+        print "*** run=%d/%d, # samples: %d" % (l, n_runs, db.trace('fraction_pyro').stats()['n'] )
         S = pymc.MCMC(model, db=db)
         #S.sample(iter=100, burn=10, thin=1)
-        S.sample(iter=10, burn=0, thin=1) # Search space for 100000 acceptable steps, forget first 1000 and save every 10.
+        S.sample(iter=1000, burn=100, thin=10) # Search space for 100000 acceptable steps, forget first 1000 and save every 10.
         S.db.close()
 
 if whattodo=="plot":
 	files=sys.argv[2:]
 	print "files:",files
 
-        b=0#10000 # burn number
+        b=50#10000 # burn number
         i=1
 
         for t in things:
@@ -216,7 +219,7 @@ if whattodo=="plot":
 
             i=i+1
 
-        plt.savefig("example_inv_big_pyro.png")
+        plt.savefig("example_inv_big_pv.png")
         plt.show()
 
 if whattodo=="test":
@@ -243,7 +246,15 @@ if whattodo=="test":
 
 
     pymc.Matplot.trace(db.trace('fraction_pyro',chain=None).gettrace(thin=t,chain=None),'fraction_pyro',rows=2,columns=4,num=2)
-    pymc.Matplot.histogram(np.array(db.trace('fraction_pyro',chain=None).gettrace(burn=b,chain=None)),'fraction_pv',rows=2,columns=4,num=6)
+    pymc.Matplot.histogram(np.array(db.trace('fraction_pyro',chain=None).gettrace(burn=b,chain=None)),'fraction_pyro',rows=2,columns=4,num=6)
+
+    pymc.Matplot.trace(db.trace('fe_pv',chain=None).gettrace(thin=t,chain=None),'fe_pv',rows=2,columns=4,num=3)
+    pymc.Matplot.histogram(np.array(db.trace('fe_pv',chain=None).gettrace(burn=b,chain=None)),'fe_pv',rows=2,columns=4,num=7)
+
+    pymc.Matplot.trace(db.trace('fe_pc',chain=None).gettrace(thin=t,chain=None),'fe_pc',rows=2,columns=4,num=4)
+    pymc.Matplot.histogram(np.array(db.trace('fe_pc',chain=None).gettrace(burn=b,chain=None)),'fe_pc',rows=2,columns=4,num=8)
+
+
 
     plt.show()
 



More information about the CIG-COMMITS mailing list