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