xref: /libCEED/tests/t301-basis.c (revision aedaa0e5fd3a3e03ad33ad8a6308ac527f4f900e)
14411cf47Sjeremylt /// @file
24411cf47Sjeremylt /// Test square Gauss Lobatto interp1d is identity
34411cf47Sjeremylt /// \test Test square Gauss Lobatto interp1d is identity
457c64913Sjeremylt #include <ceed.h>
557c64913Sjeremylt #include <stdio.h>
657c64913Sjeremylt #include <math.h>
757c64913Sjeremylt 
857c64913Sjeremylt int main(int argc, char **argv) {
957c64913Sjeremylt   Ceed ceed;
1057c64913Sjeremylt   CeedBasis b;
11*aedaa0e5Sjeremylt   CeedVector U, V;
1257c64913Sjeremylt   int i, dim = 2, P1d = 4, Q1d = 4, len = (int)(pow((double)(Q1d), dim) + 0.4);
13*aedaa0e5Sjeremylt   CeedScalar u[len];
14*aedaa0e5Sjeremylt   const CeedScalar *v;
1557c64913Sjeremylt 
1657c64913Sjeremylt   CeedInit(argv[1], &ceed);
17*aedaa0e5Sjeremylt 
18*aedaa0e5Sjeremylt   CeedVectorCreate(ceed, len, &U);
19*aedaa0e5Sjeremylt   CeedVectorCreate(ceed, len, &V);
20*aedaa0e5Sjeremylt 
2157c64913Sjeremylt   for (i = 0; i < len; i++) {
2257c64913Sjeremylt     u[i] = 1.0;
2357c64913Sjeremylt   }
24*aedaa0e5Sjeremylt   CeedVectorSetArray(U, CEED_MEM_HOST, CEED_USE_POINTER, (CeedScalar *)&u);
25*aedaa0e5Sjeremylt 
2657c64913Sjeremylt   CeedBasisCreateTensorH1Lagrange(ceed, dim, 1, P1d, Q1d, CEED_GAUSS_LOBATTO, &b);
27*aedaa0e5Sjeremylt 
28*aedaa0e5Sjeremylt   CeedBasisApply(b, 1, CEED_NOTRANSPOSE, CEED_EVAL_INTERP, U, V);
29*aedaa0e5Sjeremylt 
30*aedaa0e5Sjeremylt   CeedVectorGetArrayRead(V, CEED_MEM_HOST, &v);
3157c64913Sjeremylt   for (i = 0; i < len; i++) {
3257c64913Sjeremylt     if (fabs(v[i] - 1.) > 1e-15) printf("v[%d] = %f != 1.\n", i, v[i]);
3357c64913Sjeremylt   }
34*aedaa0e5Sjeremylt   CeedVectorRestoreArrayRead(V, &v);
35*aedaa0e5Sjeremylt 
3657c64913Sjeremylt   CeedBasisDestroy(&b);
37*aedaa0e5Sjeremylt   CeedVectorDestroy(&U);
38*aedaa0e5Sjeremylt   CeedVectorDestroy(&V);
3957c64913Sjeremylt   CeedDestroy(&ceed);
4057c64913Sjeremylt   return 0;
4157c64913Sjeremylt }
42