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