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; 91469ee4dSjeremylt CeedInt ne = 3; 101469ee4dSjeremylt CeedInt ind[4*ne]; 111469ee4dSjeremylt const CeedScalar *mm; 121469ee4dSjeremylt CeedElemRestriction r; 13*a8d32208Sjeremylt CeedTransposeMode lmode = CEED_NOTRANSPOSE; 141469ee4dSjeremylt 151469ee4dSjeremylt CeedInit(argv[1], &ceed); 161469ee4dSjeremylt 171469ee4dSjeremylt CeedVectorCreate(ceed, 3*ne+1, &mult); 181469ee4dSjeremylt CeedVectorSetValue(mult, 0); // Allocates array 191469ee4dSjeremylt 201469ee4dSjeremylt for (CeedInt i=0; i<ne; i++) { 211469ee4dSjeremylt ind[4*i+0] = i*3+0; 221469ee4dSjeremylt ind[4*i+1] = i*3+1; 231469ee4dSjeremylt ind[4*i+2] = i*3+2; 241469ee4dSjeremylt ind[4*i+3] = i*3+3; 251469ee4dSjeremylt } 26*a8d32208Sjeremylt CeedElemRestrictionCreate(ceed, lmode, ne, 4, 3*ne+1, 1, CEED_MEM_HOST, 271469ee4dSjeremylt CEED_USE_POINTER, ind, &r); 281469ee4dSjeremylt 29*a8d32208Sjeremylt CeedElemRestrictionGetMultiplicity(r, mult); 301469ee4dSjeremylt 311469ee4dSjeremylt CeedVectorGetArrayRead(mult, CEED_MEM_HOST, &mm); 32a2546046Sjeremylt for (CeedInt i=0; i<3*ne+1; i++) 331469ee4dSjeremylt if ((1 + (i > 0 && i < 3*ne && (i%3==0) ? 1 : 0)) != mm[i]) 34a2546046Sjeremylt // LCOV_EXCL_START 35288c0443SJeremy L Thompson printf("Error in multiplicity vector: mult[%d] = %f\n", i, (double)mm[i]); 36de996c55Sjeremylt // LCOV_EXCL_STOP 371469ee4dSjeremylt CeedVectorRestoreArrayRead(mult, &mm); 381469ee4dSjeremylt 391469ee4dSjeremylt CeedVectorDestroy(&mult); 401469ee4dSjeremylt CeedElemRestrictionDestroy(&r); 411469ee4dSjeremylt CeedDestroy(&ceed); 421469ee4dSjeremylt return 0; 431469ee4dSjeremylt } 44