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); 18e0dd3b27Sjeremylt for (CeedInt i=0; i<n; i++) 19e0dd3b27Sjeremylt a[i] = 10 + i; 20e0dd3b27Sjeremylt CeedVectorSetArray(x, CEED_MEM_HOST, CEED_COPY_VALUES, a); 21e0dd3b27Sjeremylt 22*16e0f512Sjeremylt { 23*16e0f512Sjeremylt // Sync memtype to device for GPU backends 24*16e0f512Sjeremylt CeedMemType type = CEED_MEM_HOST; 25*16e0f512Sjeremylt CeedGetPreferredMemType(ceed, &type); 26*16e0f512Sjeremylt CeedVectorSyncArray(x, type); 27*16e0f512Sjeremylt } 28e0dd3b27Sjeremylt CeedVectorScale(x, -0.5); 29e0dd3b27Sjeremylt 30e0dd3b27Sjeremylt CeedVectorGetArrayRead(x, CEED_MEM_HOST, &b); 31e0dd3b27Sjeremylt for (CeedInt i=0; i<n; i++) 32e0dd3b27Sjeremylt if (fabs(b[i] + (10.0 + i)/2 ) > 1e-14) 33e0dd3b27Sjeremylt // LCOV_EXCL_START 34e0dd3b27Sjeremylt printf("Error in alpha x, computed: %f actual: %f\n", b[i], 35e0dd3b27Sjeremylt -(10.0 + i)/2); 36e0dd3b27Sjeremylt // LCOV_EXCL_STOP 37e0dd3b27Sjeremylt CeedVectorRestoreArrayRead(x, &b); 38e0dd3b27Sjeremylt 39e0dd3b27Sjeremylt CeedVectorDestroy(&x); 40e0dd3b27Sjeremylt CeedDestroy(&ceed); 41e0dd3b27Sjeremylt return 0; 42e0dd3b27Sjeremylt } 43