xref: /libCEED/tests/t302-basis.c (revision d1d35e2f02dc969aee8debf3fd943dd784aa847a)
14411cf47Sjeremylt /// @file
252bfb9bbSJeremy L Thompson /// Test Collocated Grad calculated matches basis with Lobatto points
352bfb9bbSJeremy L Thompson /// \test Test Collocated Grad calculated matches basis with Lobatto points
457c64913Sjeremylt #include <ceed.h>
5ec3da8bcSJed Brown #include <ceed/backend.h>
657c64913Sjeremylt #include <math.h>
757c64913Sjeremylt 
857c64913Sjeremylt int main(int argc, char **argv) {
957c64913Sjeremylt   Ceed ceed;
1052bfb9bbSJeremy L Thompson   CeedInt P=4, Q=4;
11*d1d35e2fSjeremylt   CeedScalar collo_grad_1d[Q*Q], collo_grad_1d_2[(P+2)*(P+2)];
1252bfb9bbSJeremy L Thompson   CeedBasis b;
1357c64913Sjeremylt 
1457c64913Sjeremylt   CeedInit(argv[1], &ceed);
15aedaa0e5Sjeremylt 
16*d1d35e2fSjeremylt   // Already collocated, GetCollocatedGrad will return grad_1d
1752bfb9bbSJeremy L Thompson   CeedBasisCreateTensorH1Lagrange(ceed, 1, 1, P, Q, CEED_GAUSS_LOBATTO, &b);
18*d1d35e2fSjeremylt   CeedBasisGetCollocatedGrad(b, collo_grad_1d);
19aedaa0e5Sjeremylt 
2052bfb9bbSJeremy L Thompson   for (int i=0; i<Q; i++) {
21b300f92cSjeremylt     fprintf(stdout, "%12s[%d]:", "collograd1d", i);
2252bfb9bbSJeremy L Thompson     for (int j=0; j<Q; j++) {
23*d1d35e2fSjeremylt       if (fabs(collo_grad_1d[j+Q*i]) <= 1E-14) collo_grad_1d[j+Q*i] = 0;
24*d1d35e2fSjeremylt       fprintf(stdout, "\t% 12.8f", collo_grad_1d[j+Q*i]);
2557c64913Sjeremylt     }
2652bfb9bbSJeremy L Thompson     fprintf(stdout, "\n");
2752bfb9bbSJeremy L Thompson   }
2852bfb9bbSJeremy L Thompson   CeedBasisDestroy(&b);
2957c64913Sjeremylt 
3052bfb9bbSJeremy L Thompson   // Q = P, not already collocated
3152bfb9bbSJeremy L Thompson   CeedBasisCreateTensorH1Lagrange(ceed, 1,  1, P, Q, CEED_GAUSS, &b);
32*d1d35e2fSjeremylt   CeedBasisGetCollocatedGrad(b, collo_grad_1d);
3352bfb9bbSJeremy L Thompson 
3452bfb9bbSJeremy L Thompson   for (int i=0; i<Q; i++) {
35b300f92cSjeremylt     fprintf(stdout, "%12s[%d]:", "collograd1d", i);
3652bfb9bbSJeremy L Thompson     for (int j=0; j<Q; j++) {
37*d1d35e2fSjeremylt       if (fabs(collo_grad_1d[j+Q*i]) <= 1E-14) collo_grad_1d[j+Q*i] = 0;
38*d1d35e2fSjeremylt       fprintf(stdout, "\t% 12.8f", collo_grad_1d[j+Q*i]);
3952bfb9bbSJeremy L Thompson     }
4052bfb9bbSJeremy L Thompson     fprintf(stdout, "\n");
4152bfb9bbSJeremy L Thompson   }
4252bfb9bbSJeremy L Thompson   CeedBasisDestroy(&b);
4352bfb9bbSJeremy L Thompson 
4452bfb9bbSJeremy L Thompson   // Q = P + 2, not already collocated
4552bfb9bbSJeremy L Thompson   CeedBasisCreateTensorH1Lagrange(ceed, 1,  1, P, P+2, CEED_GAUSS, &b);
46*d1d35e2fSjeremylt   CeedBasisGetCollocatedGrad(b, collo_grad_1d_2);
4752bfb9bbSJeremy L Thompson 
4852bfb9bbSJeremy L Thompson   for (int i=0; i<P+2; i++) {
49b300f92cSjeremylt     fprintf(stdout, "%12s[%d]:", "collograd1d", i);
5052bfb9bbSJeremy L Thompson     for (int j=0; j<P+2; j++) {
51*d1d35e2fSjeremylt       if (fabs(collo_grad_1d_2[j+(P+2)*i]) <= 1E-14) collo_grad_1d_2[j+(P+2)*i] = 0;
52*d1d35e2fSjeremylt       fprintf(stdout, "\t% 12.8f", collo_grad_1d_2[j+(P+2)*i]);
5352bfb9bbSJeremy L Thompson     }
5452bfb9bbSJeremy L Thompson     fprintf(stdout, "\n");
5552bfb9bbSJeremy L Thompson   }
5652bfb9bbSJeremy L Thompson   CeedBasisDestroy(&b);
5752bfb9bbSJeremy L Thompson 
5857c64913Sjeremylt   CeedDestroy(&ceed);
5957c64913Sjeremylt   return 0;
6057c64913Sjeremylt }
61