xref: /libCEED/tests/t125-vector.c (revision b0976d5a9cd61a1a55d5329148196ea026561ed6)
15fb68f37SKaren (Ren) Stengel /// @file
25fb68f37SKaren (Ren) Stengel /// Test summing of a pair of vectors
35fb68f37SKaren (Ren) Stengel /// \test Test y = alpha x + beta y
4*b0976d5aSZach Atkins ///TESTARGS(name="length 10") {ceed_resource} 10
5*b0976d5aSZach Atkins ///TESTARGS(name="length 0") {ceed_resource} 0
65fb68f37SKaren (Ren) Stengel #include <ceed.h>
75fb68f37SKaren (Ren) Stengel #include <math.h>
849aac155SJeremy L Thompson #include <stdio.h>
9*b0976d5aSZach Atkins #include <stdlib.h>
105fb68f37SKaren (Ren) Stengel 
115fb68f37SKaren (Ren) Stengel int main(int argc, char **argv) {
125fb68f37SKaren (Ren) Stengel   Ceed       ceed;
135fb68f37SKaren (Ren) Stengel   CeedVector x, y;
145fb68f37SKaren (Ren) Stengel   CeedInt    len = 10;
155fb68f37SKaren (Ren) Stengel 
165fb68f37SKaren (Ren) Stengel   CeedInit(argv[1], &ceed);
17*b0976d5aSZach Atkins   len = argc > 2 ? atoi(argv[2]) : len;
185fb68f37SKaren (Ren) Stengel 
195fb68f37SKaren (Ren) Stengel   CeedVectorCreate(ceed, len, &x);
205fb68f37SKaren (Ren) Stengel   CeedVectorCreate(ceed, len, &y);
215fb68f37SKaren (Ren) Stengel   {
225fb68f37SKaren (Ren) Stengel     CeedScalar array[len];
235fb68f37SKaren (Ren) Stengel 
245fb68f37SKaren (Ren) Stengel     for (CeedInt i = 0; i < len; i++) array[i] = 10 + i;
255fb68f37SKaren (Ren) Stengel     CeedVectorSetArray(x, CEED_MEM_HOST, CEED_COPY_VALUES, array);
265fb68f37SKaren (Ren) Stengel     CeedVectorSetArray(y, CEED_MEM_HOST, CEED_COPY_VALUES, array);
275fb68f37SKaren (Ren) Stengel   }
285fb68f37SKaren (Ren) Stengel   {
295fb68f37SKaren (Ren) Stengel     // Sync memtype to device for GPU backends
305fb68f37SKaren (Ren) Stengel     CeedMemType type = CEED_MEM_HOST;
315fb68f37SKaren (Ren) Stengel     CeedGetPreferredMemType(ceed, &type);
325fb68f37SKaren (Ren) Stengel     CeedVectorSyncArray(y, type);
335fb68f37SKaren (Ren) Stengel   }
345fb68f37SKaren (Ren) Stengel   CeedVectorAXPBY(y, -0.5, 1.0, x);
355fb68f37SKaren (Ren) Stengel 
365fb68f37SKaren (Ren) Stengel   {
375fb68f37SKaren (Ren) Stengel     const CeedScalar *read_array;
385fb68f37SKaren (Ren) Stengel 
395fb68f37SKaren (Ren) Stengel     CeedVectorGetArrayRead(y, CEED_MEM_HOST, &read_array);
405fb68f37SKaren (Ren) Stengel     for (CeedInt i = 0; i < len; i++) {
415fb68f37SKaren (Ren) Stengel       if (fabs(read_array[i] - (10.0 + i) * 1.5) > 1e-14) {
425fb68f37SKaren (Ren) Stengel         // LCOV_EXCL_START
435fb68f37SKaren (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);
445fb68f37SKaren (Ren) Stengel         // LCOV_EXCL_STOP
455fb68f37SKaren (Ren) Stengel       }
465fb68f37SKaren (Ren) Stengel     }
475fb68f37SKaren (Ren) Stengel     CeedVectorRestoreArrayRead(y, &read_array);
485fb68f37SKaren (Ren) Stengel   }
495fb68f37SKaren (Ren) Stengel 
505fb68f37SKaren (Ren) Stengel   CeedVectorDestroy(&x);
515fb68f37SKaren (Ren) Stengel   CeedVectorDestroy(&y);
525fb68f37SKaren (Ren) Stengel   CeedDestroy(&ceed);
535fb68f37SKaren (Ren) Stengel   return 0;
545fb68f37SKaren (Ren) Stengel }
55