1*0f7fd0f8Sjeremylt /// @file 2*0f7fd0f8Sjeremylt /// Test poinwise muliplication of a pair of vectors 3*0f7fd0f8Sjeremylt /// \test Test poinwise muliplication of a pair of vectors 4*0f7fd0f8Sjeremylt #include <ceed.h> 5*0f7fd0f8Sjeremylt #include <math.h> 6*0f7fd0f8Sjeremylt 7*0f7fd0f8Sjeremylt int main(int argc, char **argv) { 8*0f7fd0f8Sjeremylt Ceed ceed; 9*0f7fd0f8Sjeremylt CeedVector x, y, w; 10*0f7fd0f8Sjeremylt CeedInt n; 11*0f7fd0f8Sjeremylt CeedScalar a[10]; 12*0f7fd0f8Sjeremylt const CeedScalar *b; 13*0f7fd0f8Sjeremylt 14*0f7fd0f8Sjeremylt CeedInit(argv[1], &ceed); 15*0f7fd0f8Sjeremylt 16*0f7fd0f8Sjeremylt n = 10; 17*0f7fd0f8Sjeremylt CeedVectorCreate(ceed, n, &x); 18*0f7fd0f8Sjeremylt CeedVectorCreate(ceed, n, &y); 19*0f7fd0f8Sjeremylt CeedVectorCreate(ceed, n, &w); 20*0f7fd0f8Sjeremylt for (CeedInt i=0; i<n; i++) 21*0f7fd0f8Sjeremylt a[i] = i; 22*0f7fd0f8Sjeremylt CeedVectorSetArray(x, CEED_MEM_HOST, CEED_COPY_VALUES, a); 23*0f7fd0f8Sjeremylt CeedVectorSetArray(y, CEED_MEM_HOST, CEED_COPY_VALUES, a); 24*0f7fd0f8Sjeremylt 25*0f7fd0f8Sjeremylt // Test multiplying two vectors into third 26*0f7fd0f8Sjeremylt CeedVectorPointwiseMult(w, x, y); 27*0f7fd0f8Sjeremylt CeedVectorGetArrayRead(w, CEED_MEM_HOST, &b); 28*0f7fd0f8Sjeremylt for (CeedInt i=0; i<n; i++) 29*0f7fd0f8Sjeremylt if (fabs(b[i] - i*i ) > 1e-14) 30*0f7fd0f8Sjeremylt // LCOV_EXCL_START 31*0f7fd0f8Sjeremylt printf("Error in alpha x + y, computed: %f actual: %f\n", b[i], 1.0*i*i); 32*0f7fd0f8Sjeremylt // LCOV_EXCL_STOP 33*0f7fd0f8Sjeremylt CeedVectorRestoreArrayRead(w, &b); 34*0f7fd0f8Sjeremylt 35*0f7fd0f8Sjeremylt // Test multiplying two vectors into one of the two 36*0f7fd0f8Sjeremylt CeedVectorPointwiseMult(w, w, y); 37*0f7fd0f8Sjeremylt CeedVectorGetArrayRead(w, CEED_MEM_HOST, &b); 38*0f7fd0f8Sjeremylt for (CeedInt i=0; i<n; i++) 39*0f7fd0f8Sjeremylt if (fabs(b[i] - i*i*i ) > 1e-14) 40*0f7fd0f8Sjeremylt // LCOV_EXCL_START 41*0f7fd0f8Sjeremylt printf("Error in alpha x + y, computed: %f actual: %f\n", b[i], 1.0*i*i*i); 42*0f7fd0f8Sjeremylt // LCOV_EXCL_STOP 43*0f7fd0f8Sjeremylt CeedVectorRestoreArrayRead(w, &b); 44*0f7fd0f8Sjeremylt 45*0f7fd0f8Sjeremylt // Test multiplying two vectors into one of the two 46*0f7fd0f8Sjeremylt CeedVectorPointwiseMult(w, x, w); 47*0f7fd0f8Sjeremylt CeedVectorGetArrayRead(w, CEED_MEM_HOST, &b); 48*0f7fd0f8Sjeremylt for (CeedInt i=0; i<n; i++) 49*0f7fd0f8Sjeremylt if (fabs(b[i] - i*i*i*i ) > 1e-14) 50*0f7fd0f8Sjeremylt // LCOV_EXCL_START 51*0f7fd0f8Sjeremylt printf("Error in alpha x + y, computed: %f actual: %f\n", b[i], 1.0*i*i*i*i); 52*0f7fd0f8Sjeremylt // LCOV_EXCL_STOP 53*0f7fd0f8Sjeremylt CeedVectorRestoreArrayRead(w, &b); 54*0f7fd0f8Sjeremylt 55*0f7fd0f8Sjeremylt // Test multiplying vector by itself and putting product into self 56*0f7fd0f8Sjeremylt CeedVectorPointwiseMult(y, y, y); 57*0f7fd0f8Sjeremylt CeedVectorGetArrayRead(y, CEED_MEM_HOST, &b); 58*0f7fd0f8Sjeremylt for (CeedInt i=0; i<n; i++) 59*0f7fd0f8Sjeremylt if (fabs(b[i] - i*i ) > 1e-14) 60*0f7fd0f8Sjeremylt // LCOV_EXCL_START 61*0f7fd0f8Sjeremylt printf("Error in alpha x + y, computed: %f actual: %f\n", b[i], 1.0*i*i); 62*0f7fd0f8Sjeremylt // LCOV_EXCL_STOP 63*0f7fd0f8Sjeremylt CeedVectorRestoreArrayRead(y, &b); 64*0f7fd0f8Sjeremylt 65*0f7fd0f8Sjeremylt CeedVectorDestroy(&x); 66*0f7fd0f8Sjeremylt CeedVectorDestroy(&y); 67*0f7fd0f8Sjeremylt CeedVectorDestroy(&w); 68*0f7fd0f8Sjeremylt CeedDestroy(&ceed); 69*0f7fd0f8Sjeremylt return 0; 70*0f7fd0f8Sjeremylt } 71