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