예제 #1
0
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)
예제 #2
0
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)