93 void operator()(
const typename Kokkos::TeamPolicy<execution_space>::member_type& thread,
size_t& nnz)
const {
94 auto agg = thread.league_rank();
96 const auto aggOffset =
aggRows(agg);
98 const auto aggSize =
aggRows(agg + 1) - aggOffset;
100 const impl_SC one = impl_ATS::one();
101 const impl_SC zero = impl_ATS::zero();
103 const int m = aggSize;
104 const int n =
fineNS.extent(1);
107 Xpetra::global_size_t offset = agg * n;
120 for (
int j = 0; j < n; j++)
121 for (
int k = 0; k < m; k++)
134 KokkosBatched::SerialQR<KokkosBlas::Algo::QR::Unblocked>::invoke(r, tau, work);
137 KokkosBatched::SerialSetIdentity::invoke(q);
140 KokkosBatched::SerialApplyQ<KokkosBatched::Side::Left, KokkosBlas::Trans::NoTranspose, KokkosBlas::Algo::ApplyQ::Unblocked>::invoke(r, tau, q, work);
143 for (
int j = 0; j < n; j++) {
144 for (
int k = 0; k < n; k++)
145 coarseNS(offset + k, j) = (k <= j) ? r(k, j) : zero;
149 for (
int j = 0; j < m; j++) {
151 size_t rowStart =
rowsAux(localRow);
153 for (
int k = 0; k < n; k++) {
155 if (q(j, k) != zero) {
156 colsAux(rowStart + lnnz) = offset + k;
157 valsAux(rowStart + lnnz) = q(j, k);
161 rows(localRow + 1) = lnnz;
196 for (
int j = 0; j < n; j++)
197 for (
int k = 0; k < n; k++)
201 coarseNS(offset + k, j) = (k == j ? one : zero);
207 for (
int j = 0; j < m; j++) {
209 size_t rowStart =
rowsAux(localRow);
210 colsAux(rowStart) = offset + j;
212 rows(localRow + 1) = 1;
226 for (
int j = 0; j < m; j++) {
228 size_t rowStart =
rowsAux(localRow);
230 for (
int k = 0; k < n; k++) {
234 colsAux(rowStart + lnnz) = offset + k;
235 valsAux(rowStart + lnnz) = qr_jk;
239 rows(localRow + 1) = lnnz;
243 for (
int j = 0; j < n; j++)