xref: /libCEED/tests/t209-elemrestriction.c (revision d1d35e2f02dc969aee8debf3fd943dd784aa847a)
11469ee4dSjeremylt /// @file
21469ee4dSjeremylt /// Test calculation of dof multiplicity in element restriction
31469ee4dSjeremylt /// \test Test calculation of dof multiplicity in element restriction
41469ee4dSjeremylt #include <ceed.h>
51469ee4dSjeremylt 
61469ee4dSjeremylt int main(int argc, char **argv) {
71469ee4dSjeremylt   Ceed ceed;
81469ee4dSjeremylt   CeedVector mult;
9*d1d35e2fSjeremylt   CeedInt num_elem = 3;
10*d1d35e2fSjeremylt   CeedInt ind[4*num_elem];
111469ee4dSjeremylt   const CeedScalar *mm;
121469ee4dSjeremylt   CeedElemRestriction r;
131469ee4dSjeremylt 
141469ee4dSjeremylt   CeedInit(argv[1], &ceed);
151469ee4dSjeremylt 
16*d1d35e2fSjeremylt   CeedVectorCreate(ceed, 3*num_elem+1, &mult);
171469ee4dSjeremylt   CeedVectorSetValue(mult, 0); // Allocates array
181469ee4dSjeremylt 
19*d1d35e2fSjeremylt   for (CeedInt i=0; i<num_elem; i++) {
201469ee4dSjeremylt     ind[4*i+0] = i*3+0;
211469ee4dSjeremylt     ind[4*i+1] = i*3+1;
221469ee4dSjeremylt     ind[4*i+2] = i*3+2;
231469ee4dSjeremylt     ind[4*i+3] = i*3+3;
241469ee4dSjeremylt   }
25*d1d35e2fSjeremylt   CeedElemRestrictionCreate(ceed, num_elem, 4, 1, 1, 3*num_elem+1, CEED_MEM_HOST,
261469ee4dSjeremylt                             CEED_USE_POINTER, ind, &r);
271469ee4dSjeremylt 
28a8d32208Sjeremylt   CeedElemRestrictionGetMultiplicity(r, mult);
291469ee4dSjeremylt 
301469ee4dSjeremylt   CeedVectorGetArrayRead(mult, CEED_MEM_HOST, &mm);
31*d1d35e2fSjeremylt   for (CeedInt i=0; i<3*num_elem+1; i++)
32*d1d35e2fSjeremylt     if ((1 + (i > 0 && i < 3*num_elem && (i%3==0) ? 1 : 0)) != mm[i])
33a2546046Sjeremylt       // LCOV_EXCL_START
34288c0443SJeremy L Thompson       printf("Error in multiplicity vector: mult[%d] = %f\n", i, (double)mm[i]);
35de996c55Sjeremylt   // LCOV_EXCL_STOP
361469ee4dSjeremylt   CeedVectorRestoreArrayRead(mult, &mm);
371469ee4dSjeremylt 
381469ee4dSjeremylt   CeedVectorDestroy(&mult);
391469ee4dSjeremylt   CeedElemRestrictionDestroy(&r);
401469ee4dSjeremylt   CeedDestroy(&ceed);
411469ee4dSjeremylt   return 0;
421469ee4dSjeremylt }
43