19 std::vector<std::unique_ptr<NumericVector<Number>>> & temporary_gradient,
20 const std::unordered_set<unsigned int> & gradient_variables)
21 : _fe_problem(fe_problem),
22 _dim(_fe_problem.
mesh().dimension()),
24 _libmesh_system(system.system()),
25 _system_number(_libmesh_system.number()),
26 _temporary_gradient(temporary_gradient),
27 _gradient_variables(gradient_variables)
51 unsigned int size = 0;
65 std::vector<Real>(size, 0.0));
67 std::vector<Real>(size, 0.0));
68 std::vector<dof_id_type> dof_indices_elem(size, 0);
69 std::vector<dof_id_type> dof_indices_neighbor(size, 0);
75 auto face_iterator = range.begin();
76 for (
const auto & face_i : make_range(size))
78 const auto & face_info = *face_iterator;
80 const auto current_face_type =
87 dof_indices_elem[face_i] =
89 dof_indices_neighbor[face_i] =
92 const auto face_value =
94 solution_reader(dof_indices_neighbor[face_i]),
98 const auto contribution =
99 face_info->normal() * face_info->faceArea() * face_info->faceCoord() * face_value;
101 for (
const auto i : make_range(
_dim))
103 temporary_values_elem[i][face_i] = contribution(i);
104 temporary_values_neighbor[i][face_i] = -contribution(i);
120 ? face_info->elemInfo()
121 : face_info->neighborInfo();
125 const auto multiplier =
129 : dof_indices_neighbor;
131 ? temporary_values_elem
132 : temporary_values_neighbor;
134 dof_id_container[face_i] =
139 const auto contribution = multiplier * face_info->normal() * face_info->faceArea() *
140 face_info->faceCoord() *
141 (bc_pointer ? bc_pointer->computeBoundaryValue()
142 : solution_reader(dof_id_container[face_i]));
143 for (
const auto i : make_range(
_dim))
144 contribution_container[i][face_i] = contribution(i);
149 for (
const auto i : make_range(
_dim))
153 dof_indices_neighbor);
libMesh::CompareTypes< T, T2 >::supertype linearInterpolation(const T &value1, const T2 &value2, const FaceInfo &fi, const bool one_is_elem, const InterpMethod interp_method=InterpMethod::Average)
A simple linear interpolation of values between cell centers to a cell face.