From a25e6d03d1d168bca5aa50cebd3f9e232dc645ba Mon Sep 17 00:00:00 2001 From: "smcquay@cfdviz2" Date: Fri, 26 Feb 2010 14:44:29 -0700 Subject: [PATCH] partially implemented using new data structure in point lookup I spoke with Dr. Gorrell about first trying to call the nearest-neighbor routine, releasing the trapped exception where the matrix ends up being singular, and trapping it in the grid object's run_baker, where I could then call the connectivity-based lookup routine. Those are my next steps, as well as starting to think about pushing the 3D front ahead this week. --- bin/grid_regular.py | 29 ++++++++++++++++++----------- lib/grid.py | 17 ++++++++++++++--- 2 files changed, 32 insertions(+), 14 deletions(-) diff --git a/bin/grid_regular.py b/bin/grid_regular.py index 22ec983..d91dc90 100755 --- a/bin/grid_regular.py +++ b/bin/grid_regular.py @@ -10,19 +10,26 @@ qfile = '/tmp/grid_regular.txt' if __name__ == '__main__': try: - resolution = int(sys.argv[1]) - if resolution > 200: - raise Exception - except: - resolution = 3 - - source_mesh = simple_rect_grid(resolution, resolution) - X = [0.4, 0.001] - (R, S) = source_mesh.get_points_conn(X) + rx = int(sys.argv[1]) + ry = int(sys.argv[2]) + except ValueError as e: + print e + rx = 4 + ry = 4 * rx + source_mesh = simple_rect_grid(rx, ry) print source_mesh - print R - print S + X = [0.1, 0.1] + + (R, S) = source_mesh.get_simplex_and_nearest_points(X, extra_points=4) + print "R for nearest-neighbor:\n", R + print "S for nearest-neighbor:\n", S print run_baker(X, R, S) + + (R, S) = source_mesh.get_points_conn(X) + print "R for connectivity:\n", R + print "S for connectivity:\n", S + print run_baker(X, R, S) + open(qfile, 'w').write(source_mesh.for_qhull()) diff --git a/lib/grid.py b/lib/grid.py index 478f8a7..389e3ad 100755 --- a/lib/grid.py +++ b/lib/grid.py @@ -111,6 +111,13 @@ class grid(object): """ this returns two grid objects: R and S. + this function differes from the get_simplex_and_nearest_points + function in that it builds up the extra points based on + connectivity information, not just nearest-neighbor. + in theory, this will work much better for situations like + points near a short edge in a boundary layer cell where the + nearest points would all be colinear + R is a grid object that is the (a) containing simplex around point X S is a connectivity-based nearest-neighbor lookup, limited to 3 extra points """ @@ -128,7 +135,7 @@ class grid(object): if not simplex: raise AssertionError('no containing simplex found') - simplex_set = set(simplex.verts) + R = self.create_mesh(simplex.verts) @@ -139,8 +146,12 @@ class grid(object): return R, S - def run_baker(self, X): - (R, S) = self.get_simplex_and_nearest_points(X) + def run_baker(self, X, connectivity_based = False): + print >>sys.stderr, "suxor" + if connectivity_based: + (R, S) = self.get_points_conn(X) + else: + (R, S) = self.get_simplex_and_nearest_points(X) return run_baker(X, R, S) def construct_connectivity(self):