xref: /libCEED/tests/t307-basis.c (revision d7b241e67f6e33d9b297db3da3be4f167f32bbee) !
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