25#include <deal.II/dofs/dof_accessor.templates.h>
45 template <
int dim,
int spacedim>
49 if (dof_handler.get_fe_collection().size() == 0)
54 dof_handler.has_hp_capabilities(),
55 (typename ::DoFHandler<dim, spacedim>::ExcOnlyAvailableWithHP()));
57 std::vector<bool> p_flags(
58 dof_handler.get_triangulation().n_active_cells(),
true);
65 template <
int dim,
int spacedim>
68 const ::DoFHandler<dim, spacedim> &dof_handler,
69 const std::vector<bool> & p_flags)
71 if (dof_handler.get_fe_collection().size() == 0)
76 dof_handler.has_hp_capabilities(),
77 (typename ::DoFHandler<dim, spacedim>::ExcOnlyAvailableWithHP()));
81 for (
const auto &cell : dof_handler.active_cell_iterators())
82 if (cell->is_locally_owned() && p_flags[cell->active_cell_index()])
84 if (cell->refine_flag_set())
86 const unsigned int super_fe_index =
87 dof_handler.get_fe_collection().next_in_hierarchy(
88 cell->active_fe_index());
91 if (super_fe_index != cell->active_fe_index())
92 cell->set_future_fe_index(super_fe_index);
94 else if (cell->coarsen_flag_set())
96 const unsigned int sub_fe_index =
97 dof_handler.get_fe_collection().previous_in_hierarchy(
98 cell->active_fe_index());
101 if (sub_fe_index != cell->active_fe_index())
102 cell->set_future_fe_index(sub_fe_index);
109 template <
int dim,
typename Number,
int spacedim>
112 const ::DoFHandler<dim, spacedim> &dof_handler,
114 const Number p_refine_threshold,
115 const Number p_coarsen_threshold,
120 if (dof_handler.get_fe_collection().size() == 0)
125 dof_handler.has_hp_capabilities(),
126 (typename ::DoFHandler<dim, spacedim>::ExcOnlyAvailableWithHP()));
130 std::vector<bool> p_flags(
131 dof_handler.get_triangulation().n_active_cells(),
false);
133 for (
const auto &cell : dof_handler.active_cell_iterators())
134 if (cell->is_locally_owned() &&
135 ((cell->refine_flag_set() &&
136 compare_refine(criteria[cell->active_cell_index()],
137 p_refine_threshold)) ||
138 (cell->coarsen_flag_set() &&
139 compare_coarsen(criteria[cell->active_cell_index()],
140 p_coarsen_threshold))))
141 p_flags[cell->active_cell_index()] =
true;
148 template <
int dim,
typename Number,
int spacedim>
151 const ::DoFHandler<dim, spacedim> &dof_handler,
153 const double p_refine_fraction,
154 const double p_coarsen_fraction,
159 if (dof_handler.get_fe_collection().size() == 0)
164 dof_handler.has_hp_capabilities(),
165 (typename ::DoFHandler<dim, spacedim>::ExcOnlyAvailableWithHP()));
168 Assert((p_refine_fraction >= 0) && (p_refine_fraction <= 1),
170 Assert((p_coarsen_fraction >= 0) && (p_coarsen_fraction <= 1),
175 Number max_criterion_refine = std::numeric_limits<Number>::lowest(),
177 Number max_criterion_coarsen = max_criterion_refine,
178 min_criterion_coarsen = min_criterion_refine;
180 for (
const auto &cell : dof_handler.active_cell_iterators())
181 if (cell->is_locally_owned())
183 if (cell->refine_flag_set())
185 max_criterion_refine =
187 criteria(cell->active_cell_index()));
188 min_criterion_refine =
190 criteria(cell->active_cell_index()));
192 else if (cell->coarsen_flag_set())
194 max_criterion_coarsen =
196 criteria(cell->active_cell_index()));
197 min_criterion_coarsen =
199 criteria(cell->active_cell_index()));
205 &dof_handler.get_triangulation());
206 if (parallel_tria !=
nullptr &&
208 &dof_handler.get_triangulation()) ==
nullptr)
210 max_criterion_refine =
213 min_criterion_refine =
216 max_criterion_coarsen =
219 min_criterion_coarsen =
226 const Number threshold_refine =
227 min_criterion_refine +
229 (max_criterion_refine - min_criterion_refine),
231 min_criterion_coarsen +
233 (max_criterion_coarsen - min_criterion_coarsen);
245 template <
int dim,
typename Number,
int spacedim>
248 const ::DoFHandler<dim, spacedim> &dof_handler,
250 const double p_refine_fraction,
251 const double p_coarsen_fraction,
256 if (dof_handler.get_fe_collection().size() == 0)
261 dof_handler.has_hp_capabilities(),
262 (typename ::DoFHandler<dim, spacedim>::ExcOnlyAvailableWithHP()));
265 Assert((p_refine_fraction >= 0) && (p_refine_fraction <= 1),
267 Assert((p_coarsen_fraction >= 0) && (p_coarsen_fraction <= 1),
275 [](
const Number &,
const Number &) {
return false; };
277 [](
const Number &,
const Number &) {
return true; };
281 unsigned int n_flags_refinement = 0;
282 unsigned int n_flags_coarsening = 0;
284 dof_handler.get_triangulation().n_active_cells());
286 dof_handler.get_triangulation().n_active_cells());
287 for (
const auto &cell :
288 dof_handler.get_triangulation().active_cell_iterators())
289 if (!cell->is_artificial() && cell->is_locally_owned())
291 if (cell->refine_flag_set())
292 indicators_refinement(n_flags_refinement++) =
293 criteria(cell->active_cell_index());
294 else if (cell->coarsen_flag_set())
295 indicators_coarsening(n_flags_coarsening++) =
296 criteria(cell->active_cell_index());
317 Number threshold_refinement = 0.;
318 Number threshold_coarsening = 0.;
319 auto reference_compare_refine = std::cref(compare_refine);
320 auto reference_compare_coarsen = std::cref(compare_coarsen);
324 &dof_handler.get_triangulation());
325 if (parallel_tria !=
nullptr &&
327 &dof_handler.get_triangulation()) ==
nullptr)
329#ifndef DEAL_II_WITH_P4EST
340 const unsigned int n_global_flags_refinement =
342 const unsigned int n_global_flags_coarsening =
345 const unsigned int target_index_refinement =
346 static_cast<unsigned int>(
347 std::floor(p_refine_fraction * n_global_flags_refinement));
348 const unsigned int target_index_coarsening =
349 static_cast<unsigned int>(
350 std::ceil((1 - p_coarsen_fraction) * n_global_flags_coarsening));
354 const std::pair<Number, Number> global_min_max_refinement =
359 const std::pair<Number, Number> global_min_max_coarsening =
365 if (target_index_refinement == 0)
366 reference_compare_refine = std::cref(compare_false);
367 else if (target_index_refinement == n_global_flags_refinement)
368 reference_compare_refine = std::cref(compare_true);
372 indicators_refinement,
373 global_min_max_refinement,
374 target_index_refinement,
377 if (target_index_coarsening == n_global_flags_coarsening)
378 reference_compare_coarsen = std::cref(compare_false);
379 else if (target_index_coarsening == 0)
380 reference_compare_coarsen = std::cref(compare_true);
384 indicators_coarsening,
385 global_min_max_coarsening,
386 target_index_coarsening,
397 const unsigned int n_p_refine_cells =
static_cast<unsigned int>(
398 std::floor(p_refine_fraction * n_flags_refinement));
399 const unsigned int n_p_coarsen_cells =
static_cast<unsigned int>(
400 std::floor(p_coarsen_fraction * n_flags_coarsening));
403 if (n_p_refine_cells == 0)
404 reference_compare_refine = std::cref(compare_false);
405 else if (n_p_refine_cells == n_flags_refinement)
406 reference_compare_refine = std::cref(compare_true);
409 std::nth_element(indicators_refinement.
begin(),
410 indicators_refinement.
begin() +
411 n_p_refine_cells - 1,
412 indicators_refinement.
end(),
413 std::greater<Number>());
414 threshold_refinement =
415 *(indicators_refinement.
begin() + n_p_refine_cells - 1);
418 if (n_p_coarsen_cells == 0)
419 reference_compare_coarsen = std::cref(compare_false);
420 else if (n_p_coarsen_cells == n_flags_coarsening)
421 reference_compare_coarsen = std::cref(compare_true);
424 std::nth_element(indicators_coarsening.
begin(),
425 indicators_coarsening.
begin() +
426 n_p_coarsen_cells - 1,
427 indicators_coarsening.
end(),
428 std::less<Number>());
429 threshold_coarsening =
430 *(indicators_coarsening.
begin() + n_p_coarsen_cells - 1);
437 threshold_refinement,
438 threshold_coarsening,
439 std::cref(reference_compare_refine),
441 reference_compare_coarsen));
446 template <
int dim,
typename Number,
int spacedim>
449 const ::DoFHandler<dim, spacedim> &dof_handler,
452 if (dof_handler.get_fe_collection().size() == 0)
457 dof_handler.has_hp_capabilities(),
458 (typename ::DoFHandler<dim, spacedim>::ExcOnlyAvailableWithHP()));
460 sobolev_indices.
size());
462 for (
const auto &cell : dof_handler.active_cell_iterators())
463 if (cell->is_locally_owned())
465 if (cell->refine_flag_set())
467 const unsigned int super_fe_index =
468 dof_handler.get_fe_collection().next_in_hierarchy(
469 cell->active_fe_index());
472 if (super_fe_index != cell->active_fe_index())
474 const unsigned int super_fe_degree =
475 dof_handler.get_fe_collection()[super_fe_index].degree;
477 if (sobolev_indices[cell->active_cell_index()] >
479 cell->set_future_fe_index(super_fe_index);
482 else if (cell->coarsen_flag_set())
484 const unsigned int sub_fe_index =
485 dof_handler.get_fe_collection().previous_in_hierarchy(
486 cell->active_fe_index());
489 if (sub_fe_index != cell->active_fe_index())
491 const unsigned int sub_fe_degree =
492 dof_handler.get_fe_collection()[sub_fe_index].degree;
494 if (sobolev_indices[cell->active_cell_index()] <
496 cell->set_future_fe_index(sub_fe_index);
504 template <
int dim,
typename Number,
int spacedim>
507 const ::DoFHandler<dim, spacedim> & dof_handler,
514 if (dof_handler.get_fe_collection().size() == 0)
519 dof_handler.has_hp_capabilities(),
520 (typename ::DoFHandler<dim, spacedim>::ExcOnlyAvailableWithHP()));
526 std::vector<bool> p_flags(
527 dof_handler.get_triangulation().n_active_cells(),
false);
529 for (
const auto &cell : dof_handler.active_cell_iterators())
530 if (cell->is_locally_owned() &&
531 ((cell->refine_flag_set() &&
532 compare_refine(criteria[cell->active_cell_index()],
533 references[cell->active_cell_index()])) ||
534 (cell->coarsen_flag_set() &&
535 compare_coarsen(criteria[cell->active_cell_index()],
536 references[cell->active_cell_index()]))))
537 p_flags[cell->active_cell_index()] =
true;
547 template <
int dim,
typename Number,
int spacedim>
552 const double gamma_p,
553 const double gamma_h,
554 const double gamma_n)
556 if (dof_handler.get_fe_collection().size() == 0)
561 error_indicators.
size());
563 predicted_errors.
size());
564 Assert(0 < gamma_p && gamma_p < 1,
574 std::map<typename DoFHandler<dim, spacedim>::cell_iterator,
unsigned int>
575 future_fe_indices_on_coarsened_cells;
578 predicted_errors = error_indicators;
580 for (
const auto &cell : dof_handler.active_cell_iterators())
581 if (cell->is_locally_owned())
584 if (!(cell->future_fe_index_set()) && !(cell->refine_flag_set()) &&
585 !(cell->coarsen_flag_set()))
587 predicted_errors[cell->active_cell_index()] *= gamma_n;
593 if (cell->coarsen_flag_set())
597 const auto &parent = cell->parent();
598 if (future_fe_indices_on_coarsened_cells.find(parent) ==
599 future_fe_indices_on_coarsened_cells.end())
602 for (
const auto &child : parent->child_iterators())
603 Assert(child->is_active() && child->coarsen_flag_set(),
605 dim>::ExcInconsistentCoarseningFlags());
608 parent_future_fe_index =
609 ::internal::hp::DoFHandlerImplementation::
610 dominated_future_fe_on_children<dim, spacedim>(parent);
612 future_fe_indices_on_coarsened_cells.insert(
613 {parent, parent_future_fe_index});
617 parent_future_fe_index =
618 future_fe_indices_on_coarsened_cells[parent];
622 dof_handler.get_fe_collection()[parent_future_fe_index]
629 dof_handler.get_fe_collection()[cell->future_fe_index()]
634 if (cell->future_fe_index_set())
636 predicted_errors[cell->active_cell_index()] *=
638 int(future_fe_degree) -
int(cell->get_fe().degree));
642 if (cell->refine_flag_set())
644 predicted_errors[cell->active_cell_index()] *=
645 (gamma_h *
std::pow(.5, future_fe_degree));
650 else if (cell->coarsen_flag_set())
652 predicted_errors[cell->active_cell_index()] /=
653 (gamma_h *
std::pow(.5, future_fe_degree));
666 template <
int dim,
int spacedim>
670 if (dof_handler.get_fe_collection().size() == 0)
675 dof_handler.has_hp_capabilities(),
676 (typename ::DoFHandler<dim, spacedim>::ExcOnlyAvailableWithHP()));
678 for (
const auto &cell : dof_handler.active_cell_iterators())
679 if (cell->is_locally_owned() && cell->future_fe_index_set())
681 cell->clear_refine_flag();
682 cell->clear_coarsen_flag();
688 template <
int dim,
int spacedim>
692 if (dof_handler.get_fe_collection().size() == 0)
697 dof_handler.has_hp_capabilities(),
698 (typename ::DoFHandler<dim, spacedim>::ExcOnlyAvailableWithHP()));
704 &dof_handler.get_triangulation()) !=
nullptr)
709 for (
const auto &cell : dof_handler.active_cell_iterators())
710 if (cell->is_locally_owned() && cell->future_fe_index_set())
712 cell->clear_refine_flag();
718 if (cell->coarsen_flag_set())
720 const auto & parent = cell->parent();
721 const unsigned int n_children = parent->n_children();
723 unsigned int h_flagged_children = 0, p_flagged_children = 0;
724 for (
const auto &child : parent->child_iterators())
726 if (child->is_active())
728 if (child->is_locally_owned())
730 if (child->coarsen_flag_set())
731 ++h_flagged_children;
732 if (child->future_fe_index_set())
733 ++p_flagged_children;
735 else if (child->is_ghost())
741 (
dynamic_cast<const parallel::shared::
742 Triangulation<dim, spacedim> *
>(
743 &dof_handler.get_triangulation()) !=
nullptr),
746 if (child->coarsen_flag_set())
747 ++h_flagged_children;
754 DoFCellAccessorImplementation::
756 future_fe_index_set<dim, spacedim, false>(
758 ++p_flagged_children;
769 if (h_flagged_children == n_children &&
770 p_flagged_children != n_children)
774 for (
const auto &child : parent->child_iterators())
779 if (child->is_locally_owned())
780 child->clear_future_fe_index();
787 for (
const auto &child : parent->child_iterators())
789 if (child->is_active() && child->is_locally_owned())
790 child->clear_coarsen_flag();
802 template <
int dim,
int spacedim>
805 const ::DoFHandler<dim, spacedim> &dof_handler,
806 const unsigned int max_difference,
807 const unsigned int contains_fe_index)
809 if (dof_handler.get_fe_collection().size() == 0)
814 dof_handler.has_hp_capabilities(),
815 (typename ::DoFHandler<dim, spacedim>::ExcOnlyAvailableWithHP()));
819 "This function does not serve any purpose for max_difference = 0."));
821 dof_handler.get_fe_collection().size());
831 typename ::DoFHandler<dim, spacedim>::active_fe_index_type;
832 const auto invalid_level =
static_cast<level_type
>(-1);
836 const std::vector<unsigned int> fe_index_for_hierarchy_level =
837 dof_handler.get_fe_collection().get_hierarchy_sequence(
843 std::vector<unsigned int> hierarchy_level_for_fe_index(
844 dof_handler.get_fe_collection().size(), invalid_level);
845 for (
unsigned int l = 0;
l < fe_index_for_hierarchy_level.size(); ++
l)
846 hierarchy_level_for_fe_index[fe_index_for_hierarchy_level[
l]] =
l;
859 if (
const auto parallel_tria =
861 &(dof_handler.get_triangulation())))
864 parallel_tria->global_active_cell_index_partitioner().lock());
869 dof_handler.get_triangulation().n_active_cells());
872 for (
const auto &cell : dof_handler.active_cell_iterators())
873 if (cell->is_locally_owned())
874 future_levels[cell->global_active_cell_index()] =
875 hierarchy_level_for_fe_index[cell->future_fe_index()];
890 const auto update_neighbor_level =
891 [&future_levels, max_difference, invalid_level](
892 const auto &neighbor,
const level_type cell_level) ->
bool {
897 if (neighbor->is_locally_owned())
899 const level_type neighbor_level =
static_cast<level_type
>(
900 future_levels[neighbor->global_active_cell_index()]);
903 if (neighbor_level == invalid_level)
906 if ((cell_level - max_difference) > neighbor_level)
908 future_levels[neighbor->global_active_cell_index()] =
909 cell_level - max_difference;
933 const auto prepare_level_for_parent = [&](
const auto &neighbor) ->
bool {
935 if (neighbor->coarsen_flag_set() && neighbor->is_locally_owned())
937 const auto parent = neighbor->parent();
939 std::vector<unsigned int> future_levels_children;
940 future_levels_children.reserve(parent->n_children());
941 for (
const auto &child : parent->child_iterators())
943 Assert(child->is_active() && child->coarsen_flag_set(),
944 (typename ::Triangulation<dim, spacedim>::
945 ExcInconsistentCoarseningFlags()));
947 const level_type child_level =
static_cast<level_type
>(
948 future_levels[child->global_active_cell_index()]);
949 Assert(child_level != invalid_level,
951 "The FiniteElement on one of the siblings of "
952 "a cell you are trying to coarsen is not part "
953 "of the registered p-adaptation hierarchy."));
954 future_levels_children.push_back(child_level);
958 const unsigned int max_level_children =
959 *std::max_element(future_levels_children.begin(),
960 future_levels_children.end());
962 bool children_changed =
false;
963 for (
const auto &child : parent->child_iterators())
967 if (child->is_locally_owned() &&
968 future_levels[child->global_active_cell_index()] !=
971 future_levels[child->global_active_cell_index()] =
973 children_changed =
true;
975 return children_changed;
981 bool levels_changed =
false;
982 bool levels_changed_in_cycle;
985 levels_changed_in_cycle =
false;
989 for (
const auto &cell : dof_handler.active_cell_iterators())
990 if (!cell->is_artificial())
992 const level_type cell_level =
static_cast<level_type
>(
993 future_levels[cell->global_active_cell_index()]);
996 if (cell_level == invalid_level)
1001 if (cell_level <= max_difference)
1004 for (
unsigned int f = 0; f < cell->n_faces(); ++f)
1005 if (cell->face(f)->at_boundary() ==
false)
1007 if (cell->face(f)->has_children())
1009 for (
unsigned int sf = 0;
1010 sf < cell->face(f)->n_children();
1013 const auto neighbor =
1014 cell->neighbor_child_on_subface(f, sf);
1016 levels_changed_in_cycle |=
1017 update_neighbor_level(neighbor, cell_level);
1019 levels_changed_in_cycle |=
1020 prepare_level_for_parent(neighbor);
1025 const auto neighbor = cell->neighbor(f);
1027 levels_changed_in_cycle |=
1028 update_neighbor_level(neighbor, cell_level);
1030 levels_changed_in_cycle |=
1031 prepare_level_for_parent(neighbor);
1036 levels_changed_in_cycle =
1038 dof_handler.get_communicator());
1039 levels_changed |= levels_changed_in_cycle;
1041 while (levels_changed_in_cycle);
1044 for (
const auto &cell : dof_handler.active_cell_iterators())
1045 if (cell->is_locally_owned())
1047 const level_type cell_level =
static_cast<level_type
>(
1048 future_levels[cell->global_active_cell_index()]);
1050 if (cell_level != invalid_level)
1052 const unsigned int fe_index =
1053 fe_index_for_hierarchy_level[cell_level];
1056 if (fe_index != cell->active_fe_index())
1057 cell->set_future_fe_index(fe_index);
1061 return levels_changed;
1068#include "refinement.inst"
virtual MPI_Comm get_communicator() const override
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
#define Assert(cond, exc)
#define AssertDimension(dim1, dim2)
static ::ExceptionBase & ExcInvalidParameterValue()
#define AssertIndexRange(index, range)
static ::ExceptionBase & ExcInternalError()
static ::ExceptionBase & ExcMessage(std::string arg1)
void update_ghost_values() const
void grow_or_shrink(const size_type N)
void reinit(const size_type size, const bool omit_zeroing_entries=false)
Expression ceil(const Expression &x)
Expression floor(const Expression &x)
Tensor< 2, dim, Number > l(const Tensor< 2, dim, Number > &F, const Tensor< 2, dim, Number > &dF_dt)
T logical_or(const T &t, const MPI_Comm &mpi_communicator)
T min(const T &t, const MPI_Comm &mpi_communicator)
T sum(const T &t, const MPI_Comm &mpi_communicator)
T max(const T &t, const MPI_Comm &mpi_communicator)
void p_adaptivity_from_reference(const ::DoFHandler< dim, spacedim > &dof_handler, const Vector< Number > &criteria, const Vector< Number > &references, const ComparisonFunction< typename identity< Number >::type > &compare_refine, const ComparisonFunction< typename identity< Number >::type > &compare_coarsen)
bool limit_p_level_difference(const ::DoFHandler< dim, spacedim > &dof_handler, const unsigned int max_difference=1, const unsigned int contains_fe_index=0)
void choose_p_over_h(const ::DoFHandler< dim, spacedim > &dof_handler)
void p_adaptivity_from_flags(const ::DoFHandler< dim, spacedim > &dof_handler, const std::vector< bool > &p_flags)
void p_adaptivity_from_relative_threshold(const ::DoFHandler< dim, spacedim > &dof_handler, const Vector< Number > &criteria, const double p_refine_fraction=0.5, const double p_coarsen_fraction=0.5, const ComparisonFunction< typename identity< Number >::type > &compare_refine=std::greater_equal< Number >(), const ComparisonFunction< typename identity< Number >::type > &compare_coarsen=std::less_equal< Number >())
void p_adaptivity_fixed_number(const ::DoFHandler< dim, spacedim > &dof_handler, const Vector< Number > &criteria, const double p_refine_fraction=0.5, const double p_coarsen_fraction=0.5, const ComparisonFunction< typename identity< Number >::type > &compare_refine=std::greater_equal< Number >(), const ComparisonFunction< typename identity< Number >::type > &compare_coarsen=std::less_equal< Number >())
void force_p_over_h(const ::DoFHandler< dim, spacedim > &dof_handler)
void full_p_adaptivity(const ::DoFHandler< dim, spacedim > &dof_handler)
void p_adaptivity_from_absolute_threshold(const ::DoFHandler< dim, spacedim > &dof_handler, const Vector< Number > &criteria, const Number p_refine_threshold, const Number p_coarsen_threshold, const ComparisonFunction< typename identity< Number >::type > &compare_refine=std::greater_equal< Number >(), const ComparisonFunction< typename identity< Number >::type > &compare_coarsen=std::less_equal< Number >())
void predict_error(const ::DoFHandler< dim, spacedim > &dof_handler, const Vector< Number > &error_indicators, Vector< Number > &predicted_errors, const double gamma_p=std::sqrt(0.4), const double gamma_h=2., const double gamma_n=1.)
std::function< bool(const Number &, const Number &)> ComparisonFunction
void p_adaptivity_from_regularity(const ::DoFHandler< dim, spacedim > &dof_handler, const Vector< Number > &sobolev_indices)
void communicate_future_fe_indices(DoFHandler< dim, spacedim > &dof_handler)
number compute_threshold(const ::Vector< number > &criteria, const std::pair< double, double > &global_min_and_max, const types::global_cell_index n_target_cells, const MPI_Comm &mpi_communicator)
std::pair< number, number > compute_global_min_and_max_at_root(const ::Vector< number > &criteria, const MPI_Comm &mpi_communicator)
static const unsigned int invalid_unsigned_int
TriangulationBase< dim, spacedim > Triangulation
::VectorizedArray< Number, width > min(const ::VectorizedArray< Number, width > &, const ::VectorizedArray< Number, width > &)
::VectorizedArray< Number, width > max(const ::VectorizedArray< Number, width > &, const ::VectorizedArray< Number, width > &)
::VectorizedArray< Number, width > pow(const ::VectorizedArray< Number, width > &, const Number p)