xref: /libCEED/tests/t310-basis.c (revision 684f49355e356904c2a47c5a7e5ff618ae05b0a6)
1a8de75f0Sjeremylt /// @file
2d1d35e2fSjeremylt /// Test square Gauss Lobatto interp_1d is identity
3d1d35e2fSjeremylt /// \test Test square Gauss Lobatto interp_1d is identity
4a8de75f0Sjeremylt #include <ceed.h>
552bfb9bbSJeremy L Thompson #include <math.h>
62b730f8bSJeremy L Thompson #include <stdio.h>
7a8de75f0Sjeremylt 
main(int argc,char ** argv)8a8de75f0Sjeremylt int main(int argc, char **argv) {
9a8de75f0Sjeremylt   Ceed       ceed;
10*4fee36f0SJeremy L Thompson   CeedBasis  basis;
11*4fee36f0SJeremy L Thompson   CeedVector u, v;
12*4fee36f0SJeremy L Thompson   int        i, dim = 2, p = 4, q = 4, len = (int)(pow((CeedScalar)(q), dim) + 0.4);
13a8de75f0Sjeremylt 
14a8de75f0Sjeremylt   CeedInit(argv[1], &ceed);
1552bfb9bbSJeremy L Thompson 
16*4fee36f0SJeremy L Thompson   CeedVectorCreate(ceed, len, &u);
17*4fee36f0SJeremy L Thompson   CeedVectorCreate(ceed, len, &v);
1852bfb9bbSJeremy L Thompson 
19*4fee36f0SJeremy L Thompson   {
20*4fee36f0SJeremy L Thompson     CeedScalar u_array[len];
2152bfb9bbSJeremy L Thompson 
22*4fee36f0SJeremy L Thompson     for (i = 0; i < len; i++) u_array[i] = 1.0;
23*4fee36f0SJeremy L Thompson     CeedVectorSetArray(u, CEED_MEM_HOST, CEED_COPY_VALUES, u_array);
242b730f8bSJeremy L Thompson   }
25a8de75f0Sjeremylt 
26*4fee36f0SJeremy L Thompson   CeedBasisCreateTensorH1Lagrange(ceed, dim, 1, p, q, CEED_GAUSS_LOBATTO, &basis);
27*4fee36f0SJeremy L Thompson 
28*4fee36f0SJeremy L Thompson   CeedBasisApply(basis, 1, CEED_NOTRANSPOSE, CEED_EVAL_INTERP, u, v);
29*4fee36f0SJeremy L Thompson 
30*4fee36f0SJeremy L Thompson   {
31*4fee36f0SJeremy L Thompson     const CeedScalar *v_array;
32*4fee36f0SJeremy L Thompson 
33*4fee36f0SJeremy L Thompson     CeedVectorGetArrayRead(v, CEED_MEM_HOST, &v_array);
34*4fee36f0SJeremy L Thompson     for (i = 0; i < len; i++) {
35*4fee36f0SJeremy L Thompson       if (fabs(v_array[i] - 1.) > 10. * CEED_EPSILON) printf("v[%" CeedInt_FMT "] = %f != 1.\n", i, v_array[i]);
36*4fee36f0SJeremy L Thompson     }
37*4fee36f0SJeremy L Thompson     CeedVectorRestoreArrayRead(v, &v_array);
38*4fee36f0SJeremy L Thompson   }
39*4fee36f0SJeremy L Thompson 
40*4fee36f0SJeremy L Thompson   CeedBasisDestroy(&basis);
41*4fee36f0SJeremy L Thompson   CeedVectorDestroy(&u);
42*4fee36f0SJeremy L Thompson   CeedVectorDestroy(&v);
43a8de75f0Sjeremylt   CeedDestroy(&ceed);
44a8de75f0Sjeremylt   return 0;
45a8de75f0Sjeremylt }
46