45 CeedOperatorInfo &info,
50 ElementsMap element_indices;
54 for (
int i = 0; i < fes.
GetNE(); i++)
57 auto value = count.find(key);
58 if (value == count.end())
60 count[key] =
new int(1);
69 for (
const auto& value : count )
71 element_indices[value.first] =
new int[*value.second];
72 offsets[value.first] =
new int(0);
76 for (
int i = 0; i < fes.
GetNE(); i++)
79 int &offset = *(offsets[key]);
80 int* indices_array = element_indices[key];
81 indices_array[offset] = i;
86 CeedCompositeOperatorCreate(internal::ceed, &
oper);
89 sub_ops.reserve(element_indices.size());
90 for (
const auto& value : element_indices)
92 const int* indices = value.second;
93 const int first_index = indices[0];
96 MFEM_ASSERT(!integ.GetIntegrationRule(),
97 "Mixed mesh integrators should not have an"
100 auto sub_op =
new CeedInteg();
101 int nelem = *count[value.first];
102 sub_op->Assemble(info, fes, ir, nelem, indices, Q);
103 sub_ops.push_back(sub_op);
104 CeedCompositeOperatorAddSub(
oper, sub_op->GetCeedOperator());
108 CeedVectorCreate(internal::ceed, ndofs, &
u);
109 CeedVectorCreate(internal::ceed, ndofs, &
v);