def test_TDMA(T): from scipy.linalg import solve if T.neumann == True: B = BNNmat(np.arange(N).astype(np.float), T.quad) s = slice(1, N - 2) else: B = BDDmat(np.arange(N).astype(np.float), T.quad) s = slice(0, N - 2) Ba = B.diags().toarray() f = np.random.random(N) u = solve(Ba, f[s]) u0 = f.copy() u0 = T(u0) assert np.allclose(u0[s], u) # Again u0 = f.copy() u0 = T(u0) assert np.allclose(u0[s], u) # Multidimensional version fc = f.repeat(16).reshape((N, 4, 4)) fc = T(fc) assert np.allclose(fc[s, 2, 2], u) fc = f.repeat(16).reshape((N, 4, 4)) fc = T(fc) assert np.allclose(fc[s, 2, 2], u)
def test_BNNmat(ST): points, weights = ST.points_and_weights(N) f_hat = np.zeros(N) fj = np.random.random(N) u0 = np.zeros(N) if ST.__class__.__name__ == "ShenNeumannBasis": B = BNNmat(np.arange(N).astype(np.float), ST.quad) f_hat = ST.fst(fj, f_hat) fj = ST.ifst(f_hat, fj) u0 = ST.fastShenScalar(fj, u0) f_hat = ST.fst(fj, f_hat) elif ST.__class__.__name__ == "ShenDirichletBasis": B = BDDmat(np.arange(N).astype(np.float), ST.quad) f_hat = ST.fst(fj, f_hat) fj = ST.ifst(f_hat, fj) u0 = ST.fastShenScalar(fj, u0) f_hat = ST.fst(fj, f_hat) else: B = BTTmat(np.arange(N).astype(np.float), ST.quad) f_hat = ST.fct(fj, f_hat) fj = ST.ifct(f_hat, fj) u0 = ST.fastChebScalar(fj, u0) f_hat = ST.fct(fj, f_hat) u2 = B.matvec(f_hat) assert np.allclose(u2, u0) # Multidimensional version fj = fj.repeat(16).reshape((N, 4, 4)) + 1j * fj.repeat(16).reshape((N, 4, 4)) u0 = np.zeros((N, 4, 4), dtype=np.complex) f_hat = np.zeros((N, 4, 4), dtype=np.complex) if ST.__class__.__name__ in ("ShenNeumannBasis", "ShenDirichletBasis"): u0 = ST.fastShenScalar(fj, u0) f_hat = ST.fst(fj, f_hat) else: u0 = ST.fastChebScalar(fj, u0) f_hat = ST.fct(fj, f_hat) u2 = B.matvec(f_hat) assert np.allclose(u2, u0)