xref: /libCEED/tests/t125-vector.c (revision b0976d5a9cd61a1a55d5329148196ea026561ed6)
1 /// @file
2 /// Test summing of a pair of vectors
3 /// \test Test y = alpha x + beta y
4 ///TESTARGS(name="length 10") {ceed_resource} 10
5 ///TESTARGS(name="length 0") {ceed_resource} 0
6 #include <ceed.h>
7 #include <math.h>
8 #include <stdio.h>
9 #include <stdlib.h>
10 
11 int main(int argc, char **argv) {
12   Ceed       ceed;
13   CeedVector x, y;
14   CeedInt    len = 10;
15 
16   CeedInit(argv[1], &ceed);
17   len = argc > 2 ? atoi(argv[2]) : len;
18 
19   CeedVectorCreate(ceed, len, &x);
20   CeedVectorCreate(ceed, len, &y);
21   {
22     CeedScalar array[len];
23 
24     for (CeedInt i = 0; i < len; i++) array[i] = 10 + i;
25     CeedVectorSetArray(x, CEED_MEM_HOST, CEED_COPY_VALUES, array);
26     CeedVectorSetArray(y, CEED_MEM_HOST, CEED_COPY_VALUES, array);
27   }
28   {
29     // Sync memtype to device for GPU backends
30     CeedMemType type = CEED_MEM_HOST;
31     CeedGetPreferredMemType(ceed, &type);
32     CeedVectorSyncArray(y, type);
33   }
34   CeedVectorAXPBY(y, -0.5, 1.0, x);
35 
36   {
37     const CeedScalar *read_array;
38 
39     CeedVectorGetArrayRead(y, CEED_MEM_HOST, &read_array);
40     for (CeedInt i = 0; i < len; i++) {
41       if (fabs(read_array[i] - (10.0 + i) * 1.5) > 1e-14) {
42         // LCOV_EXCL_START
43         printf("Error in alpha x + y at index %" CeedInt_FMT ", computed: %f actual: %f\n", i, read_array[i], (10.0 + i) * 1.5);
44         // LCOV_EXCL_STOP
45       }
46     }
47     CeedVectorRestoreArrayRead(y, &read_array);
48   }
49 
50   CeedVectorDestroy(&x);
51   CeedVectorDestroy(&y);
52   CeedDestroy(&ceed);
53   return 0;
54 }
55