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