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 <ceed.h> 52b730f8bSJeremy L Thompson #include <math.h> 6*49aac155SJeremy L Thompson #include <stdio.h> 7d99fa3c5SJeremy L Thompson 8d99fa3c5SJeremy L Thompson int main(int argc, char **argv) { 9d99fa3c5SJeremy L Thompson Ceed ceed; 10d99fa3c5SJeremy L Thompson CeedVector x; 114fee36f0SJeremy L Thompson CeedInt len = 10; 12d99fa3c5SJeremy L Thompson 13d99fa3c5SJeremy L Thompson CeedInit(argv[1], &ceed); 14d99fa3c5SJeremy L Thompson 154fee36f0SJeremy L Thompson CeedVectorCreate(ceed, len, &x); 164fee36f0SJeremy L Thompson { 174fee36f0SJeremy L Thompson CeedScalar array[len]; 184fee36f0SJeremy L Thompson 194fee36f0SJeremy L Thompson for (CeedInt i = 0; i < len; i++) array[i] = len + i; 204fee36f0SJeremy L Thompson CeedVectorSetArray(x, CEED_MEM_HOST, CEED_COPY_VALUES, array); 214fee36f0SJeremy L Thompson } 2216e0f512Sjeremylt { 2316e0f512Sjeremylt // Sync memtype to device for GPU backends 2416e0f512Sjeremylt CeedMemType type = CEED_MEM_HOST; 2516e0f512Sjeremylt CeedGetPreferredMemType(ceed, &type); 2616e0f512Sjeremylt CeedVectorSyncArray(x, type); 2716e0f512Sjeremylt } 28d99fa3c5SJeremy L Thompson CeedVectorReciprocal(x); 29d99fa3c5SJeremy L Thompson 304fee36f0SJeremy L Thompson { 314fee36f0SJeremy L Thompson const CeedScalar *read_array; 324fee36f0SJeremy L Thompson 334fee36f0SJeremy L Thompson CeedVectorGetArrayRead(x, CEED_MEM_HOST, &read_array); 344fee36f0SJeremy L Thompson for (CeedInt i = 0; i < len; i++) { 354fee36f0SJeremy L Thompson if (fabs(read_array[i] - 1. / (len + i)) > 10. * CEED_EPSILON) { 364fee36f0SJeremy L Thompson // LCOV_EXCL_START 374fee36f0SJeremy L Thompson printf("Error taking reciprocal, array[%" CeedInt_FMT "] = %f\n", i, (CeedScalar)read_array[i]); 384fee36f0SJeremy L Thompson // LCOV_EXCL_STOP 392b730f8bSJeremy L Thompson } 404fee36f0SJeremy L Thompson } 414fee36f0SJeremy L Thompson CeedVectorRestoreArrayRead(x, &read_array); 424fee36f0SJeremy L Thompson } 43d99fa3c5SJeremy L Thompson 44d99fa3c5SJeremy L Thompson CeedVectorDestroy(&x); 45d99fa3c5SJeremy L Thompson CeedDestroy(&ceed); 46d99fa3c5SJeremy L Thompson return 0; 47d99fa3c5SJeremy L Thompson } 48