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> 6d99fa3c5SJeremy L Thompson 7d99fa3c5SJeremy L Thompson int main(int argc, char **argv) { 8d99fa3c5SJeremy L Thompson Ceed ceed; 9d99fa3c5SJeremy L Thompson CeedVector x; 10*4fee36f0SJeremy L Thompson CeedInt len = 10; 11d99fa3c5SJeremy L Thompson 12d99fa3c5SJeremy L Thompson CeedInit(argv[1], &ceed); 13d99fa3c5SJeremy L Thompson 14*4fee36f0SJeremy L Thompson CeedVectorCreate(ceed, len, &x); 15*4fee36f0SJeremy L Thompson { 16*4fee36f0SJeremy L Thompson CeedScalar array[len]; 17*4fee36f0SJeremy L Thompson 18*4fee36f0SJeremy L Thompson for (CeedInt i = 0; i < len; i++) array[i] = len + i; 19*4fee36f0SJeremy L Thompson CeedVectorSetArray(x, CEED_MEM_HOST, CEED_COPY_VALUES, array); 20*4fee36f0SJeremy L Thompson } 2116e0f512Sjeremylt { 2216e0f512Sjeremylt // Sync memtype to device for GPU backends 2316e0f512Sjeremylt CeedMemType type = CEED_MEM_HOST; 2416e0f512Sjeremylt CeedGetPreferredMemType(ceed, &type); 2516e0f512Sjeremylt CeedVectorSyncArray(x, type); 2616e0f512Sjeremylt } 27d99fa3c5SJeremy L Thompson CeedVectorReciprocal(x); 28d99fa3c5SJeremy L Thompson 29*4fee36f0SJeremy L Thompson { 30*4fee36f0SJeremy L Thompson const CeedScalar *read_array; 31*4fee36f0SJeremy L Thompson 32*4fee36f0SJeremy L Thompson CeedVectorGetArrayRead(x, CEED_MEM_HOST, &read_array); 33*4fee36f0SJeremy L Thompson for (CeedInt i = 0; i < len; i++) { 34*4fee36f0SJeremy L Thompson if (fabs(read_array[i] - 1. / (len + i)) > 10. * CEED_EPSILON) { 35*4fee36f0SJeremy L Thompson // LCOV_EXCL_START 36*4fee36f0SJeremy L Thompson printf("Error taking reciprocal, array[%" CeedInt_FMT "] = %f\n", i, (CeedScalar)read_array[i]); 37*4fee36f0SJeremy L Thompson // LCOV_EXCL_STOP 382b730f8bSJeremy L Thompson } 39*4fee36f0SJeremy L Thompson } 40*4fee36f0SJeremy L Thompson CeedVectorRestoreArrayRead(x, &read_array); 41*4fee36f0SJeremy L Thompson } 42d99fa3c5SJeremy L Thompson 43d99fa3c5SJeremy L Thompson CeedVectorDestroy(&x); 44d99fa3c5SJeremy L Thompson CeedDestroy(&ceed); 45d99fa3c5SJeremy L Thompson return 0; 46d99fa3c5SJeremy L Thompson } 47