xref: /libCEED/tests/t108-vector.c (revision 16e0f5123feed9e8ea59dbae709085fc2dd873d3)
1547d9b97Sjeremylt /// @file
2547d9b97Sjeremylt /// Test vector norms
3547d9b97Sjeremylt /// \test Test vector norms
4547d9b97Sjeremylt #include <ceed.h>
5547d9b97Sjeremylt #include <math.h>
6547d9b97Sjeremylt 
7547d9b97Sjeremylt int main(int argc, char **argv) {
8547d9b97Sjeremylt   Ceed ceed;
9547d9b97Sjeremylt   CeedVector x;
10547d9b97Sjeremylt   CeedInt n = 10;
11547d9b97Sjeremylt   CeedScalar a[10];
12547d9b97Sjeremylt 
13547d9b97Sjeremylt   CeedInit(argv[1], &ceed);
14547d9b97Sjeremylt 
15547d9b97Sjeremylt   CeedVectorCreate(ceed, n, &x);
16547d9b97Sjeremylt   for (CeedInt i=0; i<n; i++)
17547d9b97Sjeremylt     a[i] = i * (i % 2 ? 1 : -1);
18547d9b97Sjeremylt   CeedVectorSetArray(x, CEED_MEM_HOST, CEED_USE_POINTER, a);
19*16e0f512Sjeremylt   {
20*16e0f512Sjeremylt     // Sync memtype to device for GPU backends
21*16e0f512Sjeremylt     CeedMemType type = CEED_MEM_HOST;
22*16e0f512Sjeremylt     CeedGetPreferredMemType(ceed, &type);
23*16e0f512Sjeremylt     CeedVectorSyncArray(x, type);
24*16e0f512Sjeremylt   }
25547d9b97Sjeremylt 
26547d9b97Sjeremylt   CeedScalar norm;
27547d9b97Sjeremylt   CeedVectorNorm(x, CEED_NORM_1, &norm);
28547d9b97Sjeremylt   if (fabs(norm - 45.) > 1e-14)
29547d9b97Sjeremylt     // LCOV_EXCL_START
30547d9b97Sjeremylt     printf("Error: L1 norm %f != 45.\n", norm);
31547d9b97Sjeremylt   // LCOV_EXCL_STOP
32547d9b97Sjeremylt 
33547d9b97Sjeremylt   CeedVectorNorm(x, CEED_NORM_2, &norm);
34547d9b97Sjeremylt   if (fabs(norm - sqrt(285.)) > 1e-14)
35547d9b97Sjeremylt     // LCOV_EXCL_START
36547d9b97Sjeremylt     printf("Error: L2 norm %f != sqrt(285.)\n", norm);
37547d9b97Sjeremylt   // LCOV_EXCL_STOP
38547d9b97Sjeremylt 
39547d9b97Sjeremylt   CeedVectorNorm(x, CEED_NORM_MAX, &norm);
40547d9b97Sjeremylt   if (fabs(norm - 9.) > 1e-14)
41547d9b97Sjeremylt     // LCOV_EXCL_START
42547d9b97Sjeremylt     printf("Error: Max norm %f != 9.\n", norm);
43547d9b97Sjeremylt   // LCOV_EXCL_STOP
44547d9b97Sjeremylt 
45547d9b97Sjeremylt   CeedVectorDestroy(&x);
46547d9b97Sjeremylt   CeedDestroy(&ceed);
47547d9b97Sjeremylt   return 0;
48547d9b97Sjeremylt }
49