xref: /libCEED/tests/t122-vector.c (revision 0f7fd0f8b8a217b3039591f3d95e1a4bbb58f157)
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