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