xref: /libCEED/tests/t412-qfunction.c (revision d1d35e2f02dc969aee8debf3fd943dd784aa847a)
11134a487Sjeremylt /// @file
2*d1d35e2fSjeremylt /// Test creation, evaluation, and destruction of identity QFunction with size>1
3*d1d35e2fSjeremylt /// \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 
1843eb8658SJeremy L Thompson   CeedQFunctionCreateIdentity(ceed, size, CEED_EVAL_INTERP, CEED_EVAL_NONE,
1960f77c51Sjeremylt                               &qf);
201134a487Sjeremylt 
211134a487Sjeremylt   for (CeedInt i=0; i<Q*size; i++)
221134a487Sjeremylt     u[i] = i*i;
231134a487Sjeremylt 
241134a487Sjeremylt   CeedVectorCreate(ceed, Q*size, &U);
251134a487Sjeremylt   CeedVectorSetArray(U, CEED_MEM_HOST, CEED_USE_POINTER, u);
261134a487Sjeremylt   CeedVectorCreate(ceed, Q*size, &V);
271134a487Sjeremylt   CeedVectorSetValue(V, 0);
281134a487Sjeremylt 
291134a487Sjeremylt   {
301134a487Sjeremylt     in[0] = U;
311134a487Sjeremylt     out[0] = V;
321134a487Sjeremylt     CeedQFunctionApply(qf, Q, in, out);
331134a487Sjeremylt   }
341134a487Sjeremylt 
351134a487Sjeremylt   CeedVectorGetArrayRead(V, CEED_MEM_HOST, &v);
361134a487Sjeremylt   for (CeedInt i=0; i<Q*size; i++)
374e367ab1Sjeremylt     if (fabs(v[i] - u[i])>1e-12)
381134a487Sjeremylt       // LCOV_EXCL_START
391134a487Sjeremylt       printf("[%d] v %f != u %f\n",i, v[i], u[i]);
401134a487Sjeremylt   // LCOV_EXCL_STOP
411134a487Sjeremylt   CeedVectorRestoreArrayRead(V, &v);
421134a487Sjeremylt 
431134a487Sjeremylt   CeedVectorDestroy(&U);
441134a487Sjeremylt   CeedVectorDestroy(&V);
451134a487Sjeremylt   CeedQFunctionDestroy(&qf);
461134a487Sjeremylt   CeedDestroy(&ceed);
471134a487Sjeremylt   return 0;
481134a487Sjeremylt }
49