1e0dd3b27Sjeremylt /// @file 2e0dd3b27Sjeremylt /// Test scaling a vector 3e0dd3b27Sjeremylt /// \test Test scaling of a vector 4e0dd3b27Sjeremylt #include <ceed.h> 5e0dd3b27Sjeremylt #include <math.h> 6e0dd3b27Sjeremylt 7e0dd3b27Sjeremylt int main(int argc, char **argv) { 8e0dd3b27Sjeremylt Ceed ceed; 9e0dd3b27Sjeremylt CeedVector x; 10e0dd3b27Sjeremylt CeedInt n; 11e0dd3b27Sjeremylt CeedScalar a[10]; 12e0dd3b27Sjeremylt const CeedScalar *b; 13e0dd3b27Sjeremylt 14e0dd3b27Sjeremylt CeedInit(argv[1], &ceed); 15e0dd3b27Sjeremylt 16e0dd3b27Sjeremylt n = 10; 17e0dd3b27Sjeremylt CeedVectorCreate(ceed, n, &x); 18*2b730f8bSJeremy L Thompson for (CeedInt i = 0; i < n; i++) a[i] = 10 + i; 19e0dd3b27Sjeremylt CeedVectorSetArray(x, CEED_MEM_HOST, CEED_COPY_VALUES, a); 20e0dd3b27Sjeremylt 2116e0f512Sjeremylt { 2216e0f512Sjeremylt // Sync memtype to device for GPU backends 2316e0f512Sjeremylt CeedMemType type = CEED_MEM_HOST; 2416e0f512Sjeremylt CeedGetPreferredMemType(ceed, &type); 2516e0f512Sjeremylt CeedVectorSyncArray(x, type); 2616e0f512Sjeremylt } 27e0dd3b27Sjeremylt CeedVectorScale(x, -0.5); 28e0dd3b27Sjeremylt 29e0dd3b27Sjeremylt CeedVectorGetArrayRead(x, CEED_MEM_HOST, &b); 30*2b730f8bSJeremy L Thompson for (CeedInt i = 0; i < n; i++) { 31*2b730f8bSJeremy L Thompson if (fabs(b[i] + (10.0 + i) / 2) > 1e-14) { 32e0dd3b27Sjeremylt // LCOV_EXCL_START 33*2b730f8bSJeremy L Thompson printf("Error in alpha x at index %" CeedInt_FMT ", computed: %f actual: %f\n", i, b[i], -(10.0 + i) / 2); 34e0dd3b27Sjeremylt // LCOV_EXCL_STOP 35*2b730f8bSJeremy L Thompson } 36*2b730f8bSJeremy L Thompson } 37e0dd3b27Sjeremylt CeedVectorRestoreArrayRead(x, &b); 38e0dd3b27Sjeremylt 39e0dd3b27Sjeremylt CeedVectorDestroy(&x); 40e0dd3b27Sjeremylt CeedDestroy(&ceed); 41e0dd3b27Sjeremylt return 0; 42e0dd3b27Sjeremylt } 43