305 size_t nnzRet = OrdinalTraits<size_t>::zero();
306 ArrayView<global_ordinal_t> colind_view = colind_arrayview.view(rowInd,rowNNZ);
307 ArrayView<scalar_t> nzval_view = nzval_arrayview.view(rowInd,rowNNZ);
309 get_mat->getGlobalRowCopy(*row_it, colind_view, nzval_view, nnzRet);
311 for (
size_t rr = 0; rr < nnzRet ; rr++) {
312 colind_view[rr] -= rmap->getIndexBase();
318 if( ordering == SORTED_INDICES ) {
319 Tpetra::sort2(colind_view.begin(), colind_view.end(), nzval_view.begin());
322 TEUCHOS_TEST_FOR_EXCEPTION( rowNNZ != nnzRet,
324 "Number of values returned different from "
325 "number of values reported");
328 host_rowptr(rowptr_ind) = nnz = rowInd;
330 deep_copy_or_assign_view(nzval, mat_nzval);
331 deep_copy_or_assign_view(colind, mat_colind);
332 deep_copy_or_assign_view(rowptr, host_rowptr);
335 global_host_idx_t mat_colind(Kokkos::ViewAllocateWithoutInitializing(
"mat_colind"), nzval.size());
336 global_host_val_t mat_nzvals(Kokkos::ViewAllocateWithoutInitializing(
"mat_nzvals"), colind.size());
338 auto host_colind = Kokkos::create_mirror_view(colind);
339 auto host_nzval = Kokkos::create_mirror_view(nzval);
342 for( row_it = node_elements.begin(); row_it != row_end; ++row_it ){
343 size_t rowNNZ = get_mat->getGlobalRowNNZ(*row_it);
344 size_t nnzRet = OrdinalTraits<size_t>::zero();
348 global_host_idx_t colind_view (&(mat_colind(rowInd)), rowNNZ);
349 global_host_val_t nzvals_view (&(mat_nzvals(rowInd)), rowNNZ);
351 global_ordinal_t row_id = *row_it;
352 get_mat->getGlobalRowCopy_kokkos_view(row_id, colind_view, nzvals_view, nnzRet);
354 TEUCHOS_TEST_FOR_EXCEPTION( rowNNZ != nnzRet,
356 "Number of values returned different from "
357 "number of values reported");
358 host_rowptr(rowptr_ind++) = rowInd;
361 host_rowptr(rowptr_ind) = nnz = rowInd;
364 if (rmap->getIndexBase() != 0) {
365 for (
size_t k = 0; k < mat_colind.extent(0); k++) {
366 mat_colind(k) -= rmap->getIndexBase();
371 deep_copy_or_assign_view(nzval, mat_nzvals);
372 deep_copy_or_assign_view(colind, mat_colind);
373 deep_copy_or_assign_view(rowptr, host_rowptr);
376 if( ordering == SORTED_INDICES ) {
377 using execution_space =
typename KV_GS::execution_space;
378 KokkosSparse::sort_crs_matrix <execution_space, KV_GS, KV_GO, KV_S>
379 (rowptr, colind, nzval);
384 template <
class Matrix >
385 template<
typename KV_S,
typename KV_GO,
typename KV_GS>
387 MatrixAdapter<Matrix>::help_getCcs_kokkos_view(KV_S & nzval,
390 typename MatrixAdapter<Matrix>::global_size_t& nnz,
391 const Teuchos::Ptr<const map_t> colmap,
392 EDistribution distribution,
393 EStorage_Ordering ordering,
394 no_special_impl nsi)
const
399 do_getCcs_kokkos_view(nzval, rowind, colptr,
400 nnz, colmap, distribution, ordering,
401 typename adapter_t::major_access());
404 template <
class Matrix >
405 template<
typename KV_S,
typename KV_GO,
typename KV_GS>
407 MatrixAdapter<Matrix>::do_getCcs_kokkos_view(KV_S & nzval,
410 typename MatrixAdapter<Matrix>::global_size_t& nnz,
411 const Teuchos::Ptr<const map_t> colmap,
412 EDistribution distribution,
413 EStorage_Ordering ordering,
416 using Teuchos::ArrayView;
421 KV_S nzval_tmp(Kokkos::ViewAllocateWithoutInitializing(
"nzval_tmp"), nzval.size());
422 KV_GO colind(Kokkos::ViewAllocateWithoutInitializing(
"colind"), rowind.size());
423 KV_GS rowptr(Kokkos::ViewAllocateWithoutInitializing(
"rowptr"), this->getGlobalNumRows() + 1);
425 this->getCrs_kokkos_view(nzval_tmp, colind, rowptr, nnz, colmap, ordering, distribution);
431 ArrayView<typename KV_S::value_type> av_nzval_tmp(nzval_tmp.data(), nzval_tmp.size());
432 ArrayView<typename KV_GO::value_type> av_colind(colind.data(), colind.size());
433 ArrayView<typename KV_GS::value_type> av_rowptr(rowptr.data(), rowptr.size());
434 ArrayView<typename KV_S::value_type> av_nzval(nzval.data(), nzval.size());
435 ArrayView<typename KV_GO::value_type> av_rowind(rowind.data(), rowind.size());
436 ArrayView<typename KV_GS::value_type> av_colptr(colptr.data(), colptr.size());
437 Util::transpose(av_nzval_tmp, av_colind, av_rowptr, av_nzval, av_rowind, av_colptr);
442 template <
class Matrix >
443 template<
typename KV_GO,
typename KV_S>
450 static_cast<const adapter_t*
>(
this)->getGlobalRowCopy_kokkos_view_impl(row, indices, vals, nnz);
529 host_ordinal_type_array &perm_g2l,
530 host_ordinal_type_array &recvCountRows, host_ordinal_type_array &recvDisplRows,
531 host_ordinal_type_array &recvCounts, host_ordinal_type_array &recvDispls,
532 host_ordinal_type_array &transpose_map, host_scalar_type_array &nzvals_t,
533 bool column_major,
EPhase current_phase)
const
535 return static_cast<const adapter_t*
>(
this)->gather_impl(nzvals, indices, pointers, perm_g2l, recvCountRows, recvDisplRows, recvCounts, recvDispls,
536 transpose_map, nzvals_t, column_major, current_phase);