xref: /libCEED/tests/t412-qfunction.c (revision 2b730f8b5a9c809740a0b3b302db43a719c636b1)
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