DDD random_grid now has edges. it needs faces
This commit is contained in:
parent
fb79daba36
commit
ca49c7eec7
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user