1*ea970691Sjeremylt /// @file 2*ea970691Sjeremylt /// Test creation, use, and destruction of a blocked element restriction with multiple components in the lvector, and libCEED owns ind pointer 3*ea970691Sjeremylt /// \test Test creation, use, and destruction of a blocked element restriction with multiple components in the lvector, and libCEED owns ind pointer 4*ea970691Sjeremylt #include <stdlib.h> 5*ea970691Sjeremylt #include <ceed.h> 6*ea970691Sjeremylt 7*ea970691Sjeremylt int main(int argc, char **argv) { 8*ea970691Sjeremylt Ceed ceed; 9*ea970691Sjeremylt CeedVector x, y; 10*ea970691Sjeremylt CeedInt ne = 8; 11*ea970691Sjeremylt CeedInt blksize = 5; 12*ea970691Sjeremylt CeedInt ncomp = 3; 13*ea970691Sjeremylt CeedInt *ind = malloc(sizeof(CeedInt)*2*ne); 14*ea970691Sjeremylt CeedScalar a[ncomp*(ne+1)]; 15*ea970691Sjeremylt CeedElemRestriction r; 16*ea970691Sjeremylt 17*ea970691Sjeremylt CeedInit(argv[1], &ceed); 18*ea970691Sjeremylt 19*ea970691Sjeremylt CeedVectorCreate(ceed, (ne+1)*ncomp, &x); 20*ea970691Sjeremylt for (CeedInt i=0; i<(ne+1); i++) { 21*ea970691Sjeremylt a[i+0*(ne+1)] = 10 + i; 22*ea970691Sjeremylt a[i+1*(ne+1)] = 20 + i; 23*ea970691Sjeremylt a[i+2*(ne+1)] = 30 + i; 24*ea970691Sjeremylt } 25*ea970691Sjeremylt CeedVectorSetArray(x, CEED_MEM_HOST, CEED_USE_POINTER, a); 26*ea970691Sjeremylt CeedVectorView(x, "%12.8f", stdout); 27*ea970691Sjeremylt for (CeedInt i=0; i<ne; i++) { 28*ea970691Sjeremylt ind[2*i+0] = i; 29*ea970691Sjeremylt ind[2*i+1] = i+1; 30*ea970691Sjeremylt } 31*ea970691Sjeremylt CeedElemRestrictionCreateBlocked(ceed, ne, 2, blksize, ne+1, ncomp, 32*ea970691Sjeremylt CEED_MEM_HOST, CEED_OWN_POINTER, ind, &r); 33*ea970691Sjeremylt CeedVectorCreate(ceed, 2*blksize*2*ncomp, &y); 34*ea970691Sjeremylt CeedVectorSetValue(y, 0); // Allocates array 35*ea970691Sjeremylt 36*ea970691Sjeremylt // NoTranspose 37*ea970691Sjeremylt CeedElemRestrictionApply(r, CEED_NOTRANSPOSE, CEED_NOTRANSPOSE, x, y, 38*ea970691Sjeremylt CEED_REQUEST_IMMEDIATE); 39*ea970691Sjeremylt CeedVectorView(y, "%12.8f", stdout); 40*ea970691Sjeremylt 41*ea970691Sjeremylt // Transpose 42*ea970691Sjeremylt CeedVectorGetArray(x, CEED_MEM_HOST, (CeedScalar **)&a); 43*ea970691Sjeremylt for (CeedInt i=0; i<(ne+1)*ncomp; i++) 44*ea970691Sjeremylt a[i] = 0; 45*ea970691Sjeremylt CeedVectorRestoreArray(x, (CeedScalar **)&a); 46*ea970691Sjeremylt CeedElemRestrictionApply(r, CEED_TRANSPOSE, CEED_NOTRANSPOSE, y, x, 47*ea970691Sjeremylt CEED_REQUEST_IMMEDIATE); 48*ea970691Sjeremylt CeedVectorView(x, "%12.8f", stdout); 49*ea970691Sjeremylt 50*ea970691Sjeremylt CeedVectorDestroy(&x); 51*ea970691Sjeremylt CeedVectorDestroy(&y); 52*ea970691Sjeremylt CeedElemRestrictionDestroy(&r); 53*ea970691Sjeremylt CeedDestroy(&ceed); 54*ea970691Sjeremylt return 0; 55*ea970691Sjeremylt } 56