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