xref: /libCEED/tests/t310-basis.c (revision 00d548f6cce3ebb77e7917d79b50a2a368cad12e)
1 /// @file
2 /// Test square Gauss Lobatto interp_1d is identity
3 /// \test Test square Gauss Lobatto interp_1d is identity
4 #include <ceed.h>
5 #include <math.h>
6 #include <stdio.h>
7 
8 int main(int argc, char **argv) {
9   Ceed              ceed;
10   CeedBasis         b;
11   CeedVector        U, V;
12   int               i, dim = 2, P_1d = 4, Q_1d = 4, len = (int)(pow((CeedScalar)(Q_1d), dim) + 0.4);
13   CeedScalar        u[len];
14   const CeedScalar *v;
15 
16   CeedInit(argv[1], &ceed);
17 
18   CeedVectorCreate(ceed, len, &U);
19   CeedVectorCreate(ceed, len, &V);
20 
21   for (i = 0; i < len; i++) u[i] = 1.0;
22   CeedVectorSetArray(U, CEED_MEM_HOST, CEED_USE_POINTER, u);
23 
24   CeedBasisCreateTensorH1Lagrange(ceed, dim, 1, P_1d, Q_1d, CEED_GAUSS_LOBATTO, &b);
25 
26   CeedBasisApply(b, 1, CEED_NOTRANSPOSE, CEED_EVAL_INTERP, U, V);
27 
28   CeedVectorGetArrayRead(V, CEED_MEM_HOST, &v);
29   for (i = 0; i < len; i++) {
30     if (fabs(v[i] - 1.) > 10. * CEED_EPSILON) printf("v[%" CeedInt_FMT "] = %f != 1.\n", i, v[i]);
31   }
32   CeedVectorRestoreArrayRead(V, &v);
33 
34   CeedBasisDestroy(&b);
35   CeedVectorDestroy(&U);
36   CeedVectorDestroy(&V);
37   CeedDestroy(&ceed);
38   return 0;
39 }
40