xref: /libCEED/tests/t201-elemrestriction.c (revision 57c64913cb6f06c2f6a40825dd942ceba0d2fe12)
1 // Test creation, use, and destruction of an identity element restriction
2 #include <ceed.h>
3 
4 int main(int argc, char **argv) {
5   Ceed ceed;
6   CeedVector x, y;
7   CeedInt ne = 3;
8   CeedScalar a[ne*2];
9   const CeedScalar *yy;
10   CeedElemRestriction r;
11 
12   CeedInit(argv[1], &ceed);
13   CeedVectorCreate(ceed, ne*2, &x);
14   for (CeedInt i=0; i<ne*2; i++) a[i] = 10 + i;
15   CeedVectorSetArray(x, CEED_MEM_HOST, CEED_USE_POINTER, a);
16 
17   CeedElemRestrictionCreateIdentity(ceed, ne, 2, ne*2, 1, &r);
18   CeedVectorCreate(ceed, ne*2, &y);
19   CeedVectorSetArray(y, CEED_MEM_HOST, CEED_COPY_VALUES, NULL); // Allocates array
20   CeedElemRestrictionApply(r, CEED_NOTRANSPOSE, CEED_NOTRANSPOSE, x, y,
21                            CEED_REQUEST_IMMEDIATE);
22   CeedVectorGetArrayRead(y, CEED_MEM_HOST, &yy);
23   for (CeedInt i=0; i<ne*2; i++) {
24     if (yy[i] != 10+i)
25       return CeedError(ceed, (int)i, "Error in restricted array y[%d] = %f",
26                        i, (double)yy[i]);
27   }
28   CeedVectorRestoreArrayRead(y, &yy);
29   CeedVectorDestroy(&x);
30   CeedVectorDestroy(&y);
31   CeedElemRestrictionDestroy(&r);
32   CeedDestroy(&ceed);
33   return 0;
34 }
35