13#ifndef dealii_adaptation_strategies_h
14#define dealii_adaptation_strategies_h
62 template <
int dim,
int spacedim,
typename value_type>
63 std::vector<value_type>
64 preserve(
const typename ::Triangulation<dim, spacedim>::cell_iterator
66 const value_type parent_value);
81 template <
int dim,
int spacedim,
typename value_type>
82 std::vector<value_type>
83 split(
const typename ::Triangulation<dim, spacedim>::cell_iterator
85 const value_type parent_value);
100 template <
int dim,
int spacedim,
typename value_type>
101 std::vector<value_type>
102 l2_norm(
const typename ::Triangulation<dim, spacedim>::cell_iterator
104 const value_type parent_value);
126 template <
int dim,
int spacedim,
typename value_type>
129 const typename ::Triangulation<dim, spacedim>::cell_iterator
131 const std::vector<value_type> &children_values);
145 template <
int dim,
int spacedim,
typename value_type>
147 sum(
const typename ::Triangulation<dim, spacedim>::cell_iterator
149 const std::vector<value_type> &children_values);
163 template <
int dim,
int spacedim,
typename value_type>
165 l2_norm(
const typename ::Triangulation<dim, spacedim>::cell_iterator
167 const std::vector<value_type> &children_values);
178 template <
int dim,
int spacedim,
typename value_type>
180 mean(
const typename ::Triangulation<dim, spacedim>::cell_iterator
182 const std::vector<value_type> &children_values);
193 template <
int dim,
int spacedim,
typename value_type>
195 max(
const typename ::Triangulation<dim, spacedim>::cell_iterator
197 const std::vector<value_type> &children_values);
211 template <
int dim,
int spacedim,
typename value_type>
212 std::vector<value_type>
213 preserve(
const typename ::Triangulation<dim, spacedim>::cell_iterator
218 return std::vector<value_type>(parent->n_children(), parent_value);
223 template <
int dim,
int spacedim,
typename value_type>
224 std::vector<value_type>
225 split(
const typename ::Triangulation<dim, spacedim>::cell_iterator
229 static_assert(std::is_arithmetic_v<value_type> &&
230 !std::is_same_v<value_type, bool>,
231 "The provided value_type may not meet the requirements "
232 "of this function.");
235 return std::vector<value_type>(parent->n_children(),
236 parent_value / parent->n_children());
241 template <
int dim,
int spacedim,
typename value_type>
242 std::vector<value_type>
243 l2_norm(
const typename ::Triangulation<dim, spacedim>::cell_iterator
247 static_assert(std::is_arithmetic_v<value_type> &&
248 !std::is_same_v<value_type, bool>,
249 "The provided value_type may not meet the requirements "
250 "of this function.");
253 return std::vector<value_type>(parent->n_children(),
263 template <
int dim,
int spacedim,
typename value_type>
266 const typename ::Triangulation<dim, spacedim>::cell_iterator &,
267 const std::vector<value_type> &children_values)
271 const auto first_child = children_values.cbegin();
272 for (
auto other_child = first_child + 1;
273 other_child != children_values.cend();
275 Assert(*first_child == *other_child,
277 "Values on cells that will be coarsened are not equal!"));
284 template <
int dim,
int spacedim,
typename value_type>
286 sum(
const typename ::Triangulation<dim, spacedim>::cell_iterator &,
287 const std::vector<value_type> &children_values)
289 static_assert(std::is_arithmetic_v<value_type> &&
290 !std::is_same_v<value_type, bool>,
291 "The provided value_type may not meet the requirements "
292 "of this function.");
295 return std::accumulate(children_values.cbegin(),
296 children_values.cend(),
302 template <
int dim,
int spacedim,
typename value_type>
305 const typename ::Triangulation<dim, spacedim>::cell_iterator &,
306 const std::vector<value_type> &children_values)
308 static_assert(std::is_arithmetic_v<value_type> &&
309 !std::is_same_v<value_type, bool>,
310 "The provided value_type may not meet the requirements "
311 "of this function.");
314 return std::sqrt(std::inner_product(children_values.cbegin(),
315 children_values.cend(),
316 children_values.cbegin(),
322 template <
int dim,
int spacedim,
typename value_type>
324 mean(
const typename ::Triangulation<dim, spacedim>::cell_iterator
326 const std::vector<value_type> &children_values)
328 return sum<dim, spacedim, value_type>(parent, children_values) /
329 children_values.size();
334 template <
int dim,
int spacedim,
typename value_type>
336 max(
const typename ::Triangulation<dim, spacedim>::cell_iterator &,
337 const std::vector<value_type> &children_values)
340 return *std::max_element(children_values.cbegin(),
341 children_values.cend());
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
#define Assert(cond, exc)
static ::ExceptionBase & ExcInternalError()
static ::ExceptionBase & ExcMessage(std::string arg1)
value_type check_equality(const typename ::Triangulation< dim, spacedim >::cell_iterator &parent, const std::vector< value_type > &children_values)
value_type max(const typename ::Triangulation< dim, spacedim >::cell_iterator &parent, const std::vector< value_type > &children_values)
value_type sum(const typename ::Triangulation< dim, spacedim >::cell_iterator &parent, const std::vector< value_type > &children_values)
value_type l2_norm(const typename ::Triangulation< dim, spacedim >::cell_iterator &parent, const std::vector< value_type > &children_values)
value_type mean(const typename ::Triangulation< dim, spacedim >::cell_iterator &parent, const std::vector< value_type > &children_values)
std::vector< value_type > l2_norm(const typename ::Triangulation< dim, spacedim >::cell_iterator &parent, const value_type parent_value)
std::vector< value_type > preserve(const typename ::Triangulation< dim, spacedim >::cell_iterator &parent, const value_type parent_value)
std::vector< value_type > split(const typename ::Triangulation< dim, spacedim >::cell_iterator &parent, const value_type parent_value)
::VectorizedArray< Number, width > sqrt(const ::VectorizedArray< Number, width > &)