/// @file /// Test full assembly of mass and Poisson operator (see t536) /// \test Test full assembly of mass and Poisson operator #include #include #include #include "t320-basis.h" #include "t535-operator.h" int main(int argc, char **argv) { Ceed ceed; CeedElemRestriction elem_restr_x, elem_restr_u, elem_restr_qd_mass_i, elem_restr_qd_diff_i; CeedBasis basis_x, basis_u; CeedQFunction qf_setup_mass, qf_setup_diff, qf_apply; CeedOperator op_setup_mass, op_setup_diff, op_apply; CeedVector q_data_mass, q_data_diff, X, U, V; CeedInt num_elem = 12, dim = 2, P = 6, Q = 4; CeedInt n_x = 3, n_y = 2; CeedInt row, col, offset; CeedInt num_dofs = (n_x*2+1)*(n_y*2+1), num_qpts = num_elem*Q; CeedInt ind_x[num_elem*P*P]; CeedScalar assembled[num_dofs*num_dofs]; CeedScalar x[dim*num_dofs], assembled_true[num_dofs*num_dofs]; CeedScalar q_ref[dim*Q], q_weight[Q]; CeedScalar interp[P*Q], grad[dim*P*Q]; CeedScalar *u; const CeedScalar *v; CeedInit(argv[1], &ceed); // DoF Coordinates for (CeedInt i=0; i 100.*CEED_EPSILON) // LCOV_EXCL_START printf("[%d,%d] Error in assembly: %f != %f\n", i, j, assembled[j*num_dofs+i], assembled_true[j*num_dofs+i]); // LCOV_EXCL_STOP // Cleanup free(rows); free(cols); CeedVectorDestroy(&values); CeedQFunctionDestroy(&qf_setup_mass); CeedQFunctionDestroy(&qf_setup_diff); CeedQFunctionDestroy(&qf_apply); CeedOperatorDestroy(&op_setup_mass); CeedOperatorDestroy(&op_setup_diff); CeedOperatorDestroy(&op_apply); CeedElemRestrictionDestroy(&elem_restr_u); CeedElemRestrictionDestroy(&elem_restr_x); CeedElemRestrictionDestroy(&elem_restr_qd_mass_i); CeedElemRestrictionDestroy(&elem_restr_qd_diff_i); CeedBasisDestroy(&basis_u); CeedBasisDestroy(&basis_x); CeedVectorDestroy(&X); CeedVectorDestroy(&q_data_mass); CeedVectorDestroy(&q_data_diff); CeedVectorDestroy(&U); CeedVectorDestroy(&V); CeedDestroy(&ceed); return 0; }