xref: /libCEED/tests/t209-elemrestriction.c (revision fdf20d1507041ae081eb23cdb7397fbed40ecb8b)
11469ee4dSjeremylt /// @file
2*ac5aa7bcSJeremy L Thompson /// Test calculation of DoF multiplicity in element restriction
3*ac5aa7bcSJeremy L Thompson /// \test Test calculation of DoF multiplicity in element restriction
41469ee4dSjeremylt #include <ceed.h>
549aac155SJeremy L Thompson #include <stdio.h>
61469ee4dSjeremylt 
main(int argc,char ** argv)71469ee4dSjeremylt int main(int argc, char **argv) {
81469ee4dSjeremylt   Ceed                ceed;
91469ee4dSjeremylt   CeedVector          mult;
10d1d35e2fSjeremylt   CeedInt             num_elem = 3;
11d1d35e2fSjeremylt   CeedInt             ind[4 * num_elem];
124fee36f0SJeremy L Thompson   CeedElemRestriction elem_restriction;
131469ee4dSjeremylt 
141469ee4dSjeremylt   CeedInit(argv[1], &ceed);
151469ee4dSjeremylt 
16d1d35e2fSjeremylt   CeedVectorCreate(ceed, 3 * num_elem + 1, &mult);
171469ee4dSjeremylt 
18d1d35e2fSjeremylt   for (CeedInt i = 0; i < num_elem; i++) {
191469ee4dSjeremylt     ind[4 * i + 0] = i * 3 + 0;
201469ee4dSjeremylt     ind[4 * i + 1] = i * 3 + 1;
211469ee4dSjeremylt     ind[4 * i + 2] = i * 3 + 2;
221469ee4dSjeremylt     ind[4 * i + 3] = i * 3 + 3;
231469ee4dSjeremylt   }
244fee36f0SJeremy L Thompson   CeedElemRestrictionCreate(ceed, num_elem, 4, 1, 1, 3 * num_elem + 1, CEED_MEM_HOST, CEED_USE_POINTER, ind, &elem_restriction);
251469ee4dSjeremylt 
264fee36f0SJeremy L Thompson   CeedElemRestrictionGetMultiplicity(elem_restriction, mult);
274fee36f0SJeremy L Thompson   {
284fee36f0SJeremy L Thompson     const CeedScalar *mult_array;
291469ee4dSjeremylt 
304fee36f0SJeremy L Thompson     CeedVectorGetArrayRead(mult, CEED_MEM_HOST, &mult_array);
312b730f8bSJeremy L Thompson     for (CeedInt i = 0; i < 3 * num_elem + 1; i++) {
324fee36f0SJeremy L Thompson       if (mult_array[i] != (1 + (i > 0 && i < 3 * num_elem && (i % 3 == 0) ? 1 : 0))) {
33a2546046Sjeremylt         // LCOV_EXCL_START
344fee36f0SJeremy L Thompson         printf("Error in multiplicity vector: mult[%" CeedInt_FMT "] = %f\n", i, (CeedScalar)mult_array[i]);
35de996c55Sjeremylt         // LCOV_EXCL_STOP
362b730f8bSJeremy L Thompson       }
372b730f8bSJeremy L Thompson     }
384fee36f0SJeremy L Thompson     CeedVectorRestoreArrayRead(mult, &mult_array);
394fee36f0SJeremy L Thompson   }
401469ee4dSjeremylt 
411469ee4dSjeremylt   CeedVectorDestroy(&mult);
424fee36f0SJeremy L Thompson   CeedElemRestrictionDestroy(&elem_restriction);
431469ee4dSjeremylt   CeedDestroy(&ceed);
441469ee4dSjeremylt   return 0;
451469ee4dSjeremylt }
46