10f7fd0f8Sjeremylt /// @file 20f7fd0f8Sjeremylt /// Test poinwise muliplication of a pair of vectors 30f7fd0f8Sjeremylt /// \test Test poinwise muliplication of a pair of vectors 40f7fd0f8Sjeremylt #include <ceed.h> 50f7fd0f8Sjeremylt #include <math.h> 60f7fd0f8Sjeremylt 70f7fd0f8Sjeremylt int main(int argc, char **argv) { 80f7fd0f8Sjeremylt Ceed ceed; 90f7fd0f8Sjeremylt CeedVector x, y, w; 100f7fd0f8Sjeremylt CeedInt n; 110f7fd0f8Sjeremylt CeedScalar a[10]; 120f7fd0f8Sjeremylt const CeedScalar *b; 130f7fd0f8Sjeremylt 140f7fd0f8Sjeremylt CeedInit(argv[1], &ceed); 150f7fd0f8Sjeremylt 160f7fd0f8Sjeremylt n = 10; 170f7fd0f8Sjeremylt CeedVectorCreate(ceed, n, &x); 180f7fd0f8Sjeremylt CeedVectorCreate(ceed, n, &y); 190f7fd0f8Sjeremylt CeedVectorCreate(ceed, n, &w); 200f7fd0f8Sjeremylt for (CeedInt i=0; i<n; i++) 210f7fd0f8Sjeremylt a[i] = i; 220f7fd0f8Sjeremylt CeedVectorSetArray(x, CEED_MEM_HOST, CEED_COPY_VALUES, a); 230f7fd0f8Sjeremylt CeedVectorSetArray(y, CEED_MEM_HOST, CEED_COPY_VALUES, a); 240f7fd0f8Sjeremylt 250f7fd0f8Sjeremylt // Test multiplying two vectors into third 260f7fd0f8Sjeremylt CeedVectorPointwiseMult(w, x, y); 270f7fd0f8Sjeremylt CeedVectorGetArrayRead(w, CEED_MEM_HOST, &b); 280f7fd0f8Sjeremylt for (CeedInt i=0; i<n; i++) 290f7fd0f8Sjeremylt if (fabs(b[i] - i*i ) > 1e-14) 300f7fd0f8Sjeremylt // LCOV_EXCL_START 31*0c1bc3c2Sjeremylt printf("Error in w = x .* y, computed: %f actual: %f\n", b[i], 1.0*i*i); 320f7fd0f8Sjeremylt // LCOV_EXCL_STOP 330f7fd0f8Sjeremylt CeedVectorRestoreArrayRead(w, &b); 340f7fd0f8Sjeremylt 350f7fd0f8Sjeremylt // Test multiplying two vectors into one of the two 360f7fd0f8Sjeremylt CeedVectorPointwiseMult(w, w, y); 370f7fd0f8Sjeremylt CeedVectorGetArrayRead(w, CEED_MEM_HOST, &b); 380f7fd0f8Sjeremylt for (CeedInt i=0; i<n; i++) 390f7fd0f8Sjeremylt if (fabs(b[i] - i*i*i ) > 1e-14) 400f7fd0f8Sjeremylt // LCOV_EXCL_START 41*0c1bc3c2Sjeremylt printf("Error in w = w .* y, computed: %f actual: %f\n", b[i], 1.0*i*i*i); 420f7fd0f8Sjeremylt // LCOV_EXCL_STOP 430f7fd0f8Sjeremylt CeedVectorRestoreArrayRead(w, &b); 440f7fd0f8Sjeremylt 450f7fd0f8Sjeremylt // Test multiplying two vectors into one of the two 460f7fd0f8Sjeremylt CeedVectorPointwiseMult(w, x, w); 470f7fd0f8Sjeremylt CeedVectorGetArrayRead(w, CEED_MEM_HOST, &b); 480f7fd0f8Sjeremylt for (CeedInt i=0; i<n; i++) 490f7fd0f8Sjeremylt if (fabs(b[i] - i*i*i*i ) > 1e-14) 500f7fd0f8Sjeremylt // LCOV_EXCL_START 51*0c1bc3c2Sjeremylt printf("Error in w = x .* w, computed: %f actual: %f\n", b[i], 1.0*i*i*i*i); 520f7fd0f8Sjeremylt // LCOV_EXCL_STOP 530f7fd0f8Sjeremylt CeedVectorRestoreArrayRead(w, &b); 540f7fd0f8Sjeremylt 550f7fd0f8Sjeremylt // Test multiplying vector by itself and putting product into self 560f7fd0f8Sjeremylt CeedVectorPointwiseMult(y, y, y); 570f7fd0f8Sjeremylt CeedVectorGetArrayRead(y, CEED_MEM_HOST, &b); 580f7fd0f8Sjeremylt for (CeedInt i=0; i<n; i++) 590f7fd0f8Sjeremylt if (fabs(b[i] - i*i ) > 1e-14) 600f7fd0f8Sjeremylt // LCOV_EXCL_START 61*0c1bc3c2Sjeremylt printf("Error in y = y .* y, computed: %f actual: %f\n", b[i], 1.0*i*i); 620f7fd0f8Sjeremylt // LCOV_EXCL_STOP 630f7fd0f8Sjeremylt CeedVectorRestoreArrayRead(y, &b); 640f7fd0f8Sjeremylt 650f7fd0f8Sjeremylt CeedVectorDestroy(&x); 660f7fd0f8Sjeremylt CeedVectorDestroy(&y); 670f7fd0f8Sjeremylt CeedVectorDestroy(&w); 680f7fd0f8Sjeremylt CeedDestroy(&ceed); 690f7fd0f8Sjeremylt return 0; 700f7fd0f8Sjeremylt } 71