smbinterp/bin/driver.py

106 lines
3.1 KiB
Python
Executable File

#!/usr/bin/env python
import sys
from optparse import OptionParser
import numpy as np
from interp.tools import rms, baker_exact_2D as exact_func
from interp.grid.DD import random_grid, rect_grid
def get_mesh(source, destination, use_structured_grid = False):
mesh_source = None
mesh_dest = None
if use_structured_grid:
mesh_source = rect_grid(source, source)
mesh_dest = rect_grid(destination, destination)
else:
mesh_source = random_grid(source)
mesh_dest = random_grid(destination)
if not (mesh_dest and mesh_source):
raise smberror('problem creating mesh objects')
else:
return mesh_source, mesh_dest
if __name__ == '__main__':
parser = OptionParser()
parser.add_option("-o",
"--order",
dest="order",
type='int',
default = 3,
help = "how many extra verts (%default)")
parser.add_option("-e",
"--extra-verts",
dest="extra",
type='int',
default = 3,
help = "how many extra verts (%default)")
parser.add_option("-s",
"--source-total",
dest="source_total",
type='int',
default = 100,
help = "total number of source verts for random, resolution for structured (%default)")
parser.add_option("-d",
"--destination-total",
dest="destination_total",
type='int',
default = 100,
help = "total number of destination verts, resolution for structured (%default)")
parser.add_option("-r",
"--structured",
action = 'store_true',
default = False,
help = "use a structured grid instead of random point cloud (%default)")
parser.add_option("-v",
"--verbose",
action = 'store_true',
default = False,
help = "verbosity (%default)")
(options, args) = parser.parse_args()
(mesh_source, mesh_dest) = get_mesh(options.source_total, options.destination_total, options.structured)
errors = []
success = 0
for X in mesh_dest.verts:
answer = mesh_source.run_baker(X, order = options.order, extra_points = options.extra)
if answer['abc'] == None:
print "None"
errors.append(0)
continue
exact = exact_func(X)
if np.abs(exact - answer['final']) <= np.abs(exact - answer['qlin']):
success += 1
if options.verbose:
print "current point : %s" % X
print "exact : %0.4f" % exact
print "qlin : %0.4f" % answer['qlin']
print "q_final : %0.4f" % answer['final']
print "error w/o : %1.4f" % (exact - answer['qlin'],)
print "error w/ : %0.4f" % (exact - answer['final'],)
print
cur_error = np.abs(answer['final'] - exact)
errors.append(cur_error)
print rms(errors)
print >>sys.stderr, "%s of %s won" % (success, len(mesh_dest.verts))