1547d9b97Sjeremylt /// @file 2547d9b97Sjeremylt /// Test vector norms 3547d9b97Sjeremylt /// \test Test vector norms 4547d9b97Sjeremylt #include <ceed.h> 5547d9b97Sjeremylt #include <math.h> 6*49aac155SJeremy L Thompson #include <stdio.h> 7547d9b97Sjeremylt 8547d9b97Sjeremylt int main(int argc, char **argv) { 9547d9b97Sjeremylt Ceed ceed; 10547d9b97Sjeremylt CeedVector x; 114fee36f0SJeremy L Thompson CeedInt len = 10; 124fee36f0SJeremy L Thompson CeedScalar array[len]; 13547d9b97Sjeremylt 14547d9b97Sjeremylt CeedInit(argv[1], &ceed); 15547d9b97Sjeremylt 164fee36f0SJeremy L Thompson CeedVectorCreate(ceed, len, &x); 174fee36f0SJeremy L Thompson for (CeedInt i = 0; i < len; i++) array[i] = i * (i % 2 ? 1 : -1); 184fee36f0SJeremy L Thompson CeedVectorSetArray(x, CEED_MEM_HOST, CEED_USE_POINTER, array); 1916e0f512Sjeremylt { 2016e0f512Sjeremylt // Sync memtype to device for GPU backends 2116e0f512Sjeremylt CeedMemType type = CEED_MEM_HOST; 2216e0f512Sjeremylt CeedGetPreferredMemType(ceed, &type); 2316e0f512Sjeremylt CeedVectorSyncArray(x, type); 2416e0f512Sjeremylt } 25547d9b97Sjeremylt 26547d9b97Sjeremylt CeedScalar norm; 27547d9b97Sjeremylt CeedVectorNorm(x, CEED_NORM_1, &norm); 282b730f8bSJeremy L Thompson if (fabs(norm - 45.) > 100. * CEED_EPSILON) printf("Error: L1 norm %f != 45.\n", norm); 29547d9b97Sjeremylt 30547d9b97Sjeremylt CeedVectorNorm(x, CEED_NORM_2, &norm); 312b730f8bSJeremy L Thompson if (fabs(norm - sqrt(285.)) > 100. * CEED_EPSILON) printf("Error: L2 norm %f != sqrt(285.)\n", norm); 32547d9b97Sjeremylt 33547d9b97Sjeremylt CeedVectorNorm(x, CEED_NORM_MAX, &norm); 342b730f8bSJeremy L Thompson if (fabs(norm - 9.) > 100. * CEED_EPSILON) printf("Error: Max norm %f != 9.\n", norm); 35547d9b97Sjeremylt 36547d9b97Sjeremylt CeedVectorDestroy(&x); 37547d9b97Sjeremylt CeedDestroy(&ceed); 38547d9b97Sjeremylt return 0; 39547d9b97Sjeremylt } 40