9#ifndef PECLET_CORE_SOLVER_COLORING_HPP
10#define PECLET_CORE_SOLVER_COLORING_HPP
42 std::vector<Index>
deg(
static_cast<std::size_t
>(n) + 1, 0);
46 ++
deg[
static_cast<std::size_t
>(
i) + 1];
47 ++
deg[
static_cast<std::size_t
>(nbr[
static_cast<std::size_t
>(
k)]) + 1];
50 deg[
static_cast<std::size_t
>(
i) + 1] +=
deg[
static_cast<std::size_t
>(
i)];
52 std::vector<Index>
aNbr(
static_cast<std::size_t
>(
deg[
static_cast<std::size_t
>(n)]));
53 std::vector<Index>
acur(
deg.begin(),
deg.end() - 1);
57 const Index j = nbr[
static_cast<std::size_t
>(
k)];
58 aNbr[
static_cast<std::size_t
>(
acur[
static_cast<std::size_t
>(
i)]++)] =
j;
59 aNbr[
static_cast<std::size_t
>(
acur[
static_cast<std::size_t
>(
j)]++)] =
i;
61 std::vector<int>
color(
static_cast<std::size_t
>(n), -1);
62 std::vector<int>
stamp;
67 const int nc =
color[
static_cast<std::size_t
>(
aNbr[
static_cast<std::size_t
>(
k)])];
69 if (
static_cast<std::size_t
>(nc) >=
stamp.size())
70 stamp.resize(
static_cast<std::size_t
>(nc) + 1, -1);
71 stamp[
static_cast<std::size_t
>(nc)] =
static_cast<int>(
i);
75 while (c <
static_cast<int>(
stamp.size()) &&
76 stamp[
static_cast<std::size_t
>(c)] ==
static_cast<int>(
i))
78 color[
static_cast<std::size_t
>(
i)] = c;
84 col.hStart.assign(
static_cast<std::size_t
>(nColors) + 1, 0);
86 ++
col.hStart[
static_cast<std::size_t
>(
color[
static_cast<std::size_t
>(
i)]) + 1];
87 for (
int c = 0; c < nColors; ++c)
88 col.hStart[
static_cast<std::size_t
>(c) + 1] +=
col.hStart[
static_cast<std::size_t
>(c)];
89 std::vector<Index> idx(
static_cast<std::size_t
>(n));
90 std::vector<Index>
cur(
col.hStart.begin(),
col.hStart.end() - 1);
92 const int c =
color[
static_cast<std::size_t
>(
i)];
93 idx[
static_cast<std::size_t
>(
cur[
static_cast<std::size_t
>(c)]++)] =
i;
Coloring greedyColoring(const std::vector< Index > &start, const std::vector< Index > &nbr, Index n)
Greedy colouring of the face CSR (start/nbr, host): each cell gets the smallest colour not used by an...
View< T > toDevice(const std::vector< T > &h, const std::string &label)
Upload a host std::vector into a freshly-sized device View (empty vector => empty view).
Kokkos::View< T *, MemSpace > View
1D device array.
std::int64_t Index
Signed index type for grids and particles (supersedes block_decomposer's long int IndxT).
A graph colouring of a face CSR: cells grouped by colour.
std::vector< Index > hStart