10436c2adSjeremylt /// @file
2*ac5aa7bcSJeremy L Thompson /// Test setting single value for full CeedVector
3*ac5aa7bcSJeremy L Thompson /// \test Test setting single value for full CeedVector
4b0976d5aSZach Atkins
5b0976d5aSZach Atkins //TESTARGS(name="length 10") {ceed_resource} 10
6b0976d5aSZach Atkins //TESTARGS(name="length 0") {ceed_resource} 0
70436c2adSjeremylt #include <ceed.h>
849aac155SJeremy L Thompson #include <stdio.h>
9b0976d5aSZach Atkins #include <stdlib.h>
102b730f8bSJeremy L Thompson
CheckValues(Ceed ceed,CeedVector x,CeedScalar value)110436c2adSjeremylt static int CheckValues(Ceed ceed, CeedVector x, CeedScalar value) {
124fee36f0SJeremy L Thompson const CeedScalar *read_array;
134fee36f0SJeremy L Thompson CeedSize len;
144fee36f0SJeremy L Thompson
154fee36f0SJeremy L Thompson CeedVectorGetLength(x, &len);
164fee36f0SJeremy L Thompson CeedVectorGetArrayRead(x, CEED_MEM_HOST, &read_array);
174fee36f0SJeremy L Thompson for (CeedInt i = 0; i < len; i++) {
184fee36f0SJeremy L Thompson if (read_array[i] != value) printf("Error reading array[%" CeedInt_FMT "] = %f", i, (CeedScalar)read_array[i]);
190436c2adSjeremylt }
204fee36f0SJeremy L Thompson CeedVectorRestoreArrayRead(x, &read_array);
210436c2adSjeremylt return 0;
220436c2adSjeremylt }
230436c2adSjeremylt
main(int argc,char ** argv)240436c2adSjeremylt int main(int argc, char **argv) {
250436c2adSjeremylt Ceed ceed;
260436c2adSjeremylt CeedVector x;
274fee36f0SJeremy L Thompson CeedInt len = 10;
280436c2adSjeremylt
290436c2adSjeremylt CeedInit(argv[1], &ceed);
30b0976d5aSZach Atkins len = argc > 2 ? atoi(argv[2]) : len;
314fee36f0SJeremy L Thompson
3216e0f512Sjeremylt {
334fee36f0SJeremy L Thompson CeedScalar array[len];
344fee36f0SJeremy L Thompson
354fee36f0SJeremy L Thompson CeedVectorCreate(ceed, len, &x);
364fee36f0SJeremy L Thompson for (CeedInt i = 0; i < len; i++) array[i] = len + i;
374fee36f0SJeremy L Thompson CeedVectorSetArray(x, CEED_MEM_HOST, CEED_COPY_VALUES, array);
384fee36f0SJeremy L Thompson }
394fee36f0SJeremy L Thompson
4016e0f512Sjeremylt // Sync memtype to device for GPU backends
414fee36f0SJeremy L Thompson {
4216e0f512Sjeremylt CeedMemType type = CEED_MEM_HOST;
434fee36f0SJeremy L Thompson
4416e0f512Sjeremylt CeedGetPreferredMemType(ceed, &type);
4516e0f512Sjeremylt CeedVectorSyncArray(x, type);
4616e0f512Sjeremylt }
470436c2adSjeremylt
484fee36f0SJeremy L Thompson {
494fee36f0SJeremy L Thompson const CeedScalar *read_array;
500436c2adSjeremylt
514fee36f0SJeremy L Thompson CeedVectorGetArrayRead(x, CEED_MEM_HOST, &read_array);
524fee36f0SJeremy L Thompson for (CeedInt i = 0; i < len; i++) {
534fee36f0SJeremy L Thompson if (read_array[i] != len + i) printf("Error reading array[%" CeedInt_FMT "] = %f\n", i, (CeedScalar)read_array[i]);
544fee36f0SJeremy L Thompson }
554fee36f0SJeremy L Thompson CeedVectorRestoreArrayRead(x, &read_array);
564fee36f0SJeremy L Thompson }
574fee36f0SJeremy L Thompson
584fee36f0SJeremy L Thompson // Set all entries to same value and check
590436c2adSjeremylt CeedVectorSetValue(x, 3.0);
600436c2adSjeremylt CheckValues(ceed, x, 3.0);
610436c2adSjeremylt CeedVectorDestroy(&x);
620436c2adSjeremylt
630436c2adSjeremylt // Set value before setting or getting the array
644fee36f0SJeremy L Thompson CeedVectorCreate(ceed, len, &x);
650436c2adSjeremylt CeedVectorSetValue(x, 5.0);
660436c2adSjeremylt CheckValues(ceed, x, 5.0);
670436c2adSjeremylt CeedVectorDestroy(&x);
680436c2adSjeremylt
690436c2adSjeremylt CeedDestroy(&ceed);
700436c2adSjeremylt return 0;
710436c2adSjeremylt }
72