def dopoisson(): k = 1 N = 2 d = numpy.array([1,2,3]) g = lambda p: numpy.sin(numpy.dot(p, d))[:,numpy.newaxis, numpy.newaxis] f = lambda p: -sum(d**2) * g(p) points = uniformcubepoints(8) Up = poissondirichlet(k,N,g,f, points)[:,numpy.newaxis] up = g(points) print math.sqrt(numpy.sum((Up - up)**2)/(len(points)))
def dopoissonmixed(): k = 3 N = 3 d = numpy.array([1,2,3]) u = lambda p: numpy.sin(numpy.dot(p, d))[:,numpy.newaxis, numpy.newaxis] f = lambda p: -(sum(d**2) * u(p)) points = uniformcubepoints(8) Up = mixedpoissondual(k,N, u, f, points).flatten() up = u(points).flatten() print Up.shape, up.shape l2 = math.sqrt(numpy.sum((Up - up)**2)/(len(points))) print l2
def dopoissonneumann(): k = 4 N = 3 d = numpy.array([1,2,3]) u = lambda p: numpy.sin(numpy.dot(p, d))[:,numpy.newaxis] gn = lambda p, n: (numpy.cos(numpy.dot(p,d))*numpy.dot(n,d))[:,numpy.newaxis] f = lambda p: -sum(d**2) * u(p) points = uniformcubepoints(8) Up = poissonneumann(k,N,gn, f, points) [:,numpy.newaxis] up = u(points) l2 = math.sqrt(numpy.sum((Up - up)**2)/(len(points))) print l2
def tabulate(): kmax = 5 nmax = 5 points = uniformcubepoints(4) up = logxminus111(points) l2s = numpy.zeros((nmax,kmax)) for k in range(1,kmax+1): for N in range(1,nmax+1): if k==1 and N==1: break print k,N Up = laplacedirichlet(k,N, logxminus111, points)[:,numpy.newaxis] l2s[k-1,N-1] = math.sqrt(numpy.sum((Up - up)**2)/(len(points))) print l2s
c = mpl.contourf(pp[0], pp[1], ur.reshape(NP,NP) - u[:,0].reshape(NP,NP), fontsize=14, colors = None, cmap=mpl.get_cmap('Greys')) mpl.colorbar(c, shrink=0.8) # mpl.clabel(c, inline=1, fontsize = 14) mpl.figure(facecolor='white') c = mpl.contourf(pp[0], pp[1], p.reshape(NP,NP), fontsize=14, colors = None, cmap=mpl.get_cmap('Greys')) mpl.colorbar(c, shrink=0.8) # mpl.clabel(c, inline=1, fontsize = 14) # mpl.show() if __name__ == "__main__": k = 4 N = 2 NP = 12 points = pu.uniformcubepoints(NP) v = [[1,1,1]] # v = [[0,0,0]] meshevents = lambda m: pps.stokescubemesh(N, m) # OT = 'obstructiontag' # meshevents = lambda m: pps.cubeobstruction(m, OT) mp = MeshPlotter() meshevents(mp) emm.figure(bgcolor=(1,1,1)) u, p = pps.stokespressure(k,meshevents,{pps.inputbdytag:pps.pfn(0), pps.outputbdytag:pps.pfn(1.0)}, points, False, N==1) pt = points.reshape(NP,NP,NP,3).transpose((3,0,1,2)) ut = u.reshape(NP,NP,NP,3).transpose((3,0,1,2)) emm.quiver3d(pt[0],pt[1],pt[2], ut[0],ut[1],ut[2], opacity = 0.4)