/// @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; CeedInterlaceMode imode = CEED_NONINTERLACED, imodeu = CEED_INTERLACED;; CeedElemRestriction Erestrictx, Erestrictu, Erestrictui_small, Erestrictui_large; CeedBasis bx_small, bx_large, bu_small, bu_large; CeedQFunction qf_setup, qf_mass; CeedOperator op_setup_small, op_mass_small, op_setup_large, op_mass_large; CeedVector qdata_small, qdata_large, X, U, V; CeedScalar *hu; const CeedScalar *hv; CeedInt nelem = 15, P = 5, Q = 8, scale = 3; CeedInt Nx = nelem+1, Nu = nelem*(P-1)+1; CeedInt indx[nelem*2], indu[nelem*P]; CeedScalar x[Nx]; CeedScalar sum1, sum2; CeedInit(argv[1], &ceed); for (CeedInt i=0; i1e-10) printf("Computed Area: %f != True Area: 1.0\n", sum1); if (fabs(sum2-2.)>1e-10) printf("Computed Area: %f != True Area: 2.0\n", sum2); CeedVectorRestoreArrayRead(V, &hv); // 'Large' operator CeedOperatorApply(op_mass_large, U, V, CEED_REQUEST_IMMEDIATE); // Check output CeedVectorGetArrayRead(V, CEED_MEM_HOST, &hv); sum1 = 0.; sum2 = 0.; for (CeedInt i=0; i1e-10) printf("Computed Area: %f != True Area: 1.0\n", sum1); if (fabs(sum2-2.)>1e-10) printf("Computed Area: %f != True Area: 2.0\n", sum2); 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(&Erestrictu); CeedElemRestrictionDestroy(&Erestrictx); CeedElemRestrictionDestroy(&Erestrictui_small); CeedElemRestrictionDestroy(&Erestrictui_large); CeedBasisDestroy(&bu_small); CeedBasisDestroy(&bx_small); CeedBasisDestroy(&bu_large); CeedBasisDestroy(&bx_large); CeedVectorDestroy(&X); CeedVectorDestroy(&U); CeedVectorDestroy(&V); CeedVectorDestroy(&qdata_small); CeedVectorDestroy(&qdata_large); CeedDestroy(&ceed); return 0; }