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;
179 for (
int j = 0; j < n; j++)
180 for (
int k = 0; k < n; k++)
184 coarseNS(offset + k, j) = (k == j ? one : zero);
187 for (
int i = 0; i < m; i++)
188 for (
int j = 0; j < n; j++)
189 q(i, j) = (j == i ? one : zero);
193 for (
int j = 0; j < m; j++) {
195 size_t rowStart =
rowsAux(localRow);
197 for (
int k = 0; k < n; k++) {
199 if (q(j, k) != zero) {
200 colsAux(rowStart + lnnz) = offset + k;
201 valsAux(rowStart + lnnz) = q(j, k);
205 rows(localRow + 1) = lnnz;
218 for (
int j = 0; j < m; j++) {
220 size_t rowStart =
rowsAux(localRow);
222 for (
int k = 0; k < n; k++) {
226 colsAux(rowStart + lnnz) = offset + k;
227 valsAux(rowStart + lnnz) = qr_jk;
231 rows(localRow + 1) = lnnz;
235 for (
int j = 0; j < n; j++)