326 Kokkos::View<global_ordinal_t*, Kokkos::HostSpace>
327 mat_colind(Kokkos::ViewAllocateWithoutInitializing(
"mat_colind"), colind.size());
329 ArrayView<scalar_t> nzval_arrayview(mat_nzval.data(), nzval.size());
330 ArrayView<global_ordinal_t> colind_arrayview(mat_colind.data(), colind.size());
332 for( row_it = node_elements.begin(); row_it != row_end; ++row_it ){
333 host_rowptr(rowptr_ind++) = rowInd;
334 size_t rowNNZ = get_mat->getGlobalRowNNZ(*row_it);
335 size_t nnzRet = OrdinalTraits<size_t>::zero();
336 ArrayView<global_ordinal_t> colind_view = colind_arrayview.view(rowInd,rowNNZ);
337 ArrayView<scalar_t> nzval_view = nzval_arrayview.view(rowInd,rowNNZ);
339 get_mat->getGlobalRowCopy(*row_it, colind_view, nzval_view, nnzRet);
341 for (
size_t rr = 0; rr < nnzRet ; rr++) {
342 colind_view[rr] -= rmap->getIndexBase();
348 if( ordering == SORTED_INDICES ) {
349 Tpetra::sort2(colind_view.begin(), colind_view.end(), nzval_view.begin());
352 TEUCHOS_TEST_FOR_EXCEPTION( rowNNZ != nnzRet,
354 "Number of values returned different from "
355 "number of values reported");
358 host_rowptr(rowptr_ind) = nnz = rowInd;
360 deep_copy_or_assign_view(nzval, mat_nzval);
361 deep_copy_or_assign_view(colind, mat_colind);
362 deep_copy_or_assign_view(rowptr, host_rowptr);
365 global_host_idx_t mat_colind(Kokkos::ViewAllocateWithoutInitializing(
"mat_colind"), nzval.size());
366 global_host_val_t mat_nzvals(Kokkos::ViewAllocateWithoutInitializing(
"mat_nzvals"), colind.size());
368 auto host_colind = Kokkos::create_mirror_view(colind);
369 auto host_nzval = Kokkos::create_mirror_view(nzval);
372 for( row_it = node_elements.begin(); row_it != row_end; ++row_it ){
373 size_t rowNNZ = get_mat->getGlobalRowNNZ(*row_it);
374 size_t nnzRet = OrdinalTraits<size_t>::zero();
378 global_host_idx_t colind_view (&(mat_colind(rowInd)), rowNNZ);
379 global_host_val_t nzvals_view (&(mat_nzvals(rowInd)), rowNNZ);
381 global_ordinal_t row_id = *row_it;
382 get_mat->getGlobalRowCopy_kokkos_view(row_id, colind_view, nzvals_view, nnzRet);
384 TEUCHOS_TEST_FOR_EXCEPTION( rowNNZ != nnzRet,
386 "Number of values returned different from "
387 "number of values reported");
388 host_rowptr(rowptr_ind++) = rowInd;
391 host_rowptr(rowptr_ind) = nnz = rowInd;
394 if (rmap->getIndexBase() != 0) {
395 for (
size_t k = 0; k < mat_colind.extent(0); k++) {
396 mat_colind(k) -= rmap->getIndexBase();
401 deep_copy_or_assign_view(nzval, mat_nzvals);
402 deep_copy_or_assign_view(colind, mat_colind);
403 deep_copy_or_assign_view(rowptr, host_rowptr);
406 if( ordering == SORTED_INDICES ) {
407 using execution_space =
typename KV_GS::execution_space;
408 KokkosSparse::sort_crs_matrix <execution_space, KV_GS, KV_GO, KV_S>
409 (rowptr, colind, nzval);
414 template <
class Matrix >
415 template<
typename KV_S,
typename KV_GO,
typename KV_GS>
417 MatrixAdapter<Matrix>::help_getCcs_kokkos_view(KV_S & nzval,
420 typename MatrixAdapter<Matrix>::global_size_t& nnz,
421 const Teuchos::Ptr<
const Tpetra::Map<local_ordinal_t,global_ordinal_t,node_t> > colmap,
422 EDistribution distribution,
423 EStorage_Ordering ordering,
424 no_special_impl nsi)
const
429 do_getCcs_kokkos_view(nzval, rowind, colptr,
430 nnz, colmap, distribution, ordering,
431 typename adapter_t::major_access());
434 template <
class Matrix >
435 template<
typename KV_S,
typename KV_GO,
typename KV_GS>
437 MatrixAdapter<Matrix>::do_getCcs_kokkos_view(KV_S & nzval,
440 typename MatrixAdapter<Matrix>::global_size_t& nnz,
441 const Teuchos::Ptr<
const Tpetra::Map<local_ordinal_t,global_ordinal_t,node_t> > colmap,
442 EDistribution distribution,
443 EStorage_Ordering ordering,
446 using Teuchos::ArrayView;
451 KV_S nzval_tmp(Kokkos::ViewAllocateWithoutInitializing(
"nzval_tmp"), nzval.size());
452 KV_GO colind(Kokkos::ViewAllocateWithoutInitializing(
"colind"), rowind.size());
453 KV_GS rowptr(Kokkos::ViewAllocateWithoutInitializing(
"rowptr"), this->getGlobalNumRows() + 1);
455 this->getCrs_kokkos_view(nzval_tmp, colind, rowptr, nnz, colmap, ordering, distribution);
461 ArrayView<typename KV_S::value_type> av_nzval_tmp(nzval_tmp.data(), nzval_tmp.size());
462 ArrayView<typename KV_GO::value_type> av_colind(colind.data(), colind.size());
463 ArrayView<typename KV_GS::value_type> av_rowptr(rowptr.data(), rowptr.size());
464 ArrayView<typename KV_S::value_type> av_nzval(nzval.data(), nzval.size());
465 ArrayView<typename KV_GO::value_type> av_rowind(rowind.data(), rowind.size());
466 ArrayView<typename KV_GS::value_type> av_colptr(colptr.data(), colptr.size());
467 Util::transpose(av_nzval_tmp, av_colind, av_rowptr, av_nzval, av_rowind, av_colptr);
472 template <
class Matrix >
473 template<
typename KV_GO,
typename KV_S>
480 static_cast<const adapter_t*
>(
this)->getGlobalRowCopy_kokkos_view_impl(row, indices, vals, nnz);