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