[cig-commits] [commit] master: Added PerpleX comparison benchmarks for SLB and MT (27c7a98)
cig_noreply at geodynamics.org
cig_noreply at geodynamics.org
Fri Dec 12 23:19:39 PST 2014
Repository : https://github.com/geodynamics/burnman
On branch : master
Link : https://github.com/geodynamics/burnman/compare/7c010ac6610ee014aabcb76a2a4f667a06a8e7f7...fb1efda477c84dda519a26fcd6480eef1f23c1cf
>---------------------------------------------------------------
commit 27c7a98095a9cd8250dda07b8960859718f9847d
Author: Bob Myhill <myhill.bob at gmail.com>
Date: Fri Dec 12 22:56:01 2014 -0800
Added PerpleX comparison benchmarks for SLB and MT
>---------------------------------------------------------------
27c7a98095a9cd8250dda07b8960859718f9847d
.../perplex_output/fo50_HP2011_params.dat | 5 +++
.../perplex_output/fo_HP2011_params.dat | 7 ++++
.../perplex_output/fo_SLB2011_params.dat | 7 ++++
misc/benchmarks/endmember_benchmarks.py | 46 ++++++++++++++++++++++
4 files changed, 65 insertions(+)
diff --git a/burnman/data/input_minphys/perplex_output/fo50_HP2011_params.dat b/burnman/data/input_minphys/perplex_output/fo50_HP2011_params.dat
new file mode 100644
index 0000000..f2fff50
--- /dev/null
+++ b/burnman/data/input_minphys/perplex_output/fo50_HP2011_params.dat
@@ -0,0 +1,5 @@
+P(bar) T(K) H(J) S(J/K) V(J/bar) Cp(J/K) Alpha(1/K) Beta(1/bar) Density(kg/m3)
+50000 1000 -0.14912E+07 316.84 4.4272 179.83 0.31665E-04 0.73543E-06 3890.3
+100000 1000 -0.12800E+07 310.43 4.2783 178.64 0.27520E-04 0.63858E-06 4025.7
+50000 1500 -0.13979E+07 392.32 4.5008 192.23 0.34279E-04 0.78824E-06 3826.7
+100000 1500 -0.11875E+07 385.30 4.3396 190.39 0.29453E-04 0.67656E-06 3968.8
diff --git a/burnman/data/input_minphys/perplex_output/fo_HP2011_params.dat b/burnman/data/input_minphys/perplex_output/fo_HP2011_params.dat
new file mode 100644
index 0000000..0ceca39
--- /dev/null
+++ b/burnman/data/input_minphys/perplex_output/fo_HP2011_params.dat
@@ -0,0 +1,7 @@
+P(bar) T(K) H(J) S(J/K) V(J/bar) Cp(J/K) Alpha(1/K) Beta(1/bar) Density(kg/m3)
+1 1000 -0.20632E+07 277.07 4.4773 175.07 0.39730E-04 0.85822E-06 3142.4
+50000 1000 -0.18519E+07 269.01 4.3031 173.24 0.34086E-04 0.73631E-06 3269.6
+100000 1000 -0.16473E+07 262.25 4.1572 171.91 0.29983E-04 0.64767E-06 3384.3
+1 1500 -0.19724E+07 350.55 4.5717 187.00 0.43733E-04 0.93249E-06 3077.5
+50000 1500 -0.17623E+07 341.57 4.3802 184.13 0.36956E-04 0.78799E-06 3212.0
+100000 1500 -0.15584E+07 334.16 4.2223 182.14 0.32165E-04 0.68583E-06 3332.1
diff --git a/burnman/data/input_minphys/perplex_output/fo_SLB2011_params.dat b/burnman/data/input_minphys/perplex_output/fo_SLB2011_params.dat
new file mode 100644
index 0000000..7af32da
--- /dev/null
+++ b/burnman/data/input_minphys/perplex_output/fo_SLB2011_params.dat
@@ -0,0 +1,7 @@
+P(bar) T(K) H(J) S(J/K) V(J/bar) Cp(J/K) Alpha(1/K) Beta(1/bar) Density(kg/m3)
+1 1000 -0.19163E+07 276.22 4.4533 175.37 0.34807E-04 0.88173E-06 3159.3
+50000 1000 -0.17050E+07 269.45 4.2777 173.28 0.27775E-04 0.73768E-06 3289.0
+100000 1000 -0.15001E+07 264.13 4.1336 171.92 0.23165E-04 0.63826E-06 3403.6
+1 1500 -0.18265E+07 348.96 4.5378 183.64 0.40571E-04 0.98695E-06 3100.5
+50000 1500 -0.16165E+07 341.09 4.3412 179.99 0.31208E-04 0.80042E-06 3240.9
+100000 1500 -0.14125E+07 335.09 4.1842 177.88 0.25499E-04 0.68032E-06 3362.4
diff --git a/misc/benchmarks/endmember_benchmarks.py b/misc/benchmarks/endmember_benchmarks.py
new file mode 100644
index 0000000..1dbe402
--- /dev/null
+++ b/misc/benchmarks/endmember_benchmarks.py
@@ -0,0 +1,46 @@
+# Benchmarks for the solid solution class
+import os.path, sys
+sys.path.insert(1,os.path.abspath('../..'))
+
+import burnman
+from burnman.minerals import SLB_2011
+from burnman.minerals import HP_2011_ds62
+import numpy as np
+
+
+def p(v1, v2):
+ return (v2-v1)/v1
+
+###
+filemin=[['SLB2011', '../../burnman/data/input_minphys/perplex_output/fo_SLB2011_params.dat', SLB_2011.fo()],['HP2011', '../../burnman/data/input_minphys/perplex_output/fo_HP2011_params.dat', HP_2011_ds62.fo()]]
+
+for database, f, mineral in filemin:
+ f = open(f, 'r')
+ datalines = [ line.strip() for idx, line in enumerate(f.read().split('\n')) if line.strip() and idx>0 ]
+ data = [ map(float,"%".join(line.split("%")[:1]).split()) for line in datalines ]
+ P, T, H, S, V, C_p, alpha, beta, rho = zip(*data)
+
+ variables=['H','S','V','C_p','alpha','beta','rho']
+
+ fo = mineral
+ percentage_diff=[]
+ PT=[]
+
+ print database
+ print variables
+
+ for line in data:
+ P, T, H, S, V, C_p, alpha, beta, rho = line
+ fo.set_state(P*1.e5,T)
+ gibbs=H-T*S
+ PT.append([P/1.e4,T])
+ diff=[p(fo.gibbs, gibbs), p(fo.H, H), p(fo.S, S), p(fo.V, V/1.e5), p(fo.C_p, C_p), p(fo.alpha, alpha), p(fo.K_T, 1.e5/beta), p(fo.density(), rho)]
+ print ["{0:0.4f}".format(i) for i in diff]
+ percentage_diff.append(diff)
+
+ percentage_diff=np.array(percentage_diff)
+ i,j = np.unravel_index(percentage_diff.argmax(), percentage_diff.shape)
+
+ print 'Maximum error in', database, 'database:'
+ print variables[j], ':', percentage_diff[i,j], '% at', PT[i][0], 'GPa and', PT[i][1], 'K'
+ print ''
More information about the CIG-COMMITS
mailing list