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