/// @file /// Test full assembly of composite operator (see t538) /// \test Test full assembly of composite operator #include #include #include int main(int argc, char **argv) { Ceed ceed; CeedElemRestriction Erestrictx, Erestrictu, Erestrictui, ErestrictqiMass, ErestrictqiDiff; CeedBasis bx, bu; CeedQFunction qf_setupMass, qf_mass, qf_setupDiff, qf_diff; CeedOperator op_setupMass, op_mass, op_setupDiff, op_diff, op_apply; CeedVector qdataMass, qdataDiff, X, U, V; CeedInt P = 3, Q = 4, dim = 2; CeedInt nx = 3, ny = 2; CeedInt nelem = nx * ny; CeedInt ndofs = (nx*2+1)*(ny*2+1), nqpts = nelem*Q*Q; CeedInt indx[nelem*P*P]; CeedScalar assembled[ndofs*ndofs]; CeedScalar x[dim*ndofs], assembledTrue[ndofs*ndofs]; CeedScalar *u; const CeedScalar *v; CeedInit(argv[1], &ceed); // DoF Coordinates for (CeedInt i=0; i 1e-14) // LCOV_EXCL_START printf("[%d,%d] Error in assembly: %f != %f\n", i, j, assembled[j*ndofs+i], assembledTrue[j*ndofs+i]); // LCOV_EXCL_STOP // Cleanup free(rows); free(cols); CeedVectorDestroy(&values); CeedQFunctionDestroy(&qf_setupMass); CeedQFunctionDestroy(&qf_setupDiff); CeedQFunctionDestroy(&qf_diff); CeedQFunctionDestroy(&qf_mass); CeedOperatorDestroy(&op_setupMass); CeedOperatorDestroy(&op_setupDiff); CeedOperatorDestroy(&op_mass); CeedOperatorDestroy(&op_diff); CeedOperatorDestroy(&op_apply); CeedElemRestrictionDestroy(&Erestrictu); CeedElemRestrictionDestroy(&Erestrictx); CeedElemRestrictionDestroy(&Erestrictui); CeedElemRestrictionDestroy(&ErestrictqiMass); CeedElemRestrictionDestroy(&ErestrictqiDiff); CeedBasisDestroy(&bu); CeedBasisDestroy(&bx); CeedVectorDestroy(&X); CeedVectorDestroy(&qdataMass); CeedVectorDestroy(&qdataDiff); CeedVectorDestroy(&U); CeedVectorDestroy(&V); CeedDestroy(&ceed); return 0; }