#!/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] ") 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