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
main(int argc,char ** argv)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