29 integrate(
const dealii::DoFHandler<dim> &dof_handler,
const auto &solution_vector)
31 constexpr unsigned int expected_components =
32 dealii::Tensor<rank, dim>::n_independent_components;
33 Assert(dof_handler.get_fe().n_components() == expected_components,
34 dealii::ExcMessage(
"The provided DoFHandler does not have the same number of "
35 "components as the expected ones. For scalar fields there "
36 "should be 1 component."));
39 solution_vector.update_ghost_values();
42 dealii::FEValues<dim> fe_values(dof_handler.get_fe(),
44 dealii::update_values | dealii::update_JxW_values);
50 std::vector<dealii::Vector<number>> quad_values(num_quad_points,
51 dealii::Vector<number>(
52 expected_components));
55 dealii::Vector<number> value(expected_components);
56 for (
const auto &cell : dof_handler.active_cell_iterators())
58 if (cell->is_locally_owned())
61 fe_values.reinit(cell);
64 fe_values.get_function_values(solution_vector, quad_values);
68 for (
unsigned int q_point = 0; q_point < num_quad_points; ++q_point)
70 for (
unsigned int component = 0; component < expected_components;
74 quad_values[q_point][component] * fe_values.JxW(q_point);
80 for (
unsigned int component = 0; component < expected_components; component++)
82 value[component] = dealii::Utilities::MPI::sum(value[component], MPI_COMM_WORLD);