/// @file /// Test creation creation, action, and destruction for mass matrix operator /// \test Test creation creation, action, and destruction for mass matrix operator #include #include #include #include "t320-basis.h" #include "t510-operator.h" /* The mesh comprises of two rows of 3 quadralaterals followed by one row of 6 triangles: _ _ _ |_|_|_| |_|_|_| |/|/|/| */ int main(int argc, char **argv) { Ceed ceed; CeedElemRestriction ErestrictxTet, ErestrictuTet, ErestrictxiTet, ErestrictuiTet, ErestrictxHex, ErestrictuHex, ErestrictxiHex, ErestrictuiHex; CeedBasis bxTet, buTet, bxHex, buHex; CeedQFunction qf_setupTet, qf_massTet, qf_setupHex, qf_massHex; CeedOperator op_setupTet, op_massTet, op_setupHex, op_massHex, op_setup, op_mass; CeedVector qdataTet, qdataHex, X, U, V; const CeedScalar *hv; CeedInt nelemTet = 6, PTet = 6, QTet = 4, nelemHex = 6, PHex = 3, QHex = 4, dim = 2; CeedInt nx = 3, ny = 3, nxTet = 3, nyTet = 1, nxHex = 3; CeedInt row, col, offset; CeedInt ndofs = (nx*2+1)*(ny*2+1), nqptsTet = nelemTet*QTet, nqptsHex = nelemHex*QHex*QHex; CeedInt indxTet[nelemTet*PTet], indxHex[nelemHex*PHex*PHex]; CeedScalar x[dim*ndofs]; CeedScalar qref[dim*QTet], qweight[QTet]; CeedScalar interp[PTet*QTet], grad[dim*PTet*QTet]; CeedScalar sum; CeedInit(argv[1], &ceed); // DoF Coordinates for (CeedInt i=0; i1e-10) printf("Computed Area: %f != True Area: 1.0\n", sum); CeedVectorRestoreArrayRead(V, &hv); // Apply Add CeedVectorSetValue(V, 1.0); CeedOperatorApplyAdd(op_mass, U, V, CEED_REQUEST_IMMEDIATE); // Check output CeedVectorGetArrayRead(V, CEED_MEM_HOST, &hv); sum = -ndofs; for (CeedInt i=0; i1e-10) printf("Computed Area: %f != True Area: 1.0\n", sum); CeedVectorRestoreArrayRead(V, &hv); // Cleanup CeedQFunctionDestroy(&qf_setupTet); CeedQFunctionDestroy(&qf_massTet); CeedOperatorDestroy(&op_setupTet); CeedOperatorDestroy(&op_massTet); CeedQFunctionDestroy(&qf_setupHex); CeedQFunctionDestroy(&qf_massHex); CeedOperatorDestroy(&op_setupHex); CeedOperatorDestroy(&op_massHex); CeedOperatorDestroy(&op_setup); CeedOperatorDestroy(&op_mass); CeedElemRestrictionDestroy(&ErestrictuTet); CeedElemRestrictionDestroy(&ErestrictxTet); CeedElemRestrictionDestroy(&ErestrictuiTet); CeedElemRestrictionDestroy(&ErestrictxiTet); CeedElemRestrictionDestroy(&ErestrictuHex); CeedElemRestrictionDestroy(&ErestrictxHex); CeedElemRestrictionDestroy(&ErestrictuiHex); CeedElemRestrictionDestroy(&ErestrictxiHex); CeedBasisDestroy(&buTet); CeedBasisDestroy(&bxTet); CeedBasisDestroy(&buHex); CeedBasisDestroy(&bxHex); CeedVectorDestroy(&X); CeedVectorDestroy(&U); CeedVectorDestroy(&V); CeedVectorDestroy(&qdataTet); CeedVectorDestroy(&qdataHex); CeedDestroy(&ceed); return 0; }