1288c0443SJeremy L Thompson /// @file 2*d1d35e2fSjeremylt /// Test creation, evaluation, and destruction for QFunction by name 3*d1d35e2fSjeremylt /// \test Test creation, evaluation, and destruction for QFunction by name 4288c0443SJeremy L Thompson #include <ceed.h> 5288c0443SJeremy L Thompson 6288c0443SJeremy L Thompson int main(int argc, char **argv) { 7288c0443SJeremy L Thompson Ceed ceed; 8288c0443SJeremy L Thompson CeedVector in[16], out[16]; 9*d1d35e2fSjeremylt CeedVector Q_data, J, W, U, V; 10288c0443SJeremy L Thompson CeedQFunction qf_setup, qf_mass; 11288c0443SJeremy L Thompson CeedInt Q = 8; 12288c0443SJeremy L Thompson const CeedScalar *vv; 13288c0443SJeremy L Thompson CeedScalar j[Q], w[Q], u[Q], v[Q]; 14288c0443SJeremy L Thompson 15288c0443SJeremy L Thompson CeedInit(argv[1], &ceed); 16288c0443SJeremy L Thompson 17288c0443SJeremy L Thompson CeedQFunctionCreateInteriorByName(ceed, "Mass1DBuild", &qf_setup); 18288c0443SJeremy L Thompson CeedQFunctionCreateInteriorByName(ceed, "MassApply", &qf_mass); 19288c0443SJeremy L Thompson 20288c0443SJeremy L Thompson for (CeedInt i=0; i<Q; i++) { 21288c0443SJeremy L Thompson CeedScalar x = 2.*i/(Q-1) - 1; 22288c0443SJeremy L Thompson j[i] = 1; 23288c0443SJeremy L Thompson w[i] = 1 - x*x; 24288c0443SJeremy L Thompson u[i] = 2 + 3*x + 5*x*x; 25288c0443SJeremy L Thompson v[i] = w[i] * u[i]; 26288c0443SJeremy L Thompson } 27288c0443SJeremy L Thompson 28288c0443SJeremy L Thompson CeedVectorCreate(ceed, Q, &J); 29288c0443SJeremy L Thompson CeedVectorSetArray(J, CEED_MEM_HOST, CEED_USE_POINTER, j); 30288c0443SJeremy L Thompson CeedVectorCreate(ceed, Q, &W); 31288c0443SJeremy L Thompson CeedVectorSetArray(W, CEED_MEM_HOST, CEED_USE_POINTER, w); 32288c0443SJeremy L Thompson CeedVectorCreate(ceed, Q, &U); 33288c0443SJeremy L Thompson CeedVectorSetArray(U, CEED_MEM_HOST, CEED_USE_POINTER, u); 34288c0443SJeremy L Thompson CeedVectorCreate(ceed, Q, &V); 35288c0443SJeremy L Thompson CeedVectorSetValue(V, 0); 36*d1d35e2fSjeremylt CeedVectorCreate(ceed, Q, &Q_data); 37*d1d35e2fSjeremylt CeedVectorSetValue(Q_data, 0); 38288c0443SJeremy L Thompson 39288c0443SJeremy L Thompson { 40288c0443SJeremy L Thompson in[0] = J; 41288c0443SJeremy L Thompson in[1] = W; 42*d1d35e2fSjeremylt out[0] = Q_data; 43288c0443SJeremy L Thompson CeedQFunctionApply(qf_setup, Q, in, out); 44288c0443SJeremy L Thompson } 45288c0443SJeremy L Thompson { 46288c0443SJeremy L Thompson in[0] = W; 47288c0443SJeremy L Thompson in[1] = U; 48288c0443SJeremy L Thompson out[0] = V; 49288c0443SJeremy L Thompson CeedQFunctionApply(qf_mass, Q, in, out); 50288c0443SJeremy L Thompson } 51288c0443SJeremy L Thompson 52288c0443SJeremy L Thompson CeedVectorGetArrayRead(V, CEED_MEM_HOST, &vv); 53288c0443SJeremy L Thompson for (CeedInt i=0; i<Q; i++) 54288c0443SJeremy L Thompson if (v[i] != vv[i]) 55288c0443SJeremy L Thompson // LCOV_EXCL_START 56288c0443SJeremy L Thompson printf("[%d] v %f != vv %f\n",i, v[i], vv[i]); 57288c0443SJeremy L Thompson // LCOV_EXCL_STOP 58288c0443SJeremy L Thompson CeedVectorRestoreArrayRead(V, &vv); 59288c0443SJeremy L Thompson 60288c0443SJeremy L Thompson CeedVectorDestroy(&W); 61288c0443SJeremy L Thompson CeedVectorDestroy(&U); 62288c0443SJeremy L Thompson CeedVectorDestroy(&V); 63*d1d35e2fSjeremylt CeedVectorDestroy(&Q_data); 64288c0443SJeremy L Thompson CeedQFunctionDestroy(&qf_setup); 65288c0443SJeremy L Thompson CeedQFunctionDestroy(&qf_mass); 66288c0443SJeremy L Thompson CeedDestroy(&ceed); 67288c0443SJeremy L Thompson return 0; 68288c0443SJeremy L Thompson } 69