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