/// @file /// Test creation reuse of the same QFunction for multiple operators /// \test Test creation reuse of the same QFunction for multiple operators #include #include #include #include "t502-operator.h" int main(int argc, char **argv) { Ceed ceed; CeedElemRestriction elem_restr_x, elem_restr_u, elem_restr_qd_i_small, elem_restr_qd_i_large; CeedBasis basis_x_small, basis_x_large, basis_u_small, basis_u_large; CeedQFunction qf_setup, qf_mass; CeedOperator op_setup_small, op_mass_small, op_setup_large, op_mass_large; CeedVector q_data_small, q_data_large, X, U, V; CeedScalar *hu; const CeedScalar *hv; CeedInt num_elem = 15, P = 5, Q = 8, scale = 3; CeedInt num_nodes_x = num_elem+1, num_nodes_u = num_elem*(P-1)+1; CeedInt ind_x[num_elem*2], ind_u[num_elem*P]; CeedScalar x[num_nodes_x]; CeedScalar sum_1, sum_2; CeedInit(argv[1], &ceed); for (CeedInt i=0; i1e-10) printf("Computed Area: %f != True Area: 1.0\n", sum_1); if (fabs(sum_2-2.)>1e-10) printf("Computed Area: %f != True Area: 2.0\n", sum_2); CeedVectorRestoreArrayRead(V, &hv); // 'Large' operator CeedOperatorApply(op_mass_large, U, V, CEED_REQUEST_IMMEDIATE); // Check output CeedVectorGetArrayRead(V, CEED_MEM_HOST, &hv); sum_1 = 0.; sum_2 = 0.; for (CeedInt i=0; i1e-10) printf("Computed Area: %f != True Area: 1.0\n", sum_1); if (fabs(sum_2-2.)>1e-10) printf("Computed Area: %f != True Area: 2.0\n", sum_2); CeedVectorRestoreArrayRead(V, &hv); CeedQFunctionDestroy(&qf_setup); CeedQFunctionDestroy(&qf_mass); CeedOperatorDestroy(&op_setup_small); CeedOperatorDestroy(&op_mass_small); CeedOperatorDestroy(&op_setup_large); CeedOperatorDestroy(&op_mass_large); CeedElemRestrictionDestroy(&elem_restr_u); CeedElemRestrictionDestroy(&elem_restr_x); CeedElemRestrictionDestroy(&elem_restr_qd_i_small); CeedElemRestrictionDestroy(&elem_restr_qd_i_large); CeedBasisDestroy(&basis_u_small); CeedBasisDestroy(&basis_x_small); CeedBasisDestroy(&basis_u_large); CeedBasisDestroy(&basis_x_large); CeedVectorDestroy(&X); CeedVectorDestroy(&U); CeedVectorDestroy(&V); CeedVectorDestroy(&q_data_small); CeedVectorDestroy(&q_data_large); CeedDestroy(&ceed); return 0; }