80 lines
1.9 KiB
Python
80 lines
1.9 KiB
Python
|
#!/usr/bin/env python
|
||
|
|
||
|
import sys
|
||
|
import time
|
||
|
|
||
|
import pickle
|
||
|
|
||
|
import numpy as np
|
||
|
|
||
|
from optparse import OptionParser
|
||
|
|
||
|
import progressbar
|
||
|
|
||
|
import interp.bootstrap
|
||
|
|
||
|
from interp.grid.gmsh import ggrid
|
||
|
from interp.tools import *
|
||
|
|
||
|
def get_right_exact_func(dimension, baker = False):
|
||
|
f = None
|
||
|
if dimension == 3:
|
||
|
if baker:
|
||
|
f = baker_exact_3D
|
||
|
else:
|
||
|
f =friendly_exact_3D
|
||
|
elif dimension == 2:
|
||
|
if baker:
|
||
|
f = baker_exact_2D
|
||
|
else:
|
||
|
f = friendly_exact_2D
|
||
|
return f
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
|
||
|
parser = OptionParser(usage = "%prog [options] <input file (gmsh)> <destination file (pickle)>")
|
||
|
|
||
|
parser.add_option("-v", "--verbose",
|
||
|
action="store_true", dest="verbose", default=False,
|
||
|
help="verbose flag")
|
||
|
|
||
|
parser.add_option("-b", "--baker",
|
||
|
action="store_true", dest="baker", default=False,
|
||
|
help="use more impressive baker funcs")
|
||
|
|
||
|
|
||
|
(options, args) = parser.parse_args()
|
||
|
if len(args) != 2:
|
||
|
parser.print_usage()
|
||
|
sys.exit(1)
|
||
|
|
||
|
source, dest = args
|
||
|
|
||
|
dest = pickle.load(open(dest, 'r'))
|
||
|
|
||
|
dimension = int(source.split('.')[1][0])
|
||
|
|
||
|
g = ggrid(source, dimension)
|
||
|
g.q = np.array([get_right_exact_func(dimension, options.baker)(x) for x in g.verts])
|
||
|
|
||
|
exacts = (baker_exact_2D, friendly_exact_2D)
|
||
|
orders = [2,3,4,5]
|
||
|
extras = [4,6,8,12,16,20,32,48,64,96,128,192,256]
|
||
|
|
||
|
for exact_func in exacts:
|
||
|
g.q = np.array([exact_func(x) for x in g.verts])
|
||
|
for order in orders:
|
||
|
for extra in extras:
|
||
|
for d in dest:
|
||
|
results = {True:0, False:0}
|
||
|
errors = []
|
||
|
s = time.time()
|
||
|
for X in d:
|
||
|
a = g.run_baker(X[:2], order = order, extra_points = extra)
|
||
|
exact = exact_func(X[:2])
|
||
|
results[improved_answer(a,exact)] += 1
|
||
|
current_error = exact - a['final']
|
||
|
errors.append(current_error)
|
||
|
e = time.time()
|
||
|
print exact_func.__name__, order, extra, results[True] / float(len(d)), rms(errors), e-s
|