xref: /libCEED/tests/t209-elemrestriction.c (revision 621cd4619de62aa879af10f6c433e7e1cbbb1a1b)
1 /// @file
2 /// Test calculation of dof multiplicity in element restriction
3 /// \test Test calculation of dof multiplicity in element restriction
4 #include <ceed.h>
5 
6 int main(int argc, char **argv) {
7   Ceed ceed;
8   CeedVector mult;
9   CeedInt ne = 3;
10   CeedInt ind[4*ne];
11   const CeedScalar *mm;
12   CeedElemRestriction r;
13   CeedInterlaceMode imode = CEED_NONINTERLACED;
14 
15   CeedInit(argv[1], &ceed);
16 
17   CeedVectorCreate(ceed, 3*ne+1, &mult);
18   CeedVectorSetValue(mult, 0); // Allocates array
19 
20   for (CeedInt i=0; i<ne; i++) {
21     ind[4*i+0] = i*3+0;
22     ind[4*i+1] = i*3+1;
23     ind[4*i+2] = i*3+2;
24     ind[4*i+3] = i*3+3;
25   }
26   CeedElemRestrictionCreate(ceed, imode, ne, 4, 3*ne+1, 1, CEED_MEM_HOST,
27                             CEED_USE_POINTER, ind, &r);
28 
29   CeedElemRestrictionGetMultiplicity(r, mult);
30 
31   CeedVectorGetArrayRead(mult, CEED_MEM_HOST, &mm);
32   for (CeedInt i=0; i<3*ne+1; i++)
33     if ((1 + (i > 0 && i < 3*ne && (i%3==0) ? 1 : 0)) != mm[i])
34       // LCOV_EXCL_START
35       printf("Error in multiplicity vector: mult[%d] = %f\n", i, (double)mm[i]);
36   // LCOV_EXCL_STOP
37   CeedVectorRestoreArrayRead(mult, &mm);
38 
39   CeedVectorDestroy(&mult);
40   CeedElemRestrictionDestroy(&r);
41   CeedDestroy(&ceed);
42   return 0;
43 }
44