/// @file /// Test CeedOperatorApplyAdd /// \test Test CeedOperatorApplyAdd #include #include #include #include "t500-operator.h" int main(int argc, char **argv) { Ceed ceed; CeedTransposeMode lmode = CEED_NOTRANSPOSE; CeedElemRestriction Erestrictx, Erestrictu, Erestrictxi, Erestrictui; CeedBasis bx, bu; CeedQFunction qf_setup, qf_mass; CeedOperator op_setup, op_mass; CeedVector qdata, X, U, V; const CeedScalar *hv; CeedInt nelem = 15, P = 5, Q = 8; CeedInt Nx = nelem+1, Nu = nelem*(P-1)+1; CeedInt indx[nelem*2], indu[nelem*P]; CeedScalar x[Nx]; CeedScalar sum; CeedInit(argv[1], &ceed); for (CeedInt i=0; i1e-10) printf("Computed Area: %f != True Area: 1.0\n", sum); CeedVectorRestoreArrayRead(V, &hv); // Apply with V = 1 CeedVectorSetValue(V, 1.0); CeedOperatorApplyAdd(op_mass, U, V, CEED_REQUEST_IMMEDIATE); // Check output CeedVectorGetArrayRead(V, CEED_MEM_HOST, &hv); sum = -Nu; for (CeedInt i=0; i1e-10) printf("Computed Area: %f != True Area: 1.0\n", sum); CeedVectorRestoreArrayRead(V, &hv); CeedQFunctionDestroy(&qf_setup); CeedQFunctionDestroy(&qf_mass); CeedOperatorDestroy(&op_setup); CeedOperatorDestroy(&op_mass); CeedElemRestrictionDestroy(&Erestrictu); CeedElemRestrictionDestroy(&Erestrictx); CeedElemRestrictionDestroy(&Erestrictui); CeedElemRestrictionDestroy(&Erestrictxi); CeedBasisDestroy(&bu); CeedBasisDestroy(&bx); CeedVectorDestroy(&X); CeedVectorDestroy(&U); CeedVectorDestroy(&V); CeedVectorDestroy(&qdata); CeedDestroy(&ceed); return 0; }