xref: /libCEED/tests/t119-vector.c (revision 16e0f5123feed9e8ea59dbae709085fc2dd873d3)
1d99fa3c5SJeremy L Thompson /// @file
2d99fa3c5SJeremy L Thompson /// Test taking the reciprocal of a vector
3d99fa3c5SJeremy L Thompson /// \test Test taking the reciprocal of a vector
4d99fa3c5SJeremy L Thompson #include <math.h>
5d99fa3c5SJeremy L Thompson #include <ceed.h>
6d99fa3c5SJeremy L Thompson 
7d99fa3c5SJeremy L Thompson int main(int argc, char **argv) {
8d99fa3c5SJeremy L Thompson   Ceed ceed;
9d99fa3c5SJeremy L Thompson   CeedVector x;
10d99fa3c5SJeremy L Thompson   CeedInt n;
11d99fa3c5SJeremy L Thompson   CeedScalar a[10];
12d99fa3c5SJeremy L Thompson   const CeedScalar *b;
13d99fa3c5SJeremy L Thompson 
14d99fa3c5SJeremy L Thompson   CeedInit(argv[1], &ceed);
15d99fa3c5SJeremy L Thompson 
16d99fa3c5SJeremy L Thompson   n = 10;
17d99fa3c5SJeremy L Thompson   CeedVectorCreate(ceed, n, &x);
18d99fa3c5SJeremy L Thompson   for (CeedInt i=0; i<n; i++)
19d99fa3c5SJeremy L Thompson     a[i] = 10 + i;
20d99fa3c5SJeremy L Thompson   CeedVectorSetArray(x, CEED_MEM_HOST, CEED_USE_POINTER, a);
21*16e0f512Sjeremylt   {
22*16e0f512Sjeremylt     // Sync memtype to device for GPU backends
23*16e0f512Sjeremylt     CeedMemType type = CEED_MEM_HOST;
24*16e0f512Sjeremylt     CeedGetPreferredMemType(ceed, &type);
25*16e0f512Sjeremylt     CeedVectorSyncArray(x, type);
26*16e0f512Sjeremylt   }
27d99fa3c5SJeremy L Thompson   CeedVectorReciprocal(x);
28d99fa3c5SJeremy L Thompson 
29d99fa3c5SJeremy L Thompson   CeedVectorGetArrayRead(x, CEED_MEM_HOST, &b);
30d99fa3c5SJeremy L Thompson   for (CeedInt i=0; i<n; i++)
31d99fa3c5SJeremy L Thompson     if (fabs(b[i] - 1./(10+i)) > 1e-15)
32d99fa3c5SJeremy L Thompson       // LCOV_EXCL_START
33d99fa3c5SJeremy L Thompson       printf("Error reading array b[%d] = %f",i,(double)b[i]);
34d99fa3c5SJeremy L Thompson   // LCOV_EXCL_STOP
35d99fa3c5SJeremy L Thompson   CeedVectorRestoreArrayRead(x, &b);
36d99fa3c5SJeremy L Thompson 
37d99fa3c5SJeremy L Thompson   CeedVectorDestroy(&x);
38d99fa3c5SJeremy L Thompson   CeedDestroy(&ceed);
39d99fa3c5SJeremy L Thompson   return 0;
40d99fa3c5SJeremy L Thompson }
41