diff --git a/interp/grid/DDD.py b/interp/grid/DDD.py index 0cd7d6c..4ec579f 100644 --- a/interp/grid/DDD.py +++ b/interp/grid/DDD.py @@ -1,6 +1,8 @@ from interp.grid.delaunay import dgrid as basegrid from interp.tools import baker_exact_3D, log +from itertools import product + import numpy as np class rect_grid(basegrid): @@ -36,27 +38,40 @@ class rect_grid(basegrid): class random_grid(rect_grid): - def __init__(self, num_verts = 10): + def __init__(self, num_verts = 100): verts = [] - q = [] r = np.random appx_side_res = int(np.power(num_verts, 1/3.0)) - log.debug("appx_side_res: %d" % appx_side_res) delta = 1.0 / float(appx_side_res) - for x in xrange(appx_side_res + 1): - pass + # populate all corners + verts = [i for i in product((0,1), repeat = 3)] - for i in xrange(num_verts): - cur_x = r.rand() - cur_y = r.rand() - cur_z = r.rand() - verts.append([cur_x, cur_y, cur_z]) - q.append(baker_exact_3D((cur_x, cur_y, cur_z))) - basegrid.__init__(self, verts, q) + # populate the edges (bottom and top squares) + for z in (0,1): + for x in xrange(1, appx_side_res): + cur_x = x * delta + for cur_y in (0, 1): + new_point = [cur_x, cur_y, z] + verts.append(new_point) - self.verts = np.array(self.verts) - self.q = np.array(self.q) + for y in xrange(1, appx_side_res): + cur_y = y * delta + for cur_x in (0, 1): + new_point = [cur_x, cur_y, z] + verts.append(new_point) + + # populate side edges + for x in (0,1): + for y in (0,1): + for z in xrange(1, appx_side_res): + cur_z = z * delta + verts.append((x,y,cur_z)) + + verts.extend(np.random.random((num_verts - 12 * appx_side_res, 3))) + + q = np.zeros(len(verts)) + basegrid.__init__(self, np.array(verts), q)