15fb68f37SKaren (Ren) Stengel /// @file
25fb68f37SKaren (Ren) Stengel /// Test summing of a pair of vectors
35fb68f37SKaren (Ren) Stengel /// \test Test y = alpha x + beta y
4f85e4a7bSJeremy L Thompson
5b0976d5aSZach Atkins ///TESTARGS(name="length 10") {ceed_resource} 10
6b0976d5aSZach Atkins ///TESTARGS(name="length 0") {ceed_resource} 0
75fb68f37SKaren (Ren) Stengel #include <ceed.h>
85fb68f37SKaren (Ren) Stengel #include <math.h>
949aac155SJeremy L Thompson #include <stdio.h>
10b0976d5aSZach Atkins #include <stdlib.h>
115fb68f37SKaren (Ren) Stengel
main(int argc,char ** argv)125fb68f37SKaren (Ren) Stengel int main(int argc, char **argv) {
135fb68f37SKaren (Ren) Stengel Ceed ceed;
145fb68f37SKaren (Ren) Stengel CeedVector x, y;
155fb68f37SKaren (Ren) Stengel CeedInt len = 10;
165fb68f37SKaren (Ren) Stengel
175fb68f37SKaren (Ren) Stengel CeedInit(argv[1], &ceed);
18b0976d5aSZach Atkins len = argc > 2 ? atoi(argv[2]) : len;
195fb68f37SKaren (Ren) Stengel
205fb68f37SKaren (Ren) Stengel CeedVectorCreate(ceed, len, &x);
215fb68f37SKaren (Ren) Stengel CeedVectorCreate(ceed, len, &y);
225fb68f37SKaren (Ren) Stengel {
235fb68f37SKaren (Ren) Stengel CeedScalar array[len];
245fb68f37SKaren (Ren) Stengel
255fb68f37SKaren (Ren) Stengel for (CeedInt i = 0; i < len; i++) array[i] = 10 + i;
265fb68f37SKaren (Ren) Stengel CeedVectorSetArray(x, CEED_MEM_HOST, CEED_COPY_VALUES, array);
275fb68f37SKaren (Ren) Stengel CeedVectorSetArray(y, CEED_MEM_HOST, CEED_COPY_VALUES, array);
285fb68f37SKaren (Ren) Stengel }
295fb68f37SKaren (Ren) Stengel {
305fb68f37SKaren (Ren) Stengel // Sync memtype to device for GPU backends
315fb68f37SKaren (Ren) Stengel CeedMemType type = CEED_MEM_HOST;
325fb68f37SKaren (Ren) Stengel CeedGetPreferredMemType(ceed, &type);
335fb68f37SKaren (Ren) Stengel CeedVectorSyncArray(y, type);
345fb68f37SKaren (Ren) Stengel }
355fb68f37SKaren (Ren) Stengel CeedVectorAXPBY(y, -0.5, 1.0, x);
365fb68f37SKaren (Ren) Stengel
375fb68f37SKaren (Ren) Stengel {
385fb68f37SKaren (Ren) Stengel const CeedScalar *read_array;
395fb68f37SKaren (Ren) Stengel
405fb68f37SKaren (Ren) Stengel CeedVectorGetArrayRead(y, CEED_MEM_HOST, &read_array);
415fb68f37SKaren (Ren) Stengel for (CeedInt i = 0; i < len; i++) {
42*aa67b842SZach Atkins if (fabs(read_array[i] - (10.0 + i) * 0.5) > 1e-14) {
435fb68f37SKaren (Ren) Stengel // LCOV_EXCL_START
44*aa67b842SZach Atkins printf("Error in alpha x + y at index %" CeedInt_FMT ", computed: %f actual: %f\n", i, read_array[i], (10.0 + i) * 0.5);
455fb68f37SKaren (Ren) Stengel // LCOV_EXCL_STOP
465fb68f37SKaren (Ren) Stengel }
475fb68f37SKaren (Ren) Stengel }
485fb68f37SKaren (Ren) Stengel CeedVectorRestoreArrayRead(y, &read_array);
495fb68f37SKaren (Ren) Stengel }
505fb68f37SKaren (Ren) Stengel
515fb68f37SKaren (Ren) Stengel CeedVectorDestroy(&x);
525fb68f37SKaren (Ren) Stengel CeedVectorDestroy(&y);
535fb68f37SKaren (Ren) Stengel CeedDestroy(&ceed);
545fb68f37SKaren (Ren) Stengel return 0;
555fb68f37SKaren (Ren) Stengel }
56