xref: /libCEED/tests/t310-basis.c (revision cdf95791513f7c35170bef3ba2e19f272fe04533)
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 <stdio.h>
6 #include <math.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),
13                                    dim) + 0.4);
14   CeedScalar u[len];
15   const CeedScalar *v;
16 
17   CeedInit(argv[1], &ceed);
18 
19   CeedVectorCreate(ceed, len, &U);
20   CeedVectorCreate(ceed, len, &V);
21 
22   for (i = 0; i < len; i++)
23     u[i] = 1.0;
24   CeedVectorSetArray(U, CEED_MEM_HOST, CEED_USE_POINTER, u);
25 
26   CeedBasisCreateTensorH1Lagrange(ceed, dim, 1, P_1d, Q_1d,
27                                   CEED_GAUSS_LOBATTO, &b);
28 
29   CeedBasisApply(b, 1, CEED_NOTRANSPOSE, CEED_EVAL_INTERP, U, V);
30 
31   CeedVectorGetArrayRead(V, CEED_MEM_HOST, &v);
32   for (i = 0; i < len; i++)
33     if (fabs(v[i] - 1.) > 10.*CEED_EPSILON)
34       // LCOV_EXCL_START
35       printf("v[%d] = %f != 1.\n", i, v[i]);
36   // LCOV_EXCL_STOP
37   CeedVectorRestoreArrayRead(V, &v);
38 
39   CeedBasisDestroy(&b);
40   CeedVectorDestroy(&U);
41   CeedVectorDestroy(&V);
42   CeedDestroy(&ceed);
43   return 0;
44 }
45