11134a487Sjeremylt /// @file 2d1d35e2fSjeremylt /// Test creation, evaluation, and destruction of identity QFunction with size>1 3d1d35e2fSjeremylt /// \test Test creation, evaluation, and destruction of identity QFunction with size>1 41134a487Sjeremylt #include <ceed.h> 51134a487Sjeremylt #include <math.h> 61134a487Sjeremylt 71134a487Sjeremylt int main(int argc, char **argv) { 81134a487Sjeremylt Ceed ceed; 91134a487Sjeremylt CeedVector in[16], out[16]; 101134a487Sjeremylt CeedVector U, V; 111134a487Sjeremylt CeedQFunction qf; 121134a487Sjeremylt CeedInt Q = 8, size = 3; 131134a487Sjeremylt const CeedScalar *v; 14b1f1e60fSNatalie Beams CeedScalar u[Q * size]; 151134a487Sjeremylt 161134a487Sjeremylt CeedInit(argv[1], &ceed); 171134a487Sjeremylt 18*2b730f8bSJeremy L Thompson CeedQFunctionCreateIdentity(ceed, size, CEED_EVAL_INTERP, CEED_EVAL_NONE, &qf); 191134a487Sjeremylt 20*2b730f8bSJeremy L Thompson for (CeedInt i = 0; i < Q * size; i++) u[i] = i * i; 211134a487Sjeremylt 221134a487Sjeremylt CeedVectorCreate(ceed, Q * size, &U); 231134a487Sjeremylt CeedVectorSetArray(U, CEED_MEM_HOST, CEED_USE_POINTER, u); 241134a487Sjeremylt CeedVectorCreate(ceed, Q * size, &V); 251134a487Sjeremylt CeedVectorSetValue(V, 0); 261134a487Sjeremylt 271134a487Sjeremylt { 281134a487Sjeremylt in[0] = U; 291134a487Sjeremylt out[0] = V; 301134a487Sjeremylt CeedQFunctionApply(qf, Q, in, out); 311134a487Sjeremylt } 321134a487Sjeremylt 331134a487Sjeremylt CeedVectorGetArrayRead(V, CEED_MEM_HOST, &v); 34*2b730f8bSJeremy L Thompson for (CeedInt i = 0; i < Q * size; i++) { 35*2b730f8bSJeremy L Thompson if (fabs(v[i] - u[i]) > 1e-12) printf("[%" CeedInt_FMT "] v %f != u %f\n", i, v[i], u[i]); 36*2b730f8bSJeremy L Thompson } 371134a487Sjeremylt CeedVectorRestoreArrayRead(V, &v); 381134a487Sjeremylt 391134a487Sjeremylt CeedVectorDestroy(&U); 401134a487Sjeremylt CeedVectorDestroy(&V); 411134a487Sjeremylt CeedQFunctionDestroy(&qf); 421134a487Sjeremylt CeedDestroy(&ceed); 431134a487Sjeremylt return 0; 441134a487Sjeremylt } 45