xref: /libCEED/tests/t106-vector.c (revision ba59ac12ef3579eea938de09e332a3a266c3cc08)
1 /// @file
2 /// Test syncing device data to host pointer
3 /// \test Test syncing device data to host pointer
4 #include <ceed.h>
5 
6 int main(int argc, char **argv) {
7   Ceed       ceed;
8   CeedVector x, y;
9   CeedInt    len = 10;
10   CeedScalar x_array[len];
11 
12   CeedInit(argv[1], &ceed);
13 
14   CeedVectorCreate(ceed, len, &x);
15   CeedVectorCreate(ceed, len, &y);
16 
17   for (CeedInt i = 0; i < len; i++) x_array[i] = 0;
18   CeedVectorSetArray(x, CEED_MEM_HOST, CEED_USE_POINTER, x_array);
19   {
20     CeedScalar initial_array[len];
21 
22     for (CeedInt i = 0; i < len; i++) initial_array[i] = len + i;
23     CeedVectorSetArray(y, CEED_MEM_HOST, CEED_COPY_VALUES, initial_array);
24   }
25   {
26     const CeedScalar *read_array;
27 
28     CeedVectorGetArrayRead(y, CEED_MEM_DEVICE, &read_array);
29     CeedVectorSetArray(x, CEED_MEM_DEVICE, CEED_COPY_VALUES, (CeedScalar *)read_array);
30     CeedVectorRestoreArrayRead(y, &read_array);
31   }
32   CeedVectorSyncArray(x, CEED_MEM_HOST);
33   for (CeedInt i = 0; i < len; i++) {
34     if (x_array[i] != len + i) printf("Error reading array[%" CeedInt_FMT "] = %f\n", i, (CeedScalar)x_array[i]);
35   }
36 
37   CeedVectorDestroy(&x);
38   CeedVectorDestroy(&y);
39   CeedDestroy(&ceed);
40   return 0;
41 }
42