10036de2cSjeremylt /// @file 20036de2cSjeremylt /// Test creation, use, and destruction of a blocked element restriction with multiple components in the lvector, and libCEED owns ind pointer 30036de2cSjeremylt /// \test Test creation, use, and destruction of a blocked element restriction with multiple components in the lvector, and libCEED owns ind pointer 40036de2cSjeremylt #include <stdlib.h> 50036de2cSjeremylt #include <ceed.h> 60036de2cSjeremylt 70036de2cSjeremylt int main(int argc, char **argv) { 80036de2cSjeremylt Ceed ceed; 90036de2cSjeremylt CeedVector x, y; 100036de2cSjeremylt CeedInt ne = 8; 110036de2cSjeremylt CeedInt blksize = 5; 120036de2cSjeremylt CeedInt ncomp = 3; 130036de2cSjeremylt CeedInt *ind = malloc(sizeof(CeedInt)*2*ne); 140036de2cSjeremylt CeedScalar a[ncomp*(ne+1)]; 150036de2cSjeremylt CeedElemRestriction r; 160036de2cSjeremylt 170036de2cSjeremylt CeedInit(argv[1], &ceed); 180036de2cSjeremylt 190036de2cSjeremylt CeedVectorCreate(ceed, (ne+1)*ncomp, &x); 200036de2cSjeremylt for (CeedInt i=0; i<(ne+1); i++) { 210036de2cSjeremylt a[i+0*(ne+1)] = 10 + i; 220036de2cSjeremylt a[i+1*(ne+1)] = 20 + i; 230036de2cSjeremylt a[i+2*(ne+1)] = 30 + i; 240036de2cSjeremylt } 250036de2cSjeremylt CeedVectorSetArray(x, CEED_MEM_HOST, CEED_USE_POINTER, a); 260036de2cSjeremylt CeedVectorView(x, "%12.8f", stdout); 270036de2cSjeremylt for (CeedInt i=0; i<ne; i++) { 280036de2cSjeremylt ind[2*i+0] = i; 290036de2cSjeremylt ind[2*i+1] = i+1; 300036de2cSjeremylt } 31*d979a051Sjeremylt CeedElemRestrictionCreateBlocked(ceed, ne, 2, blksize, ncomp, ne+1, 32*d979a051Sjeremylt ncomp*(ne+1), CEED_MEM_HOST, 33*d979a051Sjeremylt CEED_OWN_POINTER, ind, &r); 340036de2cSjeremylt CeedVectorCreate(ceed, 2*blksize*2*ncomp, &y); 350036de2cSjeremylt CeedVectorSetValue(y, 0); // Allocates array 360036de2cSjeremylt 370036de2cSjeremylt // NoTranspose 380036de2cSjeremylt CeedElemRestrictionApply(r, CEED_NOTRANSPOSE, x, y, CEED_REQUEST_IMMEDIATE); 390036de2cSjeremylt CeedVectorView(y, "%12.8f", stdout); 400036de2cSjeremylt 410036de2cSjeremylt // Transpose 420036de2cSjeremylt CeedVectorGetArray(x, CEED_MEM_HOST, (CeedScalar **)&a); 430036de2cSjeremylt for (CeedInt i=0; i<(ne+1)*ncomp; i++) 440036de2cSjeremylt a[i] = 0; 450036de2cSjeremylt CeedVectorRestoreArray(x, (CeedScalar **)&a); 460036de2cSjeremylt CeedElemRestrictionApply(r, CEED_TRANSPOSE, y, x, CEED_REQUEST_IMMEDIATE); 470036de2cSjeremylt CeedVectorView(x, "%12.8f", stdout); 480036de2cSjeremylt 490036de2cSjeremylt CeedVectorDestroy(&x); 500036de2cSjeremylt CeedVectorDestroy(&y); 510036de2cSjeremylt CeedElemRestrictionDestroy(&r); 520036de2cSjeremylt CeedDestroy(&ceed); 530036de2cSjeremylt return 0; 540036de2cSjeremylt } 55