Esempio n. 1
0
def _test_reduced_mesh_collapsed_matrix(V, U, reduced_mesh):
    reduced_V = reduced_mesh.get_reduced_function_spaces()
    dofs = reduced_mesh.get_dofs_list()
    reduced_dofs = reduced_mesh.get_reduced_dofs_list()

    u = TrialFunction(U)
    (u_0, u_1) = split(u)
    v = TestFunction(V)

    trial = 1
    test = 0
    u_N = TrialFunction(reduced_V[trial])
    v_N = TestFunction(reduced_V[test])
    (u_N_0, u_N_1) = split(u_N)

    A = assemble(inner(u_0, v) * dx + u_1 * v[0] * dx)
    A_N = assemble(inner(u_N_0, v_N) * dx + u_N_1 * v_N[0] * dx)

    A_dofs = evaluate_and_vectorize_sparse_matrix_at_dofs(A, dofs)
    A_N_reduced_dofs = evaluate_and_vectorize_sparse_matrix_at_dofs(A_N, reduced_dofs)

    test_logger.log(DEBUG, "A at dofs:")
    test_logger.log(DEBUG, str(A_dofs))
    test_logger.log(DEBUG, "A_N at reduced dofs:")
    test_logger.log(DEBUG, str(A_N_reduced_dofs))
    test_logger.log(DEBUG, "Error:")
    test_logger.log(DEBUG, str(A_dofs - A_N_reduced_dofs))

    assert isclose(A_dofs, A_N_reduced_dofs).all()
Esempio n. 2
0
def _test_reduced_mesh_elliptic_matrix(V, reduced_mesh):
    reduced_V = reduced_mesh.get_reduced_function_spaces()
    dofs = reduced_mesh.get_dofs_list()
    reduced_dofs = reduced_mesh.get_reduced_dofs_list()

    u = TrialFunction(V)
    v = TestFunction(V)

    trial = 1
    test = 0
    u_N = TrialFunction(reduced_V[trial])
    v_N = TestFunction(reduced_V[test])

    A = assemble((u.dx(0) * v + u * v) * dx)
    A_N = assemble((u_N.dx(0) * v_N + u_N * v_N) * dx)

    A_dofs = evaluate_and_vectorize_sparse_matrix_at_dofs(A, dofs)
    A_N_reduced_dofs = evaluate_and_vectorize_sparse_matrix_at_dofs(A_N, reduced_dofs)

    test_logger.log(DEBUG, "A at dofs:")
    test_logger.log(DEBUG, str(A_dofs))
    test_logger.log(DEBUG, "A_N at reduced dofs:")
    test_logger.log(DEBUG, str(A_N_reduced_dofs))
    test_logger.log(DEBUG, "Error:")
    test_logger.log(DEBUG, str(A_dofs - A_N_reduced_dofs))

    assert isclose(A_dofs, A_N_reduced_dofs).all()
Esempio n. 3
0
def _test_reduced_mesh_mixed_matrix(V, reduced_mesh):
    reduced_V = reduced_mesh.get_reduced_function_spaces()
    dofs = reduced_mesh.get_dofs_list()
    reduced_dofs = reduced_mesh.get_reduced_dofs_list()

    u = TrialFunction(V)
    v = TestFunction(V)
    (u_0, u_1) = split(u)
    (v_0, v_1) = split(v)

    trial = 1
    test = 0
    u_N = TrialFunction(reduced_V[trial])
    v_N = TestFunction(reduced_V[test])
    (u_N_0, u_N_1) = split(u_N)
    (v_N_0, v_N_1) = split(v_N)

    A = assemble(u_0[0]*v_0[0]*dx + u_0[0]*v_0[1]*dx + u_0[1]*v_0[0]*dx + u_0[1]*v_0[1]*dx + u_1*v_1*dx + u_0[0]*v_1*dx + u_1*v_0[1]*dx)
    A_N = assemble(u_N_0[0]*v_N_0[0]*dx + u_N_0[0]*v_N_0[1]*dx + u_N_0[1]*v_N_0[0]*dx + u_N_0[1]*v_N_0[1]*dx + u_N_1*v_N_1*dx + u_N_0[0]*v_N_1*dx + u_N_1*v_N_0[1]*dx)

    A_dofs = evaluate_and_vectorize_sparse_matrix_at_dofs(A, dofs)
    A_N_reduced_dofs = evaluate_and_vectorize_sparse_matrix_at_dofs(A_N, reduced_dofs)

    log(PROGRESS, "A at dofs:\n" + str(A_dofs))
    log(PROGRESS, "A_N at reduced dofs:\n" + str(A_N_reduced_dofs))
    log(PROGRESS, "Error:\n" + str(A_dofs - A_N_reduced_dofs))
    
    assert isclose(A_dofs, A_N_reduced_dofs).all()