def test_reconstruction(): k = 3 x = np.linspace(-2.0, 2.0) grid = pyweno.grid.Grid(boundaries=x) fbar = grid.average(f) weno5 = pyweno.clweno5.CLWENO5PM(ctx=ctx) fbndry = uf(x[:-1]) fp = np.zeros(grid.N) fm = np.zeros(grid.N) weno5.reconstruct(fbar, fp, fm) d = fbndry[k+1:-k] - fp[k+1:-k] l2 = math.sqrt(np.dot(d, d)) print d print l2 assert l2 < 1e-5, "CLWENO5PM (+) is broken" d = fbndry[k+1:-k] - fm[k+1:-k] l2 = math.sqrt(np.dot(d, d)) print d print l2 assert l2 < 1e-5, "CLWENO5PM (-) is broken"
def test_by_reconstructing_uniform(): K = range(3, 4) x = np.linspace(-1.0, 1.0, 1001) grid = pyweno.grid.Grid(boundaries=x) # f and f' evaluated at boundaries fbndry = uf(x) # average of f fbar = grid.average(f) for k in K: for s in (0,): # XXX: test more s values weno = pyweno.clweno.CLWENO(ctx=ctx, grid=grid, order=k) weno.precompute_reconstruction('left') weno2 = pyweno.weno.WENO(grid=grid, order=k) weno2.precompute_reconstruction('left') # f reconstructed at boundaries frcnst = np.zeros(grid.N) weno.smoothness(fbar) weno2.smoothness(fbar) weno.weights('left') # weno.weights('left') weno2.weights('left') print weno.wr['left'] print weno2.wr['left'] weno.reconstruct(fbar, 'left', frcnst, s=s) #, compute_weights=False) # print weno.wr['left'] # print weno2.wr['left'] # assert d = fbndry[:-1] - frcnst[:] l2 = math.sqrt(np.dot(d, d)) print l2 assert l2 < 1e-8, "WENO (k=%d, left) is broken" % (k)
# explicitly define the function f that we will reconstruct ... def f(x): if x < 0.0: return math.sin(x) return math.cos(x) uf = numpy.frompyfunc(f, 1, 1) # load the weno reconstructor from the cache x = numpy.linspace(-5.0, 5.0, 21) grid = pyweno.grid.Grid(x) weno = pyweno.clweno.CLPMWENO(3) # average f fb = grid.average(f) # allocate arrays for reconstruction fm = numpy.zeros(grid.N) fp = numpy.zeros(grid.N) # reconstruct! weno.reconstruct(fb, fp, fm) print fp print fm # plot results import matplotlib matplotlib.use('Agg')