1*cc3bdf8cSJeremy L Thompson /// @file 2*cc3bdf8cSJeremy L Thompson /// Test copying into vector with borrowed pointer 3*cc3bdf8cSJeremy L Thompson /// \test Test copying into vector with borrowed pointer 4*cc3bdf8cSJeremy L Thompson #include <ceed.h> 5*cc3bdf8cSJeremy L Thompson #include <stdio.h> 6*cc3bdf8cSJeremy L Thompson 7*cc3bdf8cSJeremy L Thompson int main(int argc, char **argv) { 8*cc3bdf8cSJeremy L Thompson Ceed ceed; 9*cc3bdf8cSJeremy L Thompson CeedVector x, x_copy; 10*cc3bdf8cSJeremy L Thompson CeedInt len = 10; 11*cc3bdf8cSJeremy L Thompson CeedScalar array_borrowed[len]; 12*cc3bdf8cSJeremy L Thompson 13*cc3bdf8cSJeremy L Thompson CeedInit(argv[1], &ceed); 14*cc3bdf8cSJeremy L Thompson 15*cc3bdf8cSJeremy L Thompson CeedVectorCreate(ceed, len, &x); 16*cc3bdf8cSJeremy L Thompson CeedVectorCreate(ceed, len, &x_copy); 17*cc3bdf8cSJeremy L Thompson 18*cc3bdf8cSJeremy L Thompson { 19*cc3bdf8cSJeremy L Thompson CeedScalar array[len]; 20*cc3bdf8cSJeremy L Thompson 21*cc3bdf8cSJeremy L Thompson for (CeedInt i = 0; i < len; i++) { 22*cc3bdf8cSJeremy L Thompson array[i] = i; 23*cc3bdf8cSJeremy L Thompson array_borrowed[i] = 10 + i; 24*cc3bdf8cSJeremy L Thompson } 25*cc3bdf8cSJeremy L Thompson 26*cc3bdf8cSJeremy L Thompson CeedVectorSetArray(x, CEED_MEM_HOST, CEED_COPY_VALUES, array); 27*cc3bdf8cSJeremy L Thompson CeedVectorSetArray(x_copy, CEED_MEM_HOST, CEED_USE_POINTER, array_borrowed); 28*cc3bdf8cSJeremy L Thompson } 29*cc3bdf8cSJeremy L Thompson 30*cc3bdf8cSJeremy L Thompson // Copy to device if preferred 31*cc3bdf8cSJeremy L Thompson { 32*cc3bdf8cSJeremy L Thompson CeedMemType mem_type = CEED_MEM_HOST; 33*cc3bdf8cSJeremy L Thompson 34*cc3bdf8cSJeremy L Thompson CeedGetPreferredMemType(ceed, &mem_type); 35*cc3bdf8cSJeremy L Thompson if (mem_type == CEED_MEM_DEVICE) CeedVectorSyncArray(x, CEED_MEM_DEVICE); 36*cc3bdf8cSJeremy L Thompson } 37*cc3bdf8cSJeremy L Thompson 38*cc3bdf8cSJeremy L Thompson // Copy and sync borrowed array 39*cc3bdf8cSJeremy L Thompson CeedVectorCopy(x, x_copy); 40*cc3bdf8cSJeremy L Thompson CeedVectorSyncArray(x_copy, CEED_MEM_HOST); 41*cc3bdf8cSJeremy L Thompson 42*cc3bdf8cSJeremy L Thompson // Check that borrowed array is the same as the original input array a 43*cc3bdf8cSJeremy L Thompson for (CeedInt i = 0; i < len; i++) { 44*cc3bdf8cSJeremy L Thompson if (array_borrowed[i] != i) printf("Error in copying values of CeedVector\n"); 45*cc3bdf8cSJeremy L Thompson } 46*cc3bdf8cSJeremy L Thompson 47*cc3bdf8cSJeremy L Thompson CeedVectorDestroy(&x); 48*cc3bdf8cSJeremy L Thompson CeedVectorDestroy(&x_copy); 49*cc3bdf8cSJeremy L Thompson CeedDestroy(&ceed); 50*cc3bdf8cSJeremy L Thompson return 0; 51*cc3bdf8cSJeremy L Thompson } 52