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