/// @file /// Test assembly of mass and Poisson operator QFunction /// \test Test assembly of mass and Poisson operator QFunction #include #include #include #include "t535-operator.h" int main(int argc, char **argv) { Ceed ceed; CeedElemRestriction Erestrictx, Erestrictu, Erestrictxi, Erestrictui, Erestrictqi; CeedBasis bx, bu; CeedQFunction qf_setup_mass, qf_setup_diff, qf_apply; CeedOperator op_setup_mass, op_setup_diff, op_apply; CeedVector qdata_mass, qdata_diff, X, A, U, V; CeedInt nelem = 6, P = 3, Q = 4, dim = 2; CeedInt nx = 3, ny = 2; CeedInt ndofs = (nx*2+1)*(ny*2+1), nqpts = nelem*Q*Q; CeedInt indx[nelem*P*P]; CeedScalar x[dim*ndofs], assembledTrue[ndofs]; CeedScalar *u; const CeedScalar *a, *v; CeedInit(argv[1], &ceed); // DoF Coordinates for (CeedInt i=0; i 1E-14) // LCOV_EXCL_START printf("[%d] Error in assembly: %f != %f\n", i, a[i], assembledTrue[i]); // LCOV_EXCL_STOP // Cleanup CeedQFunctionDestroy(&qf_setup_mass); CeedQFunctionDestroy(&qf_setup_diff); CeedQFunctionDestroy(&qf_apply); CeedOperatorDestroy(&op_setup_mass); CeedOperatorDestroy(&op_setup_diff); CeedOperatorDestroy(&op_apply); CeedElemRestrictionDestroy(&Erestrictu); CeedElemRestrictionDestroy(&Erestrictx); CeedElemRestrictionDestroy(&Erestrictui); CeedElemRestrictionDestroy(&Erestrictxi); CeedElemRestrictionDestroy(&Erestrictqi); CeedBasisDestroy(&bu); CeedBasisDestroy(&bx); CeedVectorDestroy(&X); CeedVectorDestroy(&A); CeedVectorDestroy(&qdata_mass); CeedVectorDestroy(&qdata_diff); CeedVectorDestroy(&U); CeedVectorDestroy(&V); CeedDestroy(&ceed); return 0; }