1be9261b7Sjeremylt /// @file 2be9261b7Sjeremylt /// Test creation, use, and destruction of a blocked element restriction 3be9261b7Sjeremylt /// \test Test creation, use, and destruction of a blocked element restriction 4be9261b7Sjeremylt #include <ceed.h> 5be9261b7Sjeremylt 6be9261b7Sjeremylt int main(int argc, char **argv) { 7be9261b7Sjeremylt Ceed ceed; 8be9261b7Sjeremylt CeedVector x, y; 9*d1d35e2fSjeremylt CeedInt num_elem = 8; 10*d1d35e2fSjeremylt CeedInt blk_size = 5; 11*d1d35e2fSjeremylt CeedInt elem_size = 2; 12*d1d35e2fSjeremylt CeedInt ind[elem_size*num_elem]; 13*d1d35e2fSjeremylt CeedScalar a[num_elem+1]; 14be9261b7Sjeremylt CeedElemRestriction r; 15db10e42cSDavid Medina CeedScalar *y_array; 16be9261b7Sjeremylt 17be9261b7Sjeremylt CeedInit(argv[1], &ceed); 18288c0443SJeremy L Thompson 19*d1d35e2fSjeremylt CeedVectorCreate(ceed, num_elem+1, &x); 20*d1d35e2fSjeremylt for (CeedInt i=0; i<num_elem+1; i++) 21288c0443SJeremy L Thompson a[i] = 10 + i; 22be9261b7Sjeremylt CeedVectorSetArray(x, CEED_MEM_HOST, CEED_USE_POINTER, a); 23be9261b7Sjeremylt 24*d1d35e2fSjeremylt for (CeedInt i=0; i<num_elem; i++) { 25*d1d35e2fSjeremylt for (CeedInt k=0; k<elem_size; k++) { 26*d1d35e2fSjeremylt ind[elem_size*i+k] = i+k; 27be9261b7Sjeremylt } 28db10e42cSDavid Medina } 2961dbc9d2Sjeremylt 30*d1d35e2fSjeremylt CeedElemRestrictionCreateBlocked(ceed, num_elem, elem_size, blk_size, 1, 1, 31*d1d35e2fSjeremylt num_elem+1, 32a8d32208Sjeremylt CEED_MEM_HOST, CEED_USE_POINTER, ind, &r); 33db10e42cSDavid Medina 34*d1d35e2fSjeremylt CeedVectorCreate(ceed, blk_size*elem_size, &y); 35be9261b7Sjeremylt CeedVectorSetValue(y, 0); // Allocates array 36be9261b7Sjeremylt 37be9261b7Sjeremylt // NoTranspose 38a8d32208Sjeremylt CeedElemRestrictionApplyBlock(r, 1, CEED_NOTRANSPOSE, x, y, 39be9261b7Sjeremylt CEED_REQUEST_IMMEDIATE); 40db10e42cSDavid Medina 41db10e42cSDavid Medina // Zero padded entries 42db10e42cSDavid Medina CeedVectorGetArray(y, CEED_MEM_HOST, &y_array); 43*d1d35e2fSjeremylt for (CeedInt i = (elem_size*num_elem - blk_size*elem_size); 44*d1d35e2fSjeremylt i < blk_size*elem_size; 45*d1d35e2fSjeremylt ++i) { 46db10e42cSDavid Medina y_array[i] = 0; 47db10e42cSDavid Medina } 48db10e42cSDavid Medina CeedVectorRestoreArray(y, &y_array); 49be9261b7Sjeremylt CeedVectorView(y, "%12.8f", stdout); 50be9261b7Sjeremylt 51be9261b7Sjeremylt // Transpose 52be9261b7Sjeremylt CeedVectorGetArray(x, CEED_MEM_HOST, (CeedScalar **)&a); 53*d1d35e2fSjeremylt for (CeedInt i=0; i<num_elem+1; i++) 54288c0443SJeremy L Thompson a[i] = 0; 55be9261b7Sjeremylt CeedVectorRestoreArray(x, (CeedScalar **)&a); 56a8d32208Sjeremylt CeedElemRestrictionApplyBlock(r, 1, CEED_TRANSPOSE, y, x, 57be9261b7Sjeremylt CEED_REQUEST_IMMEDIATE); 58be9261b7Sjeremylt CeedVectorView(x, "%12.8f", stdout); 59be9261b7Sjeremylt 60be9261b7Sjeremylt CeedVectorDestroy(&x); 61be9261b7Sjeremylt CeedVectorDestroy(&y); 62be9261b7Sjeremylt CeedElemRestrictionDestroy(&r); 63be9261b7Sjeremylt CeedDestroy(&ceed); 64be9261b7Sjeremylt return 0; 65be9261b7Sjeremylt } 66