1*edcde79dSjeremylt /// @file 2*edcde79dSjeremylt /// Test grad transpose with a 2D Simplex non-tensor H1 basis 3*edcde79dSjeremylt /// \test Test grad transposewith a 2D Simplex non-tensor H1 basis 4*edcde79dSjeremylt #include <ceed.h> 5*edcde79dSjeremylt #include <math.h> 6*edcde79dSjeremylt #include "t320-basis.h" 7*edcde79dSjeremylt 8*edcde79dSjeremylt int main(int argc, char **argv) { 9*edcde79dSjeremylt Ceed ceed; 10*edcde79dSjeremylt CeedVector In, Out; 11*edcde79dSjeremylt const CeedInt P = 6, Q = 4, dim = 2; 12*edcde79dSjeremylt CeedBasis b; 13*edcde79dSjeremylt CeedScalar qref[dim*Q], qweight[Q]; 14*edcde79dSjeremylt CeedScalar interp[P*Q], grad[dim*P*Q]; 15*edcde79dSjeremylt const CeedScalar *out; 16*edcde79dSjeremylt CeedScalar colsum[P]; 17*edcde79dSjeremylt 18*edcde79dSjeremylt buildmats(qref, qweight, interp, grad); 19*edcde79dSjeremylt 20*edcde79dSjeremylt CeedInit(argv[1], &ceed); 21*edcde79dSjeremylt 22*edcde79dSjeremylt for (int i=0; i<P; i++) { 23*edcde79dSjeremylt colsum[i] = 0; 24*edcde79dSjeremylt for (int j=0; j<Q*dim; j++) { 25*edcde79dSjeremylt colsum[i] += grad[i+j*P]; 26*edcde79dSjeremylt } 27*edcde79dSjeremylt } 28*edcde79dSjeremylt 29*edcde79dSjeremylt CeedBasisCreateH1(ceed, CEED_TRIANGLE, 1, P, Q, interp, grad, qref, 30*edcde79dSjeremylt qweight, &b); 31*edcde79dSjeremylt 32*edcde79dSjeremylt CeedVectorCreate(ceed, Q*dim, &In); 33*edcde79dSjeremylt CeedVectorSetValue(In, 1); 34*edcde79dSjeremylt CeedVectorCreate(ceed, P, &Out); 35*edcde79dSjeremylt CeedVectorSetValue(Out, 0); 36*edcde79dSjeremylt 37*edcde79dSjeremylt CeedBasisApply(b, 1, CEED_TRANSPOSE, CEED_EVAL_GRAD, In, Out); 38*edcde79dSjeremylt 39*edcde79dSjeremylt // Check values at quadrature points 40*edcde79dSjeremylt CeedVectorGetArrayRead(Out, CEED_MEM_HOST, &out); 41*edcde79dSjeremylt for (int i=0; i<P; i++) 42*edcde79dSjeremylt if (fabs(colsum[i] - out[i]) > 1e-14) 43*edcde79dSjeremylt // LCOV_EXCL_START 44*edcde79dSjeremylt printf("[%d] %f != %f\n", i, out[i], colsum[i]); 45*edcde79dSjeremylt // LCOV_EXCL_STOP 46*edcde79dSjeremylt CeedVectorRestoreArrayRead(Out, &out); 47*edcde79dSjeremylt 48*edcde79dSjeremylt CeedVectorDestroy(&In); 49*edcde79dSjeremylt CeedVectorDestroy(&Out); 50*edcde79dSjeremylt CeedBasisDestroy(&b); 51*edcde79dSjeremylt CeedDestroy(&ceed); 52*edcde79dSjeremylt return 0; 53*edcde79dSjeremylt } 54