1 // Test Colocated Grad calculated matches basis with Lobatto points 2 #include <ceed.h> 3 #include <math.h> 4 5 int main(int argc, char **argv) { 6 Ceed ceed; 7 CeedInt P=4, Q=4; 8 CeedScalar colograd1d[Q*Q], colograd1d2[(P+2)*(P+2)]; 9 CeedBasis b; 10 11 CeedInit(argv[1], &ceed); 12 13 // Already colocated, GetColocatedGrad will return grad1d 14 CeedBasisCreateTensorH1Lagrange(ceed, 1, 1, P, Q, CEED_GAUSS_LOBATTO, &b); 15 CeedBasisGetColocatedGrad(b, colograd1d); 16 17 CeedBasisView(b, stdout); 18 for (int i=0; i<Q; i++) { 19 fprintf(stdout, "%12s[%d]:", "colograd1d", i); 20 for (int j=0; j<Q; j++) { 21 if (fabs(colograd1d[j+Q*i]) <= 1E-14) colograd1d[j+Q*i] = 0; 22 fprintf(stdout, "\t% 12.8f", colograd1d[j+Q*i]); 23 } 24 fprintf(stdout, "\n"); 25 } 26 CeedBasisDestroy(&b); 27 28 // Q = P, not already colocated 29 CeedBasisCreateTensorH1Lagrange(ceed, 1, 1, P, Q, CEED_GAUSS, &b); 30 CeedBasisGetColocatedGrad(b, colograd1d); 31 32 CeedBasisView(b, stdout); 33 for (int i=0; i<Q; i++) { 34 fprintf(stdout, "%12s[%d]:", "colograd1d", i); 35 for (int j=0; j<Q; j++) { 36 if (fabs(colograd1d[j+Q*i]) <= 1E-14) colograd1d[j+Q*i] = 0; 37 fprintf(stdout, "\t% 12.8f", colograd1d[j+Q*i]); 38 } 39 fprintf(stdout, "\n"); 40 } 41 CeedBasisDestroy(&b); 42 43 // Q = P + 2, not already colocated 44 CeedBasisCreateTensorH1Lagrange(ceed, 1, 1, P, P+2, CEED_GAUSS, &b); 45 CeedBasisGetColocatedGrad(b, colograd1d2); 46 47 CeedBasisView(b, stdout); 48 for (int i=0; i<P+2; i++) { 49 fprintf(stdout, "%12s[%d]:", "colograd1d", i); 50 for (int j=0; j<P+2; j++) { 51 if (fabs(colograd1d2[j+(P+2)*i]) <= 1E-14) colograd1d2[j+(P+2)*i] = 0; 52 fprintf(stdout, "\t% 12.8f", colograd1d2[j+(P+2)*i]); 53 } 54 fprintf(stdout, "\n"); 55 } 56 CeedBasisDestroy(&b); 57 58 CeedDestroy(&ceed); 59 return 0; 60 } 61