xref: /libCEED/tests/t108-vector.c (revision 547d9b97859fb07c9c2b832a30615e0bf91eaab3)
1*547d9b97Sjeremylt /// @file
2*547d9b97Sjeremylt /// Test vector norms
3*547d9b97Sjeremylt /// \test Test vector norms
4*547d9b97Sjeremylt #include <ceed.h>
5*547d9b97Sjeremylt #include <math.h>
6*547d9b97Sjeremylt 
7*547d9b97Sjeremylt int main(int argc, char **argv) {
8*547d9b97Sjeremylt   Ceed ceed;
9*547d9b97Sjeremylt   CeedVector x;
10*547d9b97Sjeremylt   CeedInt n = 10;
11*547d9b97Sjeremylt   CeedScalar a[10];
12*547d9b97Sjeremylt 
13*547d9b97Sjeremylt   CeedInit(argv[1], &ceed);
14*547d9b97Sjeremylt 
15*547d9b97Sjeremylt   CeedVectorCreate(ceed, n, &x);
16*547d9b97Sjeremylt   for (CeedInt i=0; i<n; i++)
17*547d9b97Sjeremylt     a[i] = i * (i % 2 ? 1 : -1);
18*547d9b97Sjeremylt   CeedVectorSetArray(x, CEED_MEM_HOST, CEED_USE_POINTER, a);
19*547d9b97Sjeremylt 
20*547d9b97Sjeremylt   CeedScalar norm;
21*547d9b97Sjeremylt   CeedVectorNorm(x, CEED_NORM_1, &norm);
22*547d9b97Sjeremylt   if (fabs(norm - 45.) > 1e-14)
23*547d9b97Sjeremylt     // LCOV_EXCL_START
24*547d9b97Sjeremylt     printf("Error: L1 norm %f != 45.\n", norm);
25*547d9b97Sjeremylt   // LCOV_EXCL_STOP
26*547d9b97Sjeremylt 
27*547d9b97Sjeremylt   CeedVectorNorm(x, CEED_NORM_2, &norm);
28*547d9b97Sjeremylt   if (fabs(norm - sqrt(285.)) > 1e-14)
29*547d9b97Sjeremylt     // LCOV_EXCL_START
30*547d9b97Sjeremylt     printf("Error: L2 norm %f != sqrt(285.)\n", norm);
31*547d9b97Sjeremylt   // LCOV_EXCL_STOP
32*547d9b97Sjeremylt 
33*547d9b97Sjeremylt   CeedVectorNorm(x, CEED_NORM_MAX, &norm);
34*547d9b97Sjeremylt   if (fabs(norm - 9.) > 1e-14)
35*547d9b97Sjeremylt     // LCOV_EXCL_START
36*547d9b97Sjeremylt     printf("Error: Max norm %f != 9.\n", norm);
37*547d9b97Sjeremylt   // LCOV_EXCL_STOP
38*547d9b97Sjeremylt 
39*547d9b97Sjeremylt   CeedVectorDestroy(&x);
40*547d9b97Sjeremylt   CeedDestroy(&ceed);
41*547d9b97Sjeremylt   return 0;
42*547d9b97Sjeremylt }
43