xref: /libCEED/tests/t101-vector.c (revision 16e0f5123feed9e8ea59dbae709085fc2dd873d3)
10436c2adSjeremylt /// @file
20436c2adSjeremylt /// Test CeedVectorSetValue
30436c2adSjeremylt /// \test Test CeedVectorSetValue
40436c2adSjeremylt #include <ceed.h>
50436c2adSjeremylt static int CheckValues(Ceed ceed, CeedVector x, CeedScalar value) {
60436c2adSjeremylt   const CeedScalar *b;
70436c2adSjeremylt   CeedInt n;
80436c2adSjeremylt   CeedVectorGetLength(x, &n);
90436c2adSjeremylt   CeedVectorGetArrayRead(x, CEED_MEM_HOST, &b);
100436c2adSjeremylt   for (CeedInt i=0; i<n; i++) {
110436c2adSjeremylt     if (b[i] != value)
120436c2adSjeremylt       // LCOV_EXCL_START
130436c2adSjeremylt       printf("Error reading array b[%d] = %f",i,
140436c2adSjeremylt              (double)b[i]);
150436c2adSjeremylt     // LCOV_EXCL_STOP
160436c2adSjeremylt   }
170436c2adSjeremylt   CeedVectorRestoreArrayRead(x, &b);
180436c2adSjeremylt   return 0;
190436c2adSjeremylt }
200436c2adSjeremylt 
210436c2adSjeremylt int main(int argc, char **argv) {
220436c2adSjeremylt   Ceed ceed;
230436c2adSjeremylt   CeedVector x;
240436c2adSjeremylt   CeedInt n;
250436c2adSjeremylt   CeedScalar a[10];
260436c2adSjeremylt   const CeedScalar *b;
270436c2adSjeremylt 
280436c2adSjeremylt   CeedInit(argv[1], &ceed);
290436c2adSjeremylt   n = 10;
300436c2adSjeremylt   CeedVectorCreate(ceed, n, &x);
310436c2adSjeremylt   for (CeedInt i=0; i<n; i++)
320436c2adSjeremylt     a[i] = 10 + i;
330436c2adSjeremylt   CeedVectorSetArray(x, CEED_MEM_HOST, CEED_USE_POINTER, a);
34*16e0f512Sjeremylt   {
35*16e0f512Sjeremylt     // Sync memtype to device for GPU backends
36*16e0f512Sjeremylt     CeedMemType type = CEED_MEM_HOST;
37*16e0f512Sjeremylt     CeedGetPreferredMemType(ceed, &type);
38*16e0f512Sjeremylt     CeedVectorSyncArray(x, type);
39*16e0f512Sjeremylt   }
400436c2adSjeremylt 
410436c2adSjeremylt   CeedVectorGetArrayRead(x, CEED_MEM_HOST, &b);
420436c2adSjeremylt   for (CeedInt i=0; i<n; i++)
430436c2adSjeremylt     if (b[i] != 10+i)
440436c2adSjeremylt       // LCOV_EXCL_START
450436c2adSjeremylt       printf("Error reading array b[%d] = %f",i,
460436c2adSjeremylt              (double)b[i]);
470436c2adSjeremylt   // LCOV_EXCL_STOP
480436c2adSjeremylt   CeedVectorRestoreArrayRead(x, &b);
490436c2adSjeremylt 
500436c2adSjeremylt   CeedVectorSetValue(x, 3.0);
510436c2adSjeremylt   CheckValues(ceed, x, 3.0);
520436c2adSjeremylt   CeedVectorDestroy(&x);
530436c2adSjeremylt 
540436c2adSjeremylt   CeedVectorCreate(ceed, n, &x);
550436c2adSjeremylt   // Set value before setting or getting the array
560436c2adSjeremylt   CeedVectorSetValue(x, 5.0);
570436c2adSjeremylt   CheckValues(ceed, x, 5.0);
580436c2adSjeremylt   CeedVectorDestroy(&x);
590436c2adSjeremylt 
600436c2adSjeremylt   CeedDestroy(&ceed);
610436c2adSjeremylt   return 0;
620436c2adSjeremylt }
63