1 /// @file
2 /// Test creation, action, and destruction for identity operator
3 /// \test Test creation, action, and destruction for identity operator
4 #include <ceed.h>
5 #include <math.h>
6 #include <stdio.h>
7 #include <stdlib.h>
8
main(int argc,char ** argv)9 int main(int argc, char **argv) {
10 Ceed ceed;
11 CeedElemRestriction elem_restriction_u_i;
12 CeedQFunction qf_identity;
13 CeedOperator op_identity;
14 CeedVector u, v;
15 CeedInt num_elem = 15, p = 5;
16 CeedInt num_nodes = num_elem * p;
17
18 CeedInit(argv[1], &ceed);
19
20 CeedVectorCreate(ceed, num_nodes, &u);
21 CeedVectorCreate(ceed, num_nodes, &v);
22
23 // Restrictions
24 CeedInt strides_u_i[3] = {1, p, p};
25 CeedElemRestrictionCreateStrided(ceed, num_elem, p, 1, p * num_elem, strides_u_i, &elem_restriction_u_i);
26
27 // QFunction
28 CeedQFunctionCreateIdentity(ceed, 1, CEED_EVAL_NONE, CEED_EVAL_NONE, &qf_identity);
29
30 // Operators
31 CeedOperatorCreate(ceed, qf_identity, CEED_QFUNCTION_NONE, CEED_QFUNCTION_NONE, &op_identity);
32 CeedOperatorSetField(op_identity, "input", elem_restriction_u_i, CEED_BASIS_NONE, CEED_VECTOR_ACTIVE);
33 CeedOperatorSetField(op_identity, "output", elem_restriction_u_i, CEED_BASIS_NONE, CEED_VECTOR_ACTIVE);
34
35 CeedVectorSetValue(u, 3.0);
36 CeedOperatorApply(op_identity, u, v, CEED_REQUEST_IMMEDIATE);
37
38 // Check output
39 {
40 const CeedScalar *v_array;
41
42 CeedVectorGetArrayRead(v, CEED_MEM_HOST, &v_array);
43 for (CeedInt i = 0; i < num_nodes; i++) {
44 if (fabs(v_array[i] - 3.) > 100. * CEED_EPSILON) printf("[%" CeedInt_FMT "] Computed Value: %f != True Value: 3.0\n", i, v_array[i]);
45 }
46 CeedVectorRestoreArrayRead(v, &v_array);
47 }
48
49 CeedVectorDestroy(&u);
50 CeedVectorDestroy(&v);
51 CeedElemRestrictionDestroy(&elem_restriction_u_i);
52 CeedQFunctionDestroy(&qf_identity);
53 CeedOperatorDestroy(&op_identity);
54 CeedDestroy(&ceed);
55 return 0;
56 }
57