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 7 int main(int argc, char **argv) { 8 Ceed ceed; 9 CeedVector in[16], out[16]; 10 CeedVector u, v; 11 CeedQFunction qf; 12 CeedInt q = 8; 13 CeedScalar u_array[q]; 14 15 CeedInit(argv[1], &ceed); 16 17 CeedVectorCreate(ceed, q, &u); 18 for (CeedInt i = 0; i < q; i++) u_array[i] = i * i; 19 CeedVectorSetArray(u, CEED_MEM_HOST, CEED_USE_POINTER, u_array); 20 CeedVectorCreate(ceed, q, &v); 21 CeedVectorSetValue(v, 0); 22 23 CeedQFunctionCreateIdentity(ceed, 1, CEED_EVAL_INTERP, CEED_EVAL_INTERP, &qf); 24 { 25 in[0] = u; 26 out[0] = v; 27 CeedQFunctionApply(qf, q, in, out); 28 } 29 30 // Verify results 31 { 32 const CeedScalar *v_array; 33 34 CeedVectorGetArrayRead(v, CEED_MEM_HOST, &v_array); 35 for (CeedInt i = 0; i < q; i++) { 36 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]); 37 } 38 CeedVectorRestoreArrayRead(v, &v_array); 39 } 40 41 CeedVectorDestroy(&u); 42 CeedVectorDestroy(&v); 43 CeedQFunctionDestroy(&qf); 44 CeedDestroy(&ceed); 45 return 0; 46 } 47