1*288c0443SJeremy L Thompson /// @file 2*288c0443SJeremy L Thompson /// Test creation, evaluation, and destruction for qfunction by name 3*288c0443SJeremy L Thompson /// \test Test creation, evaluation, and destruction for qfunction by name 4*288c0443SJeremy L Thompson #include <ceed.h> 5*288c0443SJeremy L Thompson 6*288c0443SJeremy L Thompson int main(int argc, char **argv) { 7*288c0443SJeremy L Thompson Ceed ceed; 8*288c0443SJeremy L Thompson CeedVector in[16], out[16]; 9*288c0443SJeremy L Thompson CeedVector Qdata, J, W, U, V; 10*288c0443SJeremy L Thompson CeedQFunction qf_setup, qf_mass; 11*288c0443SJeremy L Thompson CeedInt Q = 8; 12*288c0443SJeremy L Thompson const CeedScalar *vv; 13*288c0443SJeremy L Thompson CeedScalar j[Q], w[Q], u[Q], v[Q]; 14*288c0443SJeremy L Thompson 15*288c0443SJeremy L Thompson 16*288c0443SJeremy L Thompson CeedInit(argv[1], &ceed); 17*288c0443SJeremy L Thompson 18*288c0443SJeremy L Thompson CeedQFunctionCreateInteriorByName(ceed, "Mass1DBuild", &qf_setup); 19*288c0443SJeremy L Thompson CeedQFunctionCreateInteriorByName(ceed, "MassApply", &qf_mass); 20*288c0443SJeremy L Thompson 21*288c0443SJeremy L Thompson for (CeedInt i=0; i<Q; i++) { 22*288c0443SJeremy L Thompson CeedScalar x = 2.*i/(Q-1) - 1; 23*288c0443SJeremy L Thompson j[i] = 1; 24*288c0443SJeremy L Thompson w[i] = 1 - x*x; 25*288c0443SJeremy L Thompson u[i] = 2 + 3*x + 5*x*x; 26*288c0443SJeremy L Thompson v[i] = w[i] * u[i]; 27*288c0443SJeremy L Thompson } 28*288c0443SJeremy L Thompson 29*288c0443SJeremy L Thompson CeedVectorCreate(ceed, Q, &J); 30*288c0443SJeremy L Thompson CeedVectorSetArray(J, CEED_MEM_HOST, CEED_USE_POINTER, j); 31*288c0443SJeremy L Thompson CeedVectorCreate(ceed, Q, &W); 32*288c0443SJeremy L Thompson CeedVectorSetArray(W, CEED_MEM_HOST, CEED_USE_POINTER, w); 33*288c0443SJeremy L Thompson CeedVectorCreate(ceed, Q, &U); 34*288c0443SJeremy L Thompson CeedVectorSetArray(U, CEED_MEM_HOST, CEED_USE_POINTER, u); 35*288c0443SJeremy L Thompson CeedVectorCreate(ceed, Q, &V); 36*288c0443SJeremy L Thompson CeedVectorSetValue(V, 0); 37*288c0443SJeremy L Thompson CeedVectorCreate(ceed, Q, &Qdata); 38*288c0443SJeremy L Thompson CeedVectorSetValue(Qdata, 0); 39*288c0443SJeremy L Thompson 40*288c0443SJeremy L Thompson { 41*288c0443SJeremy L Thompson in[0] = J; 42*288c0443SJeremy L Thompson in[1] = W; 43*288c0443SJeremy L Thompson out[0] = Qdata; 44*288c0443SJeremy L Thompson CeedQFunctionApply(qf_setup, Q, in, out); 45*288c0443SJeremy L Thompson } 46*288c0443SJeremy L Thompson { 47*288c0443SJeremy L Thompson in[0] = W; 48*288c0443SJeremy L Thompson in[1] = U; 49*288c0443SJeremy L Thompson out[0] = V; 50*288c0443SJeremy L Thompson CeedQFunctionApply(qf_mass, Q, in, out); 51*288c0443SJeremy L Thompson } 52*288c0443SJeremy L Thompson 53*288c0443SJeremy L Thompson CeedVectorGetArrayRead(V, CEED_MEM_HOST, &vv); 54*288c0443SJeremy L Thompson for (CeedInt i=0; i<Q; i++) 55*288c0443SJeremy L Thompson if (v[i] != vv[i]) 56*288c0443SJeremy L Thompson // LCOV_EXCL_START 57*288c0443SJeremy L Thompson printf("[%d] v %f != vv %f\n",i, v[i], vv[i]); 58*288c0443SJeremy L Thompson // LCOV_EXCL_STOP 59*288c0443SJeremy L Thompson CeedVectorRestoreArrayRead(V, &vv); 60*288c0443SJeremy L Thompson 61*288c0443SJeremy L Thompson CeedVectorDestroy(&W); 62*288c0443SJeremy L Thompson CeedVectorDestroy(&U); 63*288c0443SJeremy L Thompson CeedVectorDestroy(&V); 64*288c0443SJeremy L Thompson CeedVectorDestroy(&Qdata); 65*288c0443SJeremy L Thompson CeedQFunctionDestroy(&qf_setup); 66*288c0443SJeremy L Thompson CeedQFunctionDestroy(&qf_mass); 67*288c0443SJeremy L Thompson CeedDestroy(&ceed); 68*288c0443SJeremy L Thompson return 0; 69*288c0443SJeremy L Thompson } 70