1 /// @file 2 /// Test creation, evaluation, and destruction of identity QFunction 3 /// \test Test creation, evaluation, and destruction of identity QFunction 4 #include <ceed.h> 5 #include <math.h> 6 #include <stdio.h> 7 8 int main(int argc, char **argv) { 9 Ceed ceed; 10 CeedVector in[16], out[16]; 11 CeedVector u, v; 12 CeedQFunction qf; 13 CeedInt q = 8; 14 CeedScalar u_array[q]; 15 16 CeedInit(argv[1], &ceed); 17 18 CeedVectorCreate(ceed, q, &u); 19 for (CeedInt i = 0; i < q; i++) u_array[i] = i * i; 20 CeedVectorSetArray(u, CEED_MEM_HOST, CEED_USE_POINTER, u_array); 21 CeedVectorCreate(ceed, q, &v); 22 CeedVectorSetValue(v, 0); 23 24 CeedQFunctionCreateIdentity(ceed, 1, CEED_EVAL_INTERP, CEED_EVAL_INTERP, &qf); 25 { 26 in[0] = u; 27 out[0] = v; 28 CeedQFunctionApply(qf, q, in, out); 29 } 30 31 // Verify results 32 { 33 const CeedScalar *v_array; 34 35 CeedVectorGetArrayRead(v, CEED_MEM_HOST, &v_array); 36 for (CeedInt i = 0; i < q; i++) { 37 if (fabs(v_array[i] - u_array[i]) > 1e-14) printf("[%" CeedInt_FMT "] v %f != u %f\n", i, v_array[i], u_array[i]); 38 } 39 CeedVectorRestoreArrayRead(v, &v_array); 40 } 41 42 CeedVectorDestroy(&u); 43 CeedVectorDestroy(&v); 44 CeedQFunctionDestroy(&qf); 45 CeedDestroy(&ceed); 46 return 0; 47 } 48