from interp.baker import get_phis, get_phis_3D from interp.tools import log TOL = 1e-8 def contains(X, R): """ tests if X (point) is in R (a simplex, represented by a list of n-degree coordinates) it now correctly checks for 2/3-D verts """ if len(R) == 3: phis = get_phis(X, R) elif len(R) == 4: phis = get_phis_3D(X, R) r = True if [i for i in phis if i < 0.0 - TOL]: r = False return r class cell(object): def __init__(self, name): self.name = name self.verts = [] self.neighbors = [] def add_vert(self, v): """ v should be an index into grid.verts """ self.verts.append(v) def add_neighbor(self, n): """ reference to another cell object """ self.neighbors.append(n) def contains(self, X, G): """ X = point of interest G = corrensponding grid object (G.verts) because of the way i'm storing things, a cell simply stores indicies, and so one must pass in a reference to the grid object containing real verts. this simply calls grid.simplex.contains """ return contains(X, [G.verts[i] for i in self.verts]) def __str__(self): neighbors = [str(i.name) for i in self.neighbors] return '' %\ ( self.name, self.verts, ", ".join(neighbors) ) __repr__ = __str__