xref: /libCEED/tests/t302-basis.c (revision 52bfb9bbf17f17edbcd45876cdc8689a879bc683)
14411cf47Sjeremylt /// @file
2*52bfb9bbSJeremy L Thompson /// Test Collocated Grad calculated matches basis with Lobatto points
3*52bfb9bbSJeremy L Thompson /// \test Test Collocated Grad calculated matches basis with Lobatto points
457c64913Sjeremylt #include <ceed.h>
5*52bfb9bbSJeremy L Thompson #include <ceed-backend.h>
657c64913Sjeremylt #include <math.h>
757c64913Sjeremylt 
857c64913Sjeremylt int main(int argc, char **argv) {
957c64913Sjeremylt   Ceed ceed;
10*52bfb9bbSJeremy L Thompson   CeedInt P=4, Q=4;
11*52bfb9bbSJeremy L Thompson   CeedScalar colograd1d[Q*Q], colograd1d2[(P+2)*(P+2)];
12*52bfb9bbSJeremy L Thompson   CeedBasis b;
1357c64913Sjeremylt 
1457c64913Sjeremylt   CeedInit(argv[1], &ceed);
15aedaa0e5Sjeremylt 
16*52bfb9bbSJeremy L Thompson   // Already collocated, GetCollocatedGrad will return grad1d
17*52bfb9bbSJeremy L Thompson   CeedBasisCreateTensorH1Lagrange(ceed, 1, 1, P, Q, CEED_GAUSS_LOBATTO, &b);
18*52bfb9bbSJeremy L Thompson   CeedBasisGetCollocatedGrad(b, colograd1d);
19aedaa0e5Sjeremylt 
20*52bfb9bbSJeremy L Thompson   CeedBasisView(b, stdout);
21*52bfb9bbSJeremy L Thompson   for (int i=0; i<Q; i++) {
22*52bfb9bbSJeremy L Thompson     fprintf(stdout, "%12s[%d]:", "colograd1d", i);
23*52bfb9bbSJeremy L Thompson     for (int j=0; j<Q; j++) {
24*52bfb9bbSJeremy L Thompson       if (fabs(colograd1d[j+Q*i]) <= 1E-14) colograd1d[j+Q*i] = 0;
25*52bfb9bbSJeremy L Thompson       fprintf(stdout, "\t% 12.8f", colograd1d[j+Q*i]);
2657c64913Sjeremylt     }
27*52bfb9bbSJeremy L Thompson     fprintf(stdout, "\n");
28*52bfb9bbSJeremy L Thompson   }
29*52bfb9bbSJeremy L Thompson   CeedBasisDestroy(&b);
3057c64913Sjeremylt 
31*52bfb9bbSJeremy L Thompson   // Q = P, not already collocated
32*52bfb9bbSJeremy L Thompson   CeedBasisCreateTensorH1Lagrange(ceed, 1,  1, P, Q, CEED_GAUSS, &b);
33*52bfb9bbSJeremy L Thompson   CeedBasisGetCollocatedGrad(b, colograd1d);
34*52bfb9bbSJeremy L Thompson 
35*52bfb9bbSJeremy L Thompson   CeedBasisView(b, stdout);
36*52bfb9bbSJeremy L Thompson   for (int i=0; i<Q; i++) {
37*52bfb9bbSJeremy L Thompson     fprintf(stdout, "%12s[%d]:", "colograd1d", i);
38*52bfb9bbSJeremy L Thompson     for (int j=0; j<Q; j++) {
39*52bfb9bbSJeremy L Thompson       if (fabs(colograd1d[j+Q*i]) <= 1E-14) colograd1d[j+Q*i] = 0;
40*52bfb9bbSJeremy L Thompson       fprintf(stdout, "\t% 12.8f", colograd1d[j+Q*i]);
41*52bfb9bbSJeremy L Thompson     }
42*52bfb9bbSJeremy L Thompson     fprintf(stdout, "\n");
43*52bfb9bbSJeremy L Thompson   }
44*52bfb9bbSJeremy L Thompson   CeedBasisDestroy(&b);
45*52bfb9bbSJeremy L Thompson 
46*52bfb9bbSJeremy L Thompson   // Q = P + 2, not already collocated
47*52bfb9bbSJeremy L Thompson   CeedBasisCreateTensorH1Lagrange(ceed, 1,  1, P, P+2, CEED_GAUSS, &b);
48*52bfb9bbSJeremy L Thompson   CeedBasisGetCollocatedGrad(b, colograd1d2);
49*52bfb9bbSJeremy L Thompson 
50*52bfb9bbSJeremy L Thompson   CeedBasisView(b, stdout);
51*52bfb9bbSJeremy L Thompson   for (int i=0; i<P+2; i++) {
52*52bfb9bbSJeremy L Thompson     fprintf(stdout, "%12s[%d]:", "colograd1d", i);
53*52bfb9bbSJeremy L Thompson     for (int j=0; j<P+2; j++) {
54*52bfb9bbSJeremy L Thompson       if (fabs(colograd1d2[j+(P+2)*i]) <= 1E-14) colograd1d2[j+(P+2)*i] = 0;
55*52bfb9bbSJeremy L Thompson       fprintf(stdout, "\t% 12.8f", colograd1d2[j+(P+2)*i]);
56*52bfb9bbSJeremy L Thompson     }
57*52bfb9bbSJeremy L Thompson     fprintf(stdout, "\n");
58*52bfb9bbSJeremy L Thompson   }
59*52bfb9bbSJeremy L Thompson   CeedBasisDestroy(&b);
60*52bfb9bbSJeremy L Thompson 
6157c64913Sjeremylt   CeedDestroy(&ceed);
6257c64913Sjeremylt   return 0;
6357c64913Sjeremylt }
64