def splitbasis(n, bs): bspl = ppd.partitionlist(n, bs) idx = np.cumsum([0] + [sum([b.n for b in sum(bsp,[])]) for bsp in bspl]) eltoffsets = np.cumsum([0] + map(len, bspl[:-1])) return zip(bspl, zip(idx[:-1],idx[1:]), eltoffsets)
import collections as cs def newdir(olddirs, d): for od in olddirs: if np.dot(od, d) > 1 - 1E-6: return False return True TracePoint = cs.namedtuple('TracePoint', 'face, point, direction') def etodcombine(etod1,etod2): for ds1, ds2 in zip(etod1, etod2): for d in ds2: if newdir(ds1, d): ds1.append(d) return etod1 @ppd.distribute(lambda n: lambda mesh, tracepoints, tracer: [((mesh, tp, tracer),{}) for tp in ppd.partitionlist(n, tracepoints)],) class RayTracing(object): def __init__(self, mesh, tracepoints, tracer, maxref = 5, maxelts = -1): self.etods = [[] for _ in range(mesh.nelements)] self.reflections = [] self.tracer = tracer for tp in tracepoints: self.trace(tp,maxref, maxelts) def adddir(self, e, dir): dirs = self.etods[e] if newdir(dirs, dir): dirs.append(dir) return True return False
''' Created on Oct 31, 2011 @author: joel ''' import pypwdg.parallel.decorate as ppd @ppd.parallel(lambda n: lambda somelist: [((l,),{}) for l in ppd.partitionlist(n,somelist)]) def myexpensivefn(somelist): return sum([x**2 for x in somelist]) import pypwdg.parallel.main if __name__ == "__main__": print myexpensivefn(range(100))