10f7fd0f8Sjeremylt /// @file 20f7fd0f8Sjeremylt /// Test summing of a pair of vectors 30f7fd0f8Sjeremylt /// \test Test summing of a pair of vectors 40f7fd0f8Sjeremylt #include <ceed.h> 50f7fd0f8Sjeremylt #include <math.h> 60f7fd0f8Sjeremylt 70f7fd0f8Sjeremylt int main(int argc, char **argv) { 80f7fd0f8Sjeremylt Ceed ceed; 90f7fd0f8Sjeremylt CeedVector x, y; 100f7fd0f8Sjeremylt CeedInt n; 110f7fd0f8Sjeremylt CeedScalar a[10]; 120f7fd0f8Sjeremylt const CeedScalar *b; 130f7fd0f8Sjeremylt 140f7fd0f8Sjeremylt CeedInit(argv[1], &ceed); 150f7fd0f8Sjeremylt 160f7fd0f8Sjeremylt n = 10; 170f7fd0f8Sjeremylt CeedVectorCreate(ceed, n, &x); 180f7fd0f8Sjeremylt CeedVectorCreate(ceed, n, &y); 19*2b730f8bSJeremy L Thompson for (CeedInt i = 0; i < n; i++) a[i] = 10 + i; 200f7fd0f8Sjeremylt CeedVectorSetArray(x, CEED_MEM_HOST, CEED_COPY_VALUES, a); 210f7fd0f8Sjeremylt CeedVectorSetArray(y, CEED_MEM_HOST, CEED_COPY_VALUES, a); 220f7fd0f8Sjeremylt 2316e0f512Sjeremylt { 2416e0f512Sjeremylt // Sync memtype to device for GPU backends 2516e0f512Sjeremylt CeedMemType type = CEED_MEM_HOST; 2616e0f512Sjeremylt CeedGetPreferredMemType(ceed, &type); 2716e0f512Sjeremylt CeedVectorSyncArray(y, type); 2816e0f512Sjeremylt } 290f7fd0f8Sjeremylt CeedVectorAXPY(y, -0.5, x); 300f7fd0f8Sjeremylt 310f7fd0f8Sjeremylt CeedVectorGetArrayRead(y, CEED_MEM_HOST, &b); 32*2b730f8bSJeremy L Thompson for (CeedInt i = 0; i < n; i++) { 33*2b730f8bSJeremy L Thompson if (fabs(b[i] - (10.0 + i) / 2) > 1e-14) { 340f7fd0f8Sjeremylt // LCOV_EXCL_START 35*2b730f8bSJeremy L Thompson printf("Error in alpha x + y at index %" CeedInt_FMT ", computed: %f actual: %f\n", i, b[i], (10.0 + i) / 2); 360f7fd0f8Sjeremylt // LCOV_EXCL_STOP 37*2b730f8bSJeremy L Thompson } 38*2b730f8bSJeremy L Thompson } 390f7fd0f8Sjeremylt CeedVectorRestoreArrayRead(y, &b); 400f7fd0f8Sjeremylt 410f7fd0f8Sjeremylt CeedVectorDestroy(&x); 420f7fd0f8Sjeremylt CeedVectorDestroy(&y); 430f7fd0f8Sjeremylt CeedDestroy(&ceed); 440f7fd0f8Sjeremylt return 0; 450f7fd0f8Sjeremylt } 46