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()
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()
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()