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*f85e4a7bSJeremy 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 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++) { 425fb68f37SKaren (Ren) Stengel if (fabs(read_array[i] - (10.0 + i) * 1.5) > 1e-14) { 435fb68f37SKaren (Ren) Stengel // LCOV_EXCL_START 445fb68f37SKaren (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); 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