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