xref: /libCEED/tests/t310-basis.c (revision 4febb80102c5c87c6a273a85e30d4673d8552be6)
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  basis;
11   CeedVector u, v;
12   int        i, dim = 2, p = 4, q = 4, len = (int)(pow((CeedScalar)(q), dim) + 0.4);
13 
14   CeedInit(argv[1], &ceed);
15 
16   CeedVectorCreate(ceed, len, &u);
17   CeedVectorCreate(ceed, len, &v);
18 
19   {
20     CeedScalar u_array[len];
21 
22     for (i = 0; i < len; i++) u_array[i] = 1.0;
23     CeedVectorSetArray(u, CEED_MEM_HOST, CEED_COPY_VALUES, u_array);
24   }
25 
26   CeedBasisCreateTensorH1Lagrange(ceed, dim, 1, p, q, CEED_GAUSS_LOBATTO, &basis);
27 
28   CeedBasisApply(basis, 1, CEED_NOTRANSPOSE, CEED_EVAL_INTERP, u, v);
29 
30   {
31     const CeedScalar *v_array;
32 
33     CeedVectorGetArrayRead(v, CEED_MEM_HOST, &v_array);
34     for (i = 0; i < len; i++) {
35       if (fabs(v_array[i] - 1.) > 10. * CEED_EPSILON) printf("v[%" CeedInt_FMT "] = %f != 1.\n", i, v_array[i]);
36     }
37     CeedVectorRestoreArrayRead(v, &v_array);
38   }
39 
40   CeedBasisDestroy(&basis);
41   CeedVectorDestroy(&u);
42   CeedVectorDestroy(&v);
43   CeedDestroy(&ceed);
44   return 0;
45 }
46