48#define BOOST_BIND_GLOBAL_PLACEHOLDERS
49#include <boost/config.hpp>
50#include <boost/graph/adjacency_list.hpp>
51#include <boost/graph/bandwidth.hpp>
52#include <boost/graph/cuthill_mckee_ordering.hpp>
53#include <boost/graph/king_ordering.hpp>
54#include <boost/graph/minimum_degree_ordering.hpp>
55#include <boost/graph/properties.hpp>
56#include <boost/random.hpp>
57#include <boost/random/uniform_int_distribution.hpp>
59#undef BOOST_BIND_GLOBAL_PLACEHOLDERS
76 using namespace ::
boost;
87 using Pair = std::pair<size_type, size_type>;
93 template <
int dim,
int spacedim>
99 boosttypes::vertex_degree_t>::type
110 dof_handler.n_dofs());
114 for (
unsigned int row = 0; row <
dsp.n_rows(); ++row)
115 for (
unsigned int col = 0; col <
dsp.row_length(row); ++col)
119 boosttypes::graph_traits<boosttypes::Graph>::vertex_iterator
ui,
ui_end;
128 template <
int dim,
int spacedim>
148 template <
int dim,
int spacedim>
162 boosttypes::vertex_index_t>::type index_map =
163 get(::boost::vertex_index, graph);
169 ::boost::cuthill_mckee_ordering(graph,
171 get(::boost::vertex_color, graph),
174 ::boost::cuthill_mckee_ordering(graph,
176 get(::boost::vertex_color, graph),
190 template <
int dim,
int spacedim>
210 template <
int dim,
int spacedim>
224 boosttypes::vertex_index_t>::type index_map =
225 get(::boost::vertex_index, graph);
246 template <
int dim,
int spacedim>
266 template <
int dim,
int spacedim>
283 using namespace ::
boost;
290 int n = dof_handler.n_dofs();
296 for (
const auto &cell : dof_handler.active_cell_iterators())
298 const unsigned int dofs_per_cell = cell->get_fe().n_dofs_per_cell();
303 for (
unsigned int i = 0; i < dofs_per_cell; ++i)
304 for (
unsigned int j = 0;
j < dofs_per_cell; ++
j)
313 using Vector = std::vector<int>;
324 ::boost::property_map<Graph, vertex_index_t>::type
id =
325 get(vertex_index, G);
343 for (
int i = 0; i < n; ++i)
365 template <
int dim,
int spacedim>
373 dof_handler.locally_owned_dofs().
n_elements(),
389 template <
int dim,
int spacedim>
392 std::vector<types::global_dof_index> &
new_indices,
397 const unsigned int level)
404 if (dof_handler.locally_owned_dofs().
n_elements() == 0)
420 return dof_handler.locally_owned_dofs();
429 return dof_handler.locally_owned_mg_dofs(
level);
450 locally_owned_dofs.
size());
499 "You specified global degree of freedom " +
501 " as a starting index, but this index is not among the "
502 "locally active ones on this processor, as required "
503 "for this function."));
538 const unsigned int row_length =
dsp.row_length(row);
540 for (
unsigned int j = 0;
j < row_length; ++
j)
542 const unsigned int col =
dsp.column_number(row,
j);
593 Assert(
static_cast<unsigned int>(
604 std::set<types::global_dof_index>::const_iterator
651 template <
int dim,
int spacedim>
654 const unsigned int level,
680 template <
int dim,
int spacedim>
690 dof_handler.begin_active(),
699 dof_handler.get_communicator()) == 0)
709 Assert((
result == dof_handler.n_locally_owned_dofs()) ||
710 ((dof_handler.n_locally_owned_dofs() < dof_handler.n_dofs()) &&
711 (
result <= dof_handler.n_dofs())),
719 template <
int dim,
int spacedim>
722 const unsigned int level,
746 dof_handler.get_communicator()) > 0)
752 template <
int dim,
int spacedim,
typename CellIterator>
755 const CellIterator & start,
761 start->get_dof_handler().get_fe_collection();
774 const IndexSet &locally_owned_dofs =
776 start->get_dof_handler().locally_owned_mg_dofs(start->level()) :
777 start->get_dof_handler().locally_owned_dofs();
787 for (
unsigned int i = 0; i < fe_collection.
n_components(); ++i)
802 std::vector<types::global_dof_index> local_dof_indices;
815 for (
unsigned int f = 0; f < fe_collection.
size(); ++f)
818 const unsigned int dofs_per_cell = fe.n_dofs_per_cell();
820 for (
unsigned int i = 0; i < dofs_per_cell; ++i)
821 if (fe.is_primitive(i))
826 const unsigned int comp =
827 fe.get_nonzero_components(i).first_selected_component();
849 for (CellIterator cell = start; cell != end; ++cell)
854 if (!cell->is_locally_owned_on_level())
861 if (!cell->is_locally_owned())
867 cell->level() == start->level(),
869 "Multigrid renumbering in compute_component_wise() needs to be applied to a single level!"));
875 const unsigned int dofs_per_cell =
876 fe_collection[fe_index].n_dofs_per_cell();
877 local_dof_indices.resize(dofs_per_cell);
878 cell->get_active_or_mg_dof_indices(local_dof_indices);
880 for (
unsigned int i = 0; i < dofs_per_cell; ++i)
881 if (locally_owned_dofs.
is_element(local_dof_indices[i]))
883 local_dof_indices[i]);
909 for (
unsigned int component = 0; component < fe_collection.
n_components();
927 &start->get_dof_handler().get_triangulation())))
929#ifdef DEAL_II_WITH_MPI
932 for (
unsigned int c = 0; c <
n_buckets; ++c)
941 tria->get_communicator());
946 tria->get_communicator(),
951 for (
unsigned int c = 0; c <
n_buckets; ++c)
964 for (
unsigned int c = 1; c < fe_collection.
n_components(); ++c)
974 for (
unsigned int component = 0; component < fe_collection.
n_components();
997 template <
int dim,
int spacedim>
1009 renumbering, dof_handler.begin_active(), dof_handler.
end(),
false);
1020 Assert((
result == dof_handler.n_locally_owned_dofs()) ||
1021 ((dof_handler.n_locally_owned_dofs() < dof_handler.n_dofs()) &&
1022 (
result <= dof_handler.n_dofs())),
1030 template <
int dim,
int spacedim>
1060 dof_handler.get_communicator()) > 0)
1066 template <
int dim,
int spacedim,
class ITERATOR,
class ENDITERATOR>
1074 start->get_dof_handler().get_fe_collection();
1087 const IndexSet &locally_owned_dofs =
1089 start->get_dof_handler().locally_owned_mg_dofs(start->level()) :
1090 start->get_dof_handler().locally_owned_dofs();
1094 std::vector<types::global_dof_index> local_dof_indices;
1099 std::vector<std::vector<types::global_dof_index>> block_list(
1100 fe_collection.
size());
1101 for (
unsigned int f = 0; f < fe_collection.
size(); ++f)
1104 block_list[f].resize(fe.n_dofs_per_cell());
1105 for (
unsigned int i = 0; i < fe.n_dofs_per_cell(); ++i)
1106 block_list[f][i] = fe.system_to_block_index(i).first;
1122 for (
ITERATOR cell = start; cell != end; ++cell)
1127 if (!cell->is_locally_owned_on_level())
1134 if (!cell->is_locally_owned())
1140 cell->level() == start->level(),
1142 "Multigrid renumbering in compute_block_wise() needs to be applied to a single level!"));
1148 const unsigned int dofs_per_cell =
1149 fe_collection[fe_index].n_dofs_per_cell();
1150 local_dof_indices.resize(dofs_per_cell);
1151 cell->get_active_or_mg_dof_indices(local_dof_indices);
1153 for (
unsigned int i = 0; i < dofs_per_cell; ++i)
1154 if (locally_owned_dofs.
is_element(local_dof_indices[i]))
1156 local_dof_indices[i]);
1171 for (
unsigned int block = 0; block < fe_collection.
n_blocks(); ++block)
1188 &start->get_dof_handler().get_triangulation())))
1190#ifdef DEAL_II_WITH_MPI
1193 for (
unsigned int c = 0; c <
n_buckets; ++c)
1202 tria->get_communicator());
1207 tria->get_communicator(),
1212 for (
unsigned int c = 0; c <
n_buckets; ++c)
1225 for (
unsigned int c = 1; c < fe_collection.
n_blocks(); ++c)
1235 for (
unsigned int block = 0; block < fe_collection.
n_blocks(); ++block)
1237 const typename std::vector<types::global_dof_index>::const_iterator
1243 for (
typename std::vector<types::global_dof_index>::const_iterator
1268 template <
int dim,
class CellIteratorType>
1273 const CellIteratorType & cell,
1275 std::vector<types::global_dof_index> &
new_indices)
1280 if (cell->has_children())
1309 if (cell->is_locally_owned())
1312 const unsigned int dofs_per_cell =
1313 cell->get_fe().n_dofs_per_cell();
1314 std::vector<types::global_dof_index> local_dof_indices(
1316 cell->get_dof_indices(local_dof_indices);
1335 for (
unsigned int i = 0; i < dofs_per_cell; ++i)
1340 const unsigned int idx =
1342 local_dof_indices[i]);
1359 template <
int dim,
int spacedim>
1384 &dof_handler.get_triangulation()))
1386#ifdef DEAL_II_WITH_MPI
1388 dof_handler.locally_owned_dofs().
n_elements();
1394 tria->get_communicator());
1401 *
>(&dof_handler.get_triangulation()))
1403#ifdef DEAL_II_WITH_P4EST
1408 for (
unsigned int c = 0; c <
tria->n_cells(0); ++c)
1411 tria->get_p4est_tree_to_coarse_cell_permutation()[c];
1432 dof_handler.
begin(0);
1433 cell != dof_handler.
end(0);
1448 ((dof_handler.n_locally_owned_dofs() < dof_handler.n_dofs()) &&
1463 template <
int dim,
int spacedim>
1477 template <
int dim,
int spacedim>
1481 const unsigned int level)
1498 template <
int dim,
int spacedim>
1501 std::vector<types::global_dof_index> &
new_indices,
1536 template <
int dim,
int spacedim>
1539 std::vector<types::global_dof_index> &
new_indices,
1542 const unsigned int level)
1547 const unsigned int n_dofs = dof_handler.n_dofs(
level);
1561 for (
unsigned int i = 0; i < n_dofs; ++i)
1578 template <
int dim,
int spacedim>
1586 dof.n_locally_owned_dofs());
1587 std::vector<types::global_dof_index> reverse(dof.n_locally_owned_dofs());
1594 template <
int dim,
int spacedim>
1597 std::vector<types::global_dof_index> &
new_indices,
1598 std::vector<types::global_dof_index> &reverse,
1600 const typename std::vector<
1605 &dof.get_triangulation()))
1611 AssertDimension(cells.size(), dof.get_triangulation().n_active_cells());
1626 std::vector<types::global_dof_index>
cell_dofs;
1628 const auto &
owned_dofs = dof.locally_owned_dofs();
1630 unsigned int index = 0;
1632 for (
const auto &cell : cells)
1636 const unsigned int n_cell_dofs = cell->get_fe().n_dofs_per_cell();
1639 cell->get_active_or_mg_dof_indices(
cell_dofs);
1658 "Traversing over the given set of cells did not cover all "
1659 "degrees of freedom in the DoFHandler. Does the set of cells "
1660 "not include all active cells?"));
1668 template <
int dim,
int spacedim>
1671 const unsigned int level,
1672 const typename std::vector<
1679 std::vector<types::global_dof_index> reverse(dof.n_dofs(
level));
1687 template <
int dim,
int spacedim>
1690 std::vector<types::global_dof_index> &
new_order,
1691 std::vector<types::global_dof_index> &reverse,
1693 const unsigned int level,
1694 const typename std::vector<
1697 Assert(cells.size() == dof.get_triangulation().n_cells(
level),
1699 dof.get_triangulation().n_cells(
level)));
1705 unsigned int n_global_dofs = dof.n_dofs(
level);
1706 unsigned int n_cell_dofs = dof.get_fe().n_dofs_per_cell();
1711 unsigned int global_index = 0;
1713 for (
const auto &cell : cells)
1717 cell->get_active_or_mg_dof_indices(
cell_dofs);
1729 Assert(global_index == n_global_dofs,
1731 "Traversing over the given set of cells did not cover all "
1732 "degrees of freedom in the DoFHandler. Does the set of cells "
1733 "not include all cells of the specified level?"));
1741 template <
int dim,
int spacedim>
1747 std::vector<types::global_dof_index>
renumbering(dof.n_dofs());
1748 std::vector<types::global_dof_index> reverse(dof.n_dofs());
1757 template <
int dim,
int spacedim>
1760 std::vector<types::global_dof_index> &reverse,
1766 &dof.get_triangulation()) ==
nullptr),
1771 std::vector<typename DoFHandler<dim, spacedim>::active_cell_iterator>
1773 ordered_cells.reserve(dof.get_triangulation().n_active_cells());
1779 for (
const auto &cell : dof.active_cell_iterators())
1794 const unsigned int n_dofs = dof.n_dofs();
1795 std::vector<std::pair<Point<spacedim>,
unsigned int>>
1799 Assert(fe_collection[0].has_support_points(),
1804 Assert(fe_collection[
comp].has_support_points(),
1815 std::vector<types::global_dof_index> local_dof_indices;
1817 for (
const auto &cell : dof.active_cell_iterators())
1819 const unsigned int dofs_per_cell = cell->get_fe().n_dofs_per_cell();
1820 local_dof_indices.resize(dofs_per_cell);
1821 hp_fe_values.
reinit(cell);
1824 cell->get_active_or_mg_dof_indices(local_dof_indices);
1825 const std::vector<Point<spacedim>> &points =
1826 fe_values.get_quadrature_points();
1827 for (
unsigned int i = 0; i < dofs_per_cell; ++i)
1832 local_dof_indices[i];
1848 template <
int dim,
int spacedim>
1851 const unsigned int level,
1856 std::vector<types::global_dof_index> reverse(dof.n_dofs(
level));
1865 template <
int dim,
int spacedim>
1868 std::vector<types::global_dof_index> &reverse,
1870 const unsigned int level,
1876 std::vector<typename DoFHandler<dim, spacedim>::level_cell_iterator>
1900 Assert(dof.get_fe().has_support_points(),
1902 const unsigned int n_dofs = dof.n_dofs(
level);
1903 std::vector<std::pair<Point<spacedim>,
unsigned int>>
1913 const unsigned int dofs_per_cell = dof.get_fe().n_dofs_per_cell();
1914 std::vector<types::global_dof_index> local_dof_indices(dofs_per_cell);
1919 for (; begin != end; ++begin)
1923 begin->get_active_or_mg_dof_indices(local_dof_indices);
1925 const std::vector<Point<spacedim>> &points =
1926 fe_values.get_quadrature_points();
1927 for (
unsigned int i = 0; i < dofs_per_cell; ++i)
1932 local_dof_indices[i];
1976 template <
class DHCellIterator>
1982 return compare(
c1,
c2, std::integral_constant<int, dim>());
1989 template <
class DHCellIterator,
int xdim>
1993 std::integral_constant<int, xdim>)
const
1997 const double s1 = std::atan2(
v1[0],
v1[1]);
1998 const double s2 = std::atan2(
v2[0],
v2[1]);
2007 template <
class DHCellIterator>
2011 std::integral_constant<int, 1>)
const
2014 ExcMessage(
"This operation only makes sense for dim>=2."));
2022 template <
int dim,
int spacedim>
2028 std::vector<types::global_dof_index>
renumbering(dof.n_dofs());
2036 template <
int dim,
int spacedim>
2043 std::vector<typename DoFHandler<dim, spacedim>::active_cell_iterator>
2045 ordered_cells.reserve(dof.get_triangulation().n_active_cells());
2048 for (
const auto &cell : dof.active_cell_iterators())
2059 template <
int dim,
int spacedim>
2062 const unsigned int level,
2066 std::vector<typename DoFHandler<dim, spacedim>::level_cell_iterator>
2068 ordered_cells.reserve(dof.get_triangulation().n_active_cells());
2088 template <
int dim,
int spacedim>
2101 template <
int dim,
int spacedim>
2119 template <
int dim,
int spacedim>
2137 for (
unsigned int i = 1; i < n_dofs; ++i)
2140 const unsigned int j =
2141 ::boost::random::uniform_int_distribution<>(0, i)(
2152 template <
int dim,
int spacedim>
2156 const unsigned int level)
2171 for (
unsigned int i = 1; i < n_dofs; ++i)
2174 const unsigned int j =
2175 ::boost::random::uniform_int_distribution<>(0, i)(
2186 template <
int dim,
int spacedim>
2192 &dof_handler.get_triangulation())),
2194 "Parallel triangulations are already enumerated according to their MPI process id."));
2205 template <
int dim,
int spacedim>
2219 const unsigned int n_subdomains =
2256 template <
int dim,
int spacedim>
2267 dof_handler.get_communicator()) > 0)
2273 template <
int dim,
int spacedim>
2295 dof_handler.begin_active(),
2297 std::vector<unsigned int>(),
2302 const std::vector<types::global_dof_index> dofs_per_component =
2304 for (
const auto &
dpc : dofs_per_component)
2308 const unsigned int n_components =
2309 dof_handler.get_fe_collection().n_components();
2312 dof_handler.n_dofs() / n_components;
2314 dof_handler.n_locally_owned_dofs() / n_components;
2334 for (
unsigned int component = 0; component < n_components; ++component)
2353 dof_handler.get_fe_collection())
2355 AssertThrow(fe.dofs_per_cell == 0 || fe.has_support_points(),
2357 for (
unsigned int i = 0; i < fe.n_base_elements(); ++i)
2359 fe.base_element(0).get_unit_support_points() ==
2360 fe.base_element(i).get_unit_support_points(),
2362 "All base elements should have the same support points."));
2369 std::vector<types::global_dof_index>
cell_dofs;
2371 const IndexSet &locally_owned_dofs = dof_handler.locally_owned_dofs();
2375 for (
const auto &cell : dof_handler.active_cell_iterators())
2376 if (cell->is_locally_owned())
2386 for (
unsigned int i = 0; i < fe.dofs_per_cell; ++i)
2402 for (
unsigned int i = 0; i < fe.dofs_per_cell; ++i)
2404 if (fe.system_to_component_index(i).first == 0 &&
2408 for (
unsigned int component = 0;
2409 component < fe.n_components();
2418 dofs_per_component * component);
2432 for (std::size_t i = 0; i < dof_handler.n_locally_owned_dofs(); ++i)
2445 typename VectorizedArrayType>
2461 template <
int dim,
int spacedim,
typename Number,
typename AdditionalDataType>
2479 template <
int dim,
int spacedim,
typename Number,
typename AdditionalDataType>
2480 std::vector<types::global_dof_index>
2488 my_mf_data.tasks_parallel_scheme = AdditionalDataType::none;
2509 std::vector<std::vector<unsigned int>>
2511 const ::Utilities::MPI::Partitioner &partitioner)
2515 std::vector<unsigned int>
touch_count(partitioner.locally_owned_size());
2516 for (
const auto &p : partitioner.import_indices())
2521 std::vector<std::vector<unsigned int>>
result(1);
2524 result.back().push_back(i);
2529 std::map<unsigned int, std::vector<unsigned int>>
2531 const std::vector<std::pair<unsigned int, unsigned int>> &import_targets =
2532 partitioner.import_targets();
2533 auto it = partitioner.import_indices().
begin();
2534 for (
const std::pair<unsigned int, unsigned int> &
proc : import_targets)
2540 for (
unsigned int i =
it->first; i <
it->second;
2544 result.back().push_back(i);
2556 std::map<std::vector<unsigned int>,
2557 std::vector<unsigned int>,
2558 std::function<
bool(
const std::vector<unsigned int> &,
2559 const std::vector<unsigned int> &)>>
2561 const std::vector<unsigned int> &
b) {
2562 if (a.size() <
b.
size())
2564 if (a.size() ==
b.
size())
2566 for (
unsigned int i = 0; i < a.size(); ++i)
2569 else if (a[i] > b[i])
2589 template <
int dim,
typename Number,
typename VectorizedArrayType>
2590 std::pair<std::vector<unsigned int>, std::vector<unsigned char>>
2593 const unsigned int component)
2596 .vector_partitioner->locally_owned_range();
2597 const unsigned int n_comp =
2598 matrix_free.get_dof_handler(component).get_fe().n_components();
2600 matrix_free.get_dof_handler(component).get_fe().n_base_elements() == 1,
2603 &matrix_free.get_dof_handler(component).get_fe().base_element(
2608 const unsigned int fe_degree =
2609 matrix_free.get_dof_handler(component).get_fe().degree;
2610 const unsigned int nn = fe_degree - 1;
2619 std::array<std::pair<unsigned int, unsigned int>,
2679 std::vector<unsigned int> &
result,
2693 std::vector<types::global_dof_index> dof_indices(
2694 matrix_free.get_dof_handler(component).get_fe().dofs_per_cell);
2720 const unsigned int &,
2721 const std::pair<unsigned int, unsigned int> &
cell_range) {
2726 for (
unsigned int v = 0;
2727 v < data.n_active_entries_per_cell_batch(cell);
2732 data.get_cell_iterator(cell, v, component)
2733 ->get_dof_indices(dof_indices);
2735 data.get_cell_iterator(cell, v, component)
2736 ->get_mg_dof_indices(dof_indices);
2741 if (a == 10 || a == 16)
2744 for (
unsigned int i1 = 0;
i1 <
nn; ++
i1)
2745 for (
unsigned int i0 = 0;
i0 <
nn; ++
i0)
2746 for (
unsigned int c = 0; c <
n_comp; ++c)
2753 for (
unsigned int i = 0; i < r.second; ++i)
2754 for (
unsigned int c = 0; c <
n_comp; ++c)
2756 dof_indices[r.first + r.second * c + i],
2767 data.get_dof_info(component).get_dof_indices_on_cell_batch(
2782 Assert(matrix_free.get_task_info().scheme ==
2785 "version of MatrixFree::cell_loop"));
2802 typename VectorizedArrayType>
2803 std::vector<types::global_dof_index>
2808 Assert(matrix_free.indices_initialized(),
2809 ExcMessage(
"You need to set up indices in MatrixFree "
2810 "to be able to compute a renumbering!"));
2813 unsigned int component = 0;
2814 for (; component < matrix_free.n_components(); ++component)
2815 if (&matrix_free.get_dof_handler(component) == &dof_handler)
2818 Assert(component < matrix_free.n_components(),
2819 ExcMessage(
"Could not locate the given DoFHandler in MatrixFree"));
2834 *matrix_free.get_dof_info(component).vector_partitioner);
2836 const std::pair<std::vector<unsigned int>, std::vector<unsigned char>>
2841 .vector_partitioner->locally_owned_range();
2854 const auto comparator = [&](
const unsigned int a,
const unsigned int b) {
2897#include "dof_renumbering.inst"
value_type * data() const noexcept
void reinit(value_type *starting_element, const std::size_t n_elements)
typename LevelSelector::cell_iterator level_cell_iterator
size_type index_within_set(const size_type global_index) const
size_type n_elements() const
bool is_element(const size_type index) const
ElementIterator begin() const
size_type nth_index_in_set(const size_type local_index) const
unsigned int size() const
unsigned int n_blocks() const
unsigned int n_components() const
const FEValuesType & get_present_fe_values() const
void reinit(const TriaIterator< DoFCellAccessor< dim, spacedim, lda > > &cell, const unsigned int q_index=numbers::invalid_unsigned_int, const unsigned int mapping_index=numbers::invalid_unsigned_int, const unsigned int fe_index=numbers::invalid_unsigned_int)
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
static ::ExceptionBase & ExcNotImplemented()
#define Assert(cond, exc)
#define AssertDimension(dim1, dim2)
#define AssertThrowMPI(error_code)
#define AssertIndexRange(index, range)
static ::ExceptionBase & ExcInternalError()
static ::ExceptionBase & ExcDoFHandlerNotInitialized()
static ::ExceptionBase & ExcDimensionMismatch(std::size_t arg1, std::size_t arg2)
static ::ExceptionBase & ExcMessage(std::string arg1)
#define AssertThrow(cond, exc)
typename ActiveSelector::cell_iterator cell_iterator
typename ActiveSelector::active_cell_iterator active_cell_iterator
void make_hanging_node_constraints(const DoFHandler< dim, spacedim > &dof_handler, AffineConstraints< number > &constraints)
void make_sparsity_pattern(const DoFHandler< dim, spacedim > &dof_handler, SparsityPatternBase &sparsity_pattern, const AffineConstraints< number > &constraints=AffineConstraints< number >(), const bool keep_constrained_dofs=true, const types::subdomain_id subdomain_id=numbers::invalid_subdomain_id)
@ update_quadrature_points
Transformed quadrature points.
graph_traits< Graph >::vertices_size_type size_type
graph_traits< Graph >::vertex_descriptor Vertex
adjacency_list< vecS, vecS, undirectedS, property< vertex_color_t, default_color_type, property< vertex_degree_t, int > > > Graph
std::pair< size_type, size_type > Pair
void create_graph(const DoFHandler< dim, spacedim > &dof_handler, const bool use_constraints, boosttypes::Graph &graph, boosttypes::property_map< boosttypes::Graph, boosttypes::vertex_degree_t >::type &graph_degree)
void compute_Cuthill_McKee(std::vector< types::global_dof_index > &new_dof_indices, const DoFHandler< dim, spacedim > &, const bool reversed_numbering=false, const bool use_constraints=false)
void Cuthill_McKee(DoFHandler< dim, spacedim > &dof_handler, const bool reversed_numbering=false, const bool use_constraints=false)
void king_ordering(DoFHandler< dim, spacedim > &dof_handler, const bool reversed_numbering=false, const bool use_constraints=false)
void compute_king_ordering(std::vector< types::global_dof_index > &new_dof_indices, const DoFHandler< dim, spacedim > &, const bool reversed_numbering=false, const bool use_constraints=false)
void compute_minimum_degree(std::vector< types::global_dof_index > &new_dof_indices, const DoFHandler< dim, spacedim > &, const bool reversed_numbering=false, const bool use_constraints=false)
void minimum_degree(DoFHandler< dim, spacedim > &dof_handler, const bool reversed_numbering=false, const bool use_constraints=false)
void compute_support_point_wise(std::vector< types::global_dof_index > &new_dof_indices, const DoFHandler< dim, spacedim > &dof_handler)
void compute_subdomain_wise(std::vector< types::global_dof_index > &new_dof_indices, const DoFHandler< dim, spacedim > &dof_handler)
void matrix_free_data_locality(DoFHandler< dim, spacedim > &dof_handler, const MatrixFree< dim, Number, VectorizedArrayType > &matrix_free)
void subdomain_wise(DoFHandler< dim, spacedim > &dof_handler)
void hierarchical(DoFHandler< dim, spacedim > &dof_handler)
void compute_random(std::vector< types::global_dof_index > &new_dof_indices, const DoFHandler< dim, spacedim > &dof_handler)
void component_wise(DoFHandler< dim, spacedim > &dof_handler, const std::vector< unsigned int > &target_component=std::vector< unsigned int >())
void downstream(DoFHandler< dim, spacedim > &dof_handler, const Tensor< 1, spacedim > &direction, const bool dof_wise_renumbering=false)
void compute_Cuthill_McKee(std::vector< types::global_dof_index > &new_dof_indices, const DoFHandler< dim, spacedim > &, const bool reversed_numbering=false, const bool use_constraints=false, const std::vector< types::global_dof_index > &starting_indices=std::vector< types::global_dof_index >(), const unsigned int level=numbers::invalid_unsigned_int)
void block_wise(DoFHandler< dim, spacedim > &dof_handler)
void Cuthill_McKee(DoFHandler< dim, spacedim > &dof_handler, const bool reversed_numbering=false, const bool use_constraints=false, const std::vector< types::global_dof_index > &starting_indices=std::vector< types::global_dof_index >())
void compute_sort_selected_dofs_back(std::vector< types::global_dof_index > &new_dof_indices, const DoFHandler< dim, spacedim > &dof_handler, const std::vector< bool > &selected_dofs)
void sort_selected_dofs_back(DoFHandler< dim, spacedim > &dof_handler, const std::vector< bool > &selected_dofs)
void support_point_wise(DoFHandler< dim, spacedim > &dof_handler)
void compute_cell_wise(std::vector< types::global_dof_index > &renumbering, std::vector< types::global_dof_index > &inverse_renumbering, const DoFHandler< dim, spacedim > &dof_handler, const std::vector< typename DoFHandler< dim, spacedim >::active_cell_iterator > &cell_order)
std::vector< types::global_dof_index > compute_matrix_free_data_locality(const DoFHandler< dim, spacedim > &dof_handler, const MatrixFree< dim, Number, VectorizedArrayType > &matrix_free)
void clockwise_dg(DoFHandler< dim, spacedim > &dof_handler, const Point< spacedim > ¢er, const bool counter=false)
void random(DoFHandler< dim, spacedim > &dof_handler)
void compute_downstream(std::vector< types::global_dof_index > &new_dof_indices, std::vector< types::global_dof_index > &reverse, const DoFHandler< dim, spacedim > &dof_handler, const Tensor< 1, spacedim > &direction, const bool dof_wise_renumbering)
void cell_wise(DoFHandler< dim, spacedim > &dof_handler, const std::vector< typename DoFHandler< dim, spacedim >::active_cell_iterator > &cell_order)
types::global_dof_index compute_component_wise(std::vector< types::global_dof_index > &new_dof_indices, const CellIterator &start, const std_cxx20::type_identity_t< CellIterator > &end, const std::vector< unsigned int > &target_component, const bool is_level_operation)
types::global_dof_index compute_block_wise(std::vector< types::global_dof_index > &new_dof_indices, const ITERATOR &start, const ENDITERATOR &end, bool is_level_operation)
void compute_clockwise_dg(std::vector< types::global_dof_index > &new_dof_indices, const DoFHandler< dim, spacedim > &dof_handler, const Point< spacedim > ¢er, const bool counter)
SymmetricTensor< 2, dim, Number > b(const Tensor< 2, dim, Number > &F)
T sum(const T &t, const MPI_Comm mpi_communicator)
T max(const T &t, const MPI_Comm mpi_communicator)
constexpr T pow(const T base, const int iexp)
std::vector< Integer > reverse_permutation(const std::vector< Integer > &permutation)
static const unsigned int invalid_unsigned_int
const types::global_dof_index invalid_dof_index
typename type_identity< T >::type type_identity_t
bool compare(const DHCellIterator &c1, const DHCellIterator &c2, std::integral_constant< int, xdim >) const
bool compare(const DHCellIterator &, const DHCellIterator &, std::integral_constant< int, 1 >) const
ClockCells(const Point< dim > ¢er, bool counter)
const Point< dim > & center
bool operator()(const DHCellIterator &c1, const DHCellIterator &c2) const
const ::Triangulation< dim, spacedim > & tria
#define DEAL_II_DOF_INDEX_MPI_TYPE