40#ifndef TPETRA_CRSMATRIX_DECL_HPP
41#define TPETRA_CRSMATRIX_DECL_HPP
47#include "Tpetra_LocalCrsMatrixOperator.hpp"
48#include "Tpetra_RowMatrix_decl.hpp"
49#include "Tpetra_Exceptions.hpp"
50#include "Tpetra_DistObject.hpp"
51#include "Tpetra_CrsGraph.hpp"
52#include "Tpetra_Vector.hpp"
54#include "KokkosSparse_Utils.hpp"
55#include "KokkosSparse_CrsMatrix.hpp"
56#include "Teuchos_DataAccess.hpp"
63 template<
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
class crsMatrix_Swap_Tester;
116 template<
class CrsMatrixType>
117 Teuchos::RCP<CrsMatrixType>
119 const Import<
typename CrsMatrixType::local_ordinal_type,
120 typename CrsMatrixType::global_ordinal_type,
121 typename CrsMatrixType::node_type>&
importer,
122 const Teuchos::RCP<
const Map<
typename CrsMatrixType::local_ordinal_type,
123 typename CrsMatrixType::global_ordinal_type,
124 typename CrsMatrixType::node_type> >& domainMap = Teuchos::null,
125 const Teuchos::RCP<
const Map<
typename CrsMatrixType::local_ordinal_type,
126 typename CrsMatrixType::global_ordinal_type,
127 typename CrsMatrixType::node_type> >&
rangeMap = Teuchos::null,
128 const Teuchos::RCP<Teuchos::ParameterList>&
params = Teuchos::null);
183 template<
class CrsMatrixType>
184 Teuchos::RCP<CrsMatrixType>
186 const Import<
typename CrsMatrixType::local_ordinal_type,
187 typename CrsMatrixType::global_ordinal_type,
189 const Import<
typename CrsMatrixType::local_ordinal_type,
190 typename CrsMatrixType::global_ordinal_type,
192 const Teuchos::RCP<
const Map<
typename CrsMatrixType::local_ordinal_type,
193 typename CrsMatrixType::global_ordinal_type,
194 typename CrsMatrixType::node_type> >& domainMap,
195 const Teuchos::RCP<
const Map<
typename CrsMatrixType::local_ordinal_type,
196 typename CrsMatrixType::global_ordinal_type,
197 typename CrsMatrixType::node_type> >&
rangeMap,
198 const Teuchos::RCP<Teuchos::ParameterList>&
params);
233 template<
class CrsMatrixType>
234 Teuchos::RCP<CrsMatrixType>
236 const Export<
typename CrsMatrixType::local_ordinal_type,
237 typename CrsMatrixType::global_ordinal_type,
238 typename CrsMatrixType::node_type>&
exporter,
239 const Teuchos::RCP<
const Map<
typename CrsMatrixType::local_ordinal_type,
240 typename CrsMatrixType::global_ordinal_type,
241 typename CrsMatrixType::node_type> >& domainMap = Teuchos::null,
242 const Teuchos::RCP<
const Map<
typename CrsMatrixType::local_ordinal_type,
243 typename CrsMatrixType::global_ordinal_type,
244 typename CrsMatrixType::node_type> >&
rangeMap = Teuchos::null,
245 const Teuchos::RCP<Teuchos::ParameterList>&
params = Teuchos::null);
280 template<
class CrsMatrixType>
281 Teuchos::RCP<CrsMatrixType>
283 const Export<
typename CrsMatrixType::local_ordinal_type,
284 typename CrsMatrixType::global_ordinal_type,
286 const Export<
typename CrsMatrixType::local_ordinal_type,
287 typename CrsMatrixType::global_ordinal_type,
289 const Teuchos::RCP<
const Map<
typename CrsMatrixType::local_ordinal_type,
290 typename CrsMatrixType::global_ordinal_type,
291 typename CrsMatrixType::node_type> >& domainMap,
292 const Teuchos::RCP<
const Map<
typename CrsMatrixType::local_ordinal_type,
293 typename CrsMatrixType::global_ordinal_type,
294 typename CrsMatrixType::node_type> >&
rangeMap,
295 const Teuchos::RCP<Teuchos::ParameterList>&
params);
300 template<
class SC,
class LO,
class GO,
class NO>
425 public RowMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>,
426 public DistObject<char, LocalOrdinal, GlobalOrdinal, Node>
478 using mag_type =
typename Kokkos::ArithTraits<impl_scalar_type>::mag_type;
494 typename local_graph_device_type::size_type>;
495 using local_matrix_host_type =
496 typename local_matrix_device_type::HostMirror;
505 using row_ptrs_device_view_type =
506 typename row_matrix_type::row_ptrs_device_view_type;
507 using row_ptrs_host_view_type =
508 typename row_matrix_type::row_ptrs_host_view_type;
511 using local_inds_device_view_type =
512 typename row_matrix_type::local_inds_device_view_type;
513 using local_inds_host_view_type =
514 typename row_matrix_type::local_inds_host_view_type;
515 using nonconst_local_inds_host_view_type =
516 typename row_matrix_type::nonconst_local_inds_host_view_type;
518 using global_inds_device_view_type =
519 typename row_matrix_type::global_inds_device_view_type;
520 using global_inds_host_view_type =
521 typename row_matrix_type::global_inds_host_view_type;
522 using nonconst_global_inds_host_view_type =
523 typename row_matrix_type::nonconst_global_inds_host_view_type;
525 using values_device_view_type =
526 typename row_matrix_type::values_device_view_type;
527 using values_host_view_type =
528 typename row_matrix_type::values_host_view_type;
529 using nonconst_values_host_view_type =
530 typename row_matrix_type::nonconst_values_host_view_type;
567 CrsMatrix (
const Teuchos::RCP<const map_type>& rowMap,
569 const Teuchos::RCP<Teuchos::ParameterList>&
params = Teuchos::null);
583 CrsMatrix (
const Teuchos::RCP<const map_type>& rowMap,
585 const Teuchos::RCP<Teuchos::ParameterList>&
params = Teuchos::null);
606 CrsMatrix (
const Teuchos::RCP<const map_type>& rowMap,
607 const Teuchos::RCP<const map_type>& colMap,
609 const Teuchos::RCP<Teuchos::ParameterList>&
params = Teuchos::null);
629 CrsMatrix (
const Teuchos::RCP<const map_type>& rowMap,
630 const Teuchos::RCP<const map_type>& colMap,
632 const Teuchos::RCP<Teuchos::ParameterList>&
params = Teuchos::null);
663 const Teuchos::RCP<const crs_graph_type>&
graph,
664 const Teuchos::RCP<Teuchos::ParameterList>&
params = Teuchos::null);
690 explicit CrsMatrix (
const Teuchos::RCP<const crs_graph_type>&
graph,
691 const Teuchos::RCP<Teuchos::ParameterList>&
params = Teuchos::null);
721 explicit CrsMatrix (
const Teuchos::RCP<const crs_graph_type>&
graph,
722 const typename local_matrix_device_type::values_type&
values,
723 const Teuchos::RCP<Teuchos::ParameterList>&
params = Teuchos::null);
751 CrsMatrix (
const Teuchos::RCP<const map_type>& rowMap,
752 const Teuchos::RCP<const map_type>& colMap,
753 const typename local_graph_device_type::row_map_type&
rowPointers,
754 const typename local_graph_device_type::entries_type::non_const_type&
columnIndices,
755 const typename local_matrix_device_type::values_type&
values,
756 const Teuchos::RCP<Teuchos::ParameterList>&
params = Teuchos::null);
784 CrsMatrix (
const Teuchos::RCP<const map_type>& rowMap,
785 const Teuchos::RCP<const map_type>& colMap,
788 const Teuchos::ArrayRCP<Scalar>&
values,
789 const Teuchos::RCP<Teuchos::ParameterList>&
params = Teuchos::null);
812 CrsMatrix (
const Teuchos::RCP<const map_type>& rowMap,
813 const Teuchos::RCP<const map_type>& colMap,
815 const Teuchos::RCP<Teuchos::ParameterList>&
params = Teuchos::null);
848 const Teuchos::RCP<const map_type>& rowMap,
849 const Teuchos::RCP<const map_type>& colMap,
850 const Teuchos::RCP<const map_type>& domainMap = Teuchos::null,
851 const Teuchos::RCP<const map_type>&
rangeMap = Teuchos::null,
852 const Teuchos::RCP<Teuchos::ParameterList>&
params = Teuchos::null);
859 const Teuchos::RCP<const map_type>& rowMap,
860 const Teuchos::RCP<const map_type>& colMap,
861 const Teuchos::RCP<const map_type>& domainMap,
862 const Teuchos::RCP<const map_type>&
rangeMap,
863 const Teuchos::RCP<const import_type>&
importer,
864 const Teuchos::RCP<const export_type>&
exporter,
865 const Teuchos::RCP<Teuchos::ParameterList>&
params =
886 template <
class S2,
class LO2,
class GO2,
class N2>
890 template <
class S2,
class LO2,
class GO2,
class N2>
897 template <
class MatrixArray,
class MultiVectorArray>
899 const typename std::remove_pointer<typename MultiVectorArray::value_type>::type &
X,
901 typename std::remove_pointer<typename MatrixArray::value_type>::type::scalar_type
alpha,
902 typename std::remove_pointer<typename MatrixArray::value_type>::type::scalar_type
beta,
903 Teuchos::RCP<Teuchos::ParameterList>
params);
977 const Teuchos::ArrayView<const GlobalOrdinal>&
cols,
978 const Teuchos::ArrayView<const Scalar>&
vals);
1044 const Teuchos::ArrayView<const LocalOrdinal> &
cols,
1045 const Teuchos::ArrayView<const Scalar> &
vals,
1133 const Kokkos::View<const global_ordinal_type*, Kokkos::AnonymousSpace>&
inputInds,
1134 const Kokkos::View<const impl_scalar_type*, Kokkos::AnonymousSpace>&
inputVals);
1140 const Teuchos::ArrayView<const GlobalOrdinal>&
cols,
1141 const Teuchos::ArrayView<const Scalar>&
vals);
1221 const Kokkos::View<const local_ordinal_type*, Kokkos::AnonymousSpace>&
inputInds,
1222 const Kokkos::View<const impl_scalar_type*, Kokkos::AnonymousSpace>&
inputVals);
1229 const Teuchos::ArrayView<const LocalOrdinal>&
cols,
1230 const Teuchos::ArrayView<const Scalar>&
vals);
1260 static const bool useAtomicUpdatesByDefault =
1261#ifdef KOKKOS_ENABLE_SERIAL
1262 ! std::is_same<execution_space, Kokkos::Serial>::value;
1298 const bool atomic = useAtomicUpdatesByDefault);
1339 const Teuchos::ArrayView<const GlobalOrdinal>&
cols,
1340 const Teuchos::ArrayView<const Scalar>&
vals,
1341 const bool atomic = useAtomicUpdatesByDefault);
1370 const bool atomic = useAtomicUpdatesByDefault);
1392 const bool atomic = useAtomicUpdatesByDefault);
1434 const Kokkos::View<const local_ordinal_type*, Kokkos::AnonymousSpace>&
inputInds,
1435 const Kokkos::View<const impl_scalar_type*, Kokkos::AnonymousSpace>&
inputVals,
1436 const bool atomic = useAtomicUpdatesByDefault);
1469 const Teuchos::ArrayView<const LocalOrdinal>&
cols,
1470 const Teuchos::ArrayView<const Scalar>&
vals,
1471 const bool atomic = useAtomicUpdatesByDefault);
1499 const bool atomic = useAtomicUpdatesByDefault);
1540 const bool atomic = useAtomicUpdatesByDefault);
1580 const bool atomic = useAtomicUpdatesByDefault);
1614 const bool atomic = useAtomicUpdatesByDefault);
1648 const bool atomic = useAtomicUpdatesByDefault);
1699 const typename UnmanagedView<LocalIndicesViewType>::type&
inputInds,
1700 const typename UnmanagedView<ImplScalarViewType>::type&
inputVals,
1702 const bool atomic = useAtomicUpdatesByDefault)
1710 static_assert (Kokkos::is_view<LocalIndicesViewType>::value,
1711 "First template parameter LocalIndicesViewType must be "
1713 static_assert (Kokkos::is_view<ImplScalarViewType>::value,
1714 "Second template parameter ImplScalarViewType must be a "
1716 static_assert (
static_cast<int> (LocalIndicesViewType::rank) == 1,
1717 "First template parameter LocalIndicesViewType must "
1719 static_assert (
static_cast<int> (ImplScalarViewType::rank) == 1,
1720 "Second template parameter ImplScalarViewType must have "
1722 static_assert (std::is_same<
1723 typename LocalIndicesViewType::non_const_value_type,
1725 "First template parameter LocalIndicesViewType must "
1726 "contain values of type local_ordinal_type.");
1727 static_assert (std::is_same<
1728 typename ImplScalarViewType::non_const_value_type,
1730 "Second template parameter ImplScalarViewType must "
1731 "contain values of type impl_scalar_type.");
1735 return Teuchos::OrdinalTraits<LO>::invalid ();
1737 return this->transformLocalValues (
lclRow,
1786 template<
class BinaryFunction,
class InputMemorySpace>
1796 const bool atomic = useAtomicUpdatesByDefault)
1801 return Teuchos::OrdinalTraits<LO>::invalid ();
1803 return this->transformGlobalValues (
gblRow,
1842 setAllValues (
const typename local_graph_device_type::row_map_type&
ptr,
1843 const typename local_graph_device_type::entries_type::non_const_type&
ind,
1844 const typename local_matrix_device_type::values_type&
val);
1895 const Teuchos::ArrayRCP<LocalOrdinal>&
ind,
1896 const Teuchos::ArrayRCP<Scalar>&
val);
1904 {
return getCrsGraph()->getLocalRowPtrsDevice(); }
1912 {
return getCrsGraph()->getLocalIndicesDevice(); }
1961 void resumeFill (
const Teuchos::RCP<Teuchos::ParameterList>&
params = Teuchos::null);
2021 fillComplete (
const Teuchos::RCP<const map_type>& domainMap,
2022 const Teuchos::RCP<const map_type>&
rangeMap,
2023 const Teuchos::RCP<Teuchos::ParameterList>&
params = Teuchos::null);
2082 const Teuchos::RCP<const map_type>&
rangeMap,
2083 const Teuchos::RCP<const import_type>&
importer = Teuchos::null,
2084 const Teuchos::RCP<const export_type>&
exporter = Teuchos::null,
2085 const Teuchos::RCP<Teuchos::ParameterList>&
params = Teuchos::null);
2190 const Teuchos::RCP<const map_type>&
newColMap,
2191 const Teuchos::RCP<const import_type>&
newImport = Teuchos::null,
2273 Teuchos::RCP<const Teuchos::Comm<int> >
getComm()
const override;
2277 Teuchos::RCP<const map_type>
getRowMap ()
const override;
2280 Teuchos::RCP<const map_type>
getColMap ()
const override;
2283 Teuchos::RCP<const RowGraph<LocalOrdinal, GlobalOrdinal, Node> >
2287 Teuchos::RCP<const crs_graph_type>
getCrsGraph ()
const;
2313 local_matrix_host_type getLocalMatrixHost ()
const;
2528 using values_dualv_type =
2529 Kokkos::DualView<impl_scalar_type*, device_type>;
2530 using values_wdv_type =
2531 Details::WrappedDualView<values_dualv_type>;
2532 values_wdv_type valuesUnpacked_wdv;
2533 mutable values_wdv_type valuesPacked_wdv;
2535 using ordinal_rowptrs_type =
typename local_multiply_op_type::ordinal_view_type;
2597 nonconst_global_inds_host_view_type &
Indices,
2598 nonconst_values_host_view_type &
Values,
2617 nonconst_local_inds_host_view_type &
Indices,
2618 nonconst_values_host_view_type &
Values,
2636 global_inds_host_view_type &indices,
2637 values_host_view_type &
values)
const override;
2653 local_inds_host_view_type &indices,
2654 values_host_view_type &
values)
const override;
2742 Kokkos::MemoryUnmanaged>& offsets)
const;
2768 const Teuchos::ArrayView<const size_t>& offsets)
const;
2852 const Teuchos::ETransp
mode = Teuchos::NO_TRANS,
2853 const Scalar&
alpha = Teuchos::ScalarTraits<Scalar>::one (),
2854 const Scalar&
beta = Teuchos::ScalarTraits<Scalar>::zero ())
const;
2859 Teuchos::RCP<CrsMatrix<T, LocalOrdinal, GlobalOrdinal, Node> >
2879 Teuchos::ETransp
mode = Teuchos::NO_TRANS,
2880 Scalar alpha = Teuchos::ScalarTraits<Scalar>::one(),
2881 Scalar beta = Teuchos::ScalarTraits<Scalar>::zero())
const override;
2893 Teuchos::RCP<const map_type>
getDomainMap ()
const override;
2901 Teuchos::RCP<const map_type>
getRangeMap ()
const override;
2917 virtual Teuchos::RCP<RowMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> >
2923 const Teuchos::RCP<Teuchos::ParameterList>&
params)
const override;
2936 const Teuchos::EVerbosityLevel
verbLevel =
2937 Teuchos::Describable::verbLevel_default)
const override;
2956 const bool verbose);
2960 copyAndPermuteStaticGraph(
2962 const size_t numSameIDs,
2965 const size_t numPermutes);
2968 copyAndPermuteNonStaticGraph(
2970 const size_t numSameIDs,
2971 const Kokkos::DualView<const local_ordinal_type*, buffer_device_type>&
permuteToLIDs_dv,
2972 const Kokkos::DualView<const local_ordinal_type*, buffer_device_type>&
permuteFromLIDs_dv,
2973 const size_t numPermutes);
2979 const size_t numSameIDs,
2980 const Kokkos::DualView<
2983 const Kokkos::DualView<
2991 const Kokkos::DualView<
2994 Kokkos::DualView<char*, buffer_device_type>& exports,
3002 unpackAndCombineImpl(
3005 Kokkos::DualView<char*, buffer_device_type> imports,
3009 const bool verbose);
3014 unpackAndCombineImplNonStatic(
3017 Kokkos::DualView<char*, buffer_device_type> imports,
3034 (
const Kokkos::DualView<const local_ordinal_type*, buffer_device_type>&
importLIDs,
3035 Kokkos::DualView<char*, buffer_device_type> imports,
3146 packNew (
const Kokkos::DualView<const local_ordinal_type*, buffer_device_type>&
exportLIDs,
3147 Kokkos::DualView<char*, buffer_device_type>& exports,
3159 packNonStaticNew (
const Kokkos::DualView<const local_ordinal_type*, buffer_device_type>&
exportLIDs,
3160 Kokkos::DualView<char*, buffer_device_type>& exports,
3194 packRow (
char exports[],
3259 const char imports[],
3274 allocatePackSpaceNew (Kokkos::DualView<char*, buffer_device_type>& exports,
3275 size_t& totalNumEntries,
3282 typename local_matrix_host_type::values_type::const_type
3285 return valuesPacked_wdv.getHostView(
s);
3289 typename local_matrix_host_type::values_type
3292 return valuesPacked_wdv.getHostView(
s);
3296 typename local_matrix_host_type::values_type
3299 return valuesPacked_wdv.getHostView(
s);
3303 typename local_matrix_device_type::values_type::const_type
3306 return valuesPacked_wdv.getDeviceView(
s);
3310 typename local_matrix_device_type::values_type
3313 return valuesPacked_wdv.getDeviceView(
s);
3317 typename local_matrix_device_type::values_type
3320 return valuesPacked_wdv.getDeviceView(
s);
3325 template<
class CrsMatrixType>
3326 friend Teuchos::RCP<CrsMatrixType>
3328 const Import<
typename CrsMatrixType::local_ordinal_type,
3329 typename CrsMatrixType::global_ordinal_type,
3330 typename CrsMatrixType::node_type>&
importer,
3331 const Teuchos::RCP<
const Map<
typename CrsMatrixType::local_ordinal_type,
3332 typename CrsMatrixType::global_ordinal_type,
3333 typename CrsMatrixType::node_type> >& domainMap,
3334 const Teuchos::RCP<
const Map<
typename CrsMatrixType::local_ordinal_type,
3335 typename CrsMatrixType::global_ordinal_type,
3336 typename CrsMatrixType::node_type> >&
rangeMap,
3337 const Teuchos::RCP<Teuchos::ParameterList>&
params);
3340 template<
class CrsMatrixType>
3341 friend Teuchos::RCP<CrsMatrixType>
3343 const Import<
typename CrsMatrixType::local_ordinal_type,
3344 typename CrsMatrixType::global_ordinal_type,
3346 const Import<
typename CrsMatrixType::local_ordinal_type,
3347 typename CrsMatrixType::global_ordinal_type,
3349 const Teuchos::RCP<
const Map<
typename CrsMatrixType::local_ordinal_type,
3350 typename CrsMatrixType::global_ordinal_type,
3351 typename CrsMatrixType::node_type> >& domainMap,
3352 const Teuchos::RCP<
const Map<
typename CrsMatrixType::local_ordinal_type,
3353 typename CrsMatrixType::global_ordinal_type,
3354 typename CrsMatrixType::node_type> >&
rangeMap,
3355 const Teuchos::RCP<Teuchos::ParameterList>&
params);
3359 template<
class CrsMatrixType>
3360 friend Teuchos::RCP<CrsMatrixType>
3362 const Export<
typename CrsMatrixType::local_ordinal_type,
3363 typename CrsMatrixType::global_ordinal_type,
3364 typename CrsMatrixType::node_type>&
exporter,
3365 const Teuchos::RCP<
const Map<
typename CrsMatrixType::local_ordinal_type,
3366 typename CrsMatrixType::global_ordinal_type,
3367 typename CrsMatrixType::node_type> >& domainMap,
3368 const Teuchos::RCP<
const Map<
typename CrsMatrixType::local_ordinal_type,
3369 typename CrsMatrixType::global_ordinal_type,
3370 typename CrsMatrixType::node_type> >&
rangeMap,
3371 const Teuchos::RCP<Teuchos::ParameterList>&
params);
3374 template<
class CrsMatrixType>
3375 friend Teuchos::RCP<CrsMatrixType>
3377 const Export<
typename CrsMatrixType::local_ordinal_type,
3378 typename CrsMatrixType::global_ordinal_type,
3380 const Export<
typename CrsMatrixType::local_ordinal_type,
3381 typename CrsMatrixType::global_ordinal_type,
3383 const Teuchos::RCP<
const Map<
typename CrsMatrixType::local_ordinal_type,
3384 typename CrsMatrixType::global_ordinal_type,
3385 typename CrsMatrixType::node_type> >& domainMap,
3386 const Teuchos::RCP<
const Map<
typename CrsMatrixType::local_ordinal_type,
3387 typename CrsMatrixType::global_ordinal_type,
3388 typename CrsMatrixType::node_type> >&
rangeMap,
3389 const Teuchos::RCP<Teuchos::ParameterList>&
params);
3410 const Teuchos::RCP<const map_type>& domainMap,
3411 const Teuchos::RCP<const map_type>&
rangeMap,
3412 const Teuchos::RCP<Teuchos::ParameterList>&
params = Teuchos::null)
const;
3433 const Teuchos::RCP<const map_type>& domainMap,
3434 const Teuchos::RCP<const map_type>&
rangeMap,
3435 const Teuchos::RCP<Teuchos::ParameterList>&
params)
const;
3456 const Teuchos::RCP<const map_type>& domainMap = Teuchos::null,
3457 const Teuchos::RCP<const map_type>&
rangeMap = Teuchos::null,
3458 const Teuchos::RCP<Teuchos::ParameterList>&
params = Teuchos::null)
const;
3479 const Teuchos::RCP<const map_type>& domainMap,
3480 const Teuchos::RCP<const map_type>&
rangeMap,
3481 const Teuchos::RCP<Teuchos::ParameterList>&
params)
const;
3507 const ::Tpetra::Details::Transfer<LocalOrdinal, GlobalOrdinal, Node>&
rowTransfer,
3508 const Teuchos::RCP<const ::Tpetra::Details::Transfer<LocalOrdinal, GlobalOrdinal, Node> > &
domainTransfer,
3509 const Teuchos::RCP<const map_type>& domainMap = Teuchos::null,
3510 const Teuchos::RCP<const map_type>&
rangeMap = Teuchos::null,
3511 const Teuchos::RCP<Teuchos::ParameterList>&
params = Teuchos::null)
const;
3543 insertGlobalValuesFiltered(
3545 const Teuchos::ArrayView<const GlobalOrdinal>& indices,
3546 const Teuchos::ArrayView<const Scalar>&
values,
3552 insertGlobalValuesFilteredChecked(
3554 const Teuchos::ArrayView<const GlobalOrdinal>& indices,
3555 const Teuchos::ArrayView<const Scalar>&
values,
3556 const char*
const prefix,
3558 const bool verbose);
3572 combineGlobalValues(
3574 const Teuchos::ArrayView<const GlobalOrdinal>&
columnIndices,
3575 const Teuchos::ArrayView<const Scalar>&
values,
3577 const char*
const prefix,
3579 const bool verbose);
3608 const char*
const prefix,
3610 const bool verbose);
3623 template<
class BinaryFunction>
3626 const Teuchos::ArrayView<const GlobalOrdinal>& indices,
3627 const Teuchos::ArrayView<const Scalar>&
values,
3629 const bool atomic = useAtomicUpdatesByDefault)
3635 const LO
numInputEnt =
static_cast<LO
> (indices.size ());
3637 return Teuchos::OrdinalTraits<LO>::invalid ();
3640 const GO*
const inputCols = indices.getRawPtr ();
3641 const IST*
const inputVals =
3642 reinterpret_cast<const IST*
> (values.getRawPtr ());
3643 return this->transformGlobalValues (globalRow, numInputEnt, inputVals,
3644 inputCols, f, atomic);
3654 insertNonownedGlobalValues (
const GlobalOrdinal globalRow,
3655 const Teuchos::ArrayView<const GlobalOrdinal>& indices,
3656 const Teuchos::ArrayView<const Scalar>& values);
3703 const typename crs_graph_type::SLocalGlobalViews& newInds,
3704 const Teuchos::ArrayView<impl_scalar_type>& oldRowVals,
3705 const Teuchos::ArrayView<const impl_scalar_type>& newRowVals,
3706 const ELocalGlobal lg,
3707 const ELocalGlobal I);
3710 typedef DistObject<char, LocalOrdinal, GlobalOrdinal, Node> dist_object_type;
3714 typedef Teuchos::OrdinalTraits<LocalOrdinal> OTL;
3715 typedef Kokkos::Details::ArithTraits<impl_scalar_type> STS;
3716 typedef Kokkos::Details::ArithTraits<mag_type> STM;
3717 typedef MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node> MV;
3718 typedef Vector<Scalar, LocalOrdinal, GlobalOrdinal, Node> V;
3722 enum GraphAllocationStatus {
3723 GraphAlreadyAllocated,
3724 GraphNotYetAllocated
3747 const bool verbose);
3835 const bool force =
false)
const;
3860 const bool force =
false)
const;
3873 const Teuchos::ETransp
mode,
3881 typename values_dualv_type::t_host::const_type
3886 typename values_dualv_type::t_dev::const_type
3891 typename values_dualv_type::t_host
3896 typename values_dualv_type::t_dev
3942 Teuchos::RCP<const Graph> staticGraph_;
3943 Teuchos::RCP< Graph> myGraph_;
3957 Details::STORAGE_1D_UNPACKED;
3989 std::map<GlobalOrdinal, std::pair<Teuchos::Array<GlobalOrdinal>,
3999 struct pack_functor {
4005 typedef typename DestOffsetViewType::non_const_value_type scalar_index_type;
4013 src_offset_ (src_offset),
4019 scalar_index_type
srcPos = src_offset_(row);
4020 const scalar_index_type
dstEnd = dst_offset_(row+1);
4021 scalar_index_type
dstPos = dst_offset_(row);
4033 template<
class Scalar,
4035 class GlobalOrdinal,
4037 Teuchos::RCP<CrsMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node> >
4041 const Teuchos::RCP<Teuchos::ParameterList>&
params = Teuchos::null)
4049 template<
class CrsMatrixType>
4050 Teuchos::RCP<CrsMatrixType>
4052 const Import<
typename CrsMatrixType::local_ordinal_type,
4053 typename CrsMatrixType::global_ordinal_type,
4054 typename CrsMatrixType::node_type>&
importer,
4055 const Teuchos::RCP<
const Map<
typename CrsMatrixType::local_ordinal_type,
4056 typename CrsMatrixType::global_ordinal_type,
4057 typename CrsMatrixType::node_type> >& domainMap,
4058 const Teuchos::RCP<
const Map<
typename CrsMatrixType::local_ordinal_type,
4059 typename CrsMatrixType::global_ordinal_type,
4060 typename CrsMatrixType::node_type> >&
rangeMap,
4061 const Teuchos::RCP<Teuchos::ParameterList>&
params)
4068 template<
class CrsMatrixType>
4069 Teuchos::RCP<CrsMatrixType>
4071 const Import<
typename CrsMatrixType::local_ordinal_type,
4072 typename CrsMatrixType::global_ordinal_type,
4074 const Import<
typename CrsMatrixType::local_ordinal_type,
4075 typename CrsMatrixType::global_ordinal_type,
4077 const Teuchos::RCP<
const Map<
typename CrsMatrixType::local_ordinal_type,
4078 typename CrsMatrixType::global_ordinal_type,
4079 typename CrsMatrixType::node_type> >& domainMap,
4080 const Teuchos::RCP<
const Map<
typename CrsMatrixType::local_ordinal_type,
4081 typename CrsMatrixType::global_ordinal_type,
4082 typename CrsMatrixType::node_type> >&
rangeMap,
4083 const Teuchos::RCP<Teuchos::ParameterList>&
params)
4090 template<
class CrsMatrixType>
4091 Teuchos::RCP<CrsMatrixType>
4093 const Export<
typename CrsMatrixType::local_ordinal_type,
4094 typename CrsMatrixType::global_ordinal_type,
4095 typename CrsMatrixType::node_type>&
exporter,
4096 const Teuchos::RCP<
const Map<
typename CrsMatrixType::local_ordinal_type,
4097 typename CrsMatrixType::global_ordinal_type,
4098 typename CrsMatrixType::node_type> >& domainMap,
4099 const Teuchos::RCP<
const Map<
typename CrsMatrixType::local_ordinal_type,
4100 typename CrsMatrixType::global_ordinal_type,
4101 typename CrsMatrixType::node_type> >&
rangeMap,
4102 const Teuchos::RCP<Teuchos::ParameterList>&
params)
4109 template<
class CrsMatrixType>
4110 Teuchos::RCP<CrsMatrixType>
4112 const Export<
typename CrsMatrixType::local_ordinal_type,
4113 typename CrsMatrixType::global_ordinal_type,
4115 const Export<
typename CrsMatrixType::local_ordinal_type,
4116 typename CrsMatrixType::global_ordinal_type,
4118 const Teuchos::RCP<
const Map<
typename CrsMatrixType::local_ordinal_type,
4119 typename CrsMatrixType::global_ordinal_type,
4120 typename CrsMatrixType::node_type> >& domainMap,
4121 const Teuchos::RCP<
const Map<
typename CrsMatrixType::local_ordinal_type,
4122 typename CrsMatrixType::global_ordinal_type,
4123 typename CrsMatrixType::node_type> >&
rangeMap,
4124 const Teuchos::RCP<Teuchos::ParameterList>&
params)
4137 template<
class CrsMatrixType>
4140 typename Teuchos::ScalarTraits<typename CrsMatrixType::scalar_type>::magnitudeType
const &
threshold =
4141 Teuchos::ScalarTraits<typename CrsMatrixType::scalar_type>::magnitude( Teuchos::ScalarTraits<typename CrsMatrixType::scalar_type>::zero() ))
Forward declaration of Tpetra::CrsMatrix.
Declaration and generic definition of traits class that tells Tpetra::CrsMatrix how to pack and unpac...
A distributed graph accessed by rows (adjacency lists) and stored sparsely.
Kokkos::StaticCrsGraph< local_ordinal_type, Kokkos::LayoutLeft, device_type, void, size_t > local_graph_device_type
The type of the part of the sparse graph on each MPI process.
typename local_graph_device_type::HostMirror local_graph_host_type
The type of the part of the sparse graph on each MPI process.
Struct that holds views of the contents of a CrsMatrix.
Sparse matrix that presents a row-oriented interface that lets users read or modify entries.
virtual void insertGlobalValuesImpl(crs_graph_type &graph, RowInfo &rowInfo, const GlobalOrdinal gblColInds[], const impl_scalar_type vals[], const size_t numInputEnt)
Common implementation detail of insertGlobalValues and insertGlobalValuesFiltered.
bool isGloballyIndexed() const override
Whether the matrix is globally indexed on the calling process.
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel=Teuchos::Describable::verbLevel_default) const override
Print this object with the given verbosity level to the given output stream.
std::map< GlobalOrdinal, std::pair< Teuchos::Array< GlobalOrdinal >, Teuchos::Array< Scalar > > > nonlocals_
Nonlocal data added using insertGlobalValues().
void localApply(const MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &X, MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &Y, const Teuchos::ETransp mode=Teuchos::NO_TRANS, const Scalar &alpha=Teuchos::ScalarTraits< Scalar >::one(), const Scalar &beta=Teuchos::ScalarTraits< Scalar >::zero()) const
Compute the local part of a sparse matrix-(Multi)Vector multiply.
ordinal_rowptrs_type ordinalRowptrs
local_ordinal typed version of local matrix's rowptrs. This allows the LocalCrsMatrixOperator to have...
void unpackAndCombine(const Kokkos::DualView< const local_ordinal_type *, buffer_device_type > &importLIDs, Kokkos::DualView< char *, buffer_device_type > imports, Kokkos::DualView< size_t *, buffer_device_type > numPacketsPerLID, const size_t constantNumPackets, const CombineMode CM) override
Unpack the imported column indices and values, and combine into matrix.
CrsMatrix & operator=(const CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &)=default
Copy assignment.
void replaceRangeMap(const Teuchos::RCP< const map_type > &newRangeMap)
Replace the current range Map with the given objects.
Details::EStorageStatus storageStatus_
Status of the matrix's storage, when not in a fill-complete state.
typename device_type::execution_space execution_space
The Kokkos execution space.
void applyNonTranspose(const MV &X_in, MV &Y_in, Scalar alpha, Scalar beta) const
Special case of apply() for mode == Teuchos::NO_TRANS.
void importAndFillComplete(Teuchos::RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &destMatrix, const import_type &importer, const Teuchos::RCP< const map_type > &domainMap, const Teuchos::RCP< const map_type > &rangeMap, const Teuchos::RCP< Teuchos::ParameterList > ¶ms=Teuchos::null) const
Import from this to the given destination matrix, and make the result fill complete.
CrsGraph< LocalOrdinal, GlobalOrdinal, Node > crs_graph_type
The CrsGraph specialization suitable for this CrsMatrix specialization.
Node node_type
This class' Kokkos Node type.
local_ordinal_type replaceGlobalValues(const global_ordinal_type globalRow, const Kokkos::View< const global_ordinal_type *, Kokkos::AnonymousSpace > &inputInds, const Kokkos::View< const impl_scalar_type *, Kokkos::AnonymousSpace > &inputVals)
Replace one or more entries' values, using global indices.
Teuchos::RCP< CrsMatrixType > importAndFillCompleteCrsMatrix(const Teuchos::RCP< const CrsMatrixType > &sourceMatrix, const Import< typename CrsMatrixType::local_ordinal_type, typename CrsMatrixType::global_ordinal_type, typename CrsMatrixType::node_type > &rowImporter, const Import< typename CrsMatrixType::local_ordinal_type, typename CrsMatrixType::global_ordinal_type, typename CrsMatrixType::node_type > &domainImporter, const Teuchos::RCP< const Map< typename CrsMatrixType::local_ordinal_type, typename CrsMatrixType::global_ordinal_type, typename CrsMatrixType::node_type > > &domainMap, const Teuchos::RCP< const Map< typename CrsMatrixType::local_ordinal_type, typename CrsMatrixType::global_ordinal_type, typename CrsMatrixType::node_type > > &rangeMap, const Teuchos::RCP< Teuchos::ParameterList > ¶ms)
Nonmember CrsMatrix constructor that fuses Import and fillComplete().
bool haveGlobalConstants() const
Returns true if globalConstants have been computed; false otherwise.
size_t getGlobalMaxNumRowEntries() const override
Maximum number of entries in any row of the matrix, over all processes in the matrix's communicator.
void getGlobalRowCopy(GlobalOrdinal GlobalRow, nonconst_global_inds_host_view_type &Indices, nonconst_values_host_view_type &Values, size_t &NumEntries) const override
Fill given arrays with a deep copy of the locally owned entries of the matrix in a given row,...
size_t getNumEntriesInGlobalRow(GlobalOrdinal globalRow) const override
Number of entries in the sparse matrix in the given global row, on the calling (MPI) process.
void scale(const Scalar &alpha)
Scale the matrix's values: this := alpha*this.
GlobalOrdinal global_ordinal_type
The type of each global index in the matrix.
void sortAndMergeIndicesAndValues(const bool sorted, const bool merged)
Sort and merge duplicate local column indices in all rows on the calling process, along with their co...
void packNew(const Kokkos::DualView< const local_ordinal_type *, buffer_device_type > &exportLIDs, Kokkos::DualView< char *, buffer_device_type > &exports, const Kokkos::DualView< size_t *, buffer_device_type > &numPacketsPerLID, size_t &constantNumPackets) const
Pack this object's data for an Import or Export.
size_t getLocalNumCols() const override
The number of columns connected to the locally owned rows of this matrix.
Teuchos::RCP< const map_type > getDomainMap() const override
The domain Map of this matrix.
bool hasColMap() const override
Whether the matrix has a well-defined column Map.
row_ptrs_host_view_type getLocalRowPtrsHost() const
Get a host view of the CRS packed row pointers.
Teuchos::RCP< CrsMatrix< T, LocalOrdinal, GlobalOrdinal, Node > > convert() const
Return another CrsMatrix with the same entries, but converted to a different Scalar type T.
values_dualv_type::t_dev getValuesViewDeviceNonConst(const RowInfo &rowinfo)
Get a non-const Device view of the locally owned values row myRow, such that rowinfo = getRowInfo(myR...
void expertStaticFillComplete(const Teuchos::RCP< const map_type > &domainMap, const Teuchos::RCP< const map_type > &rangeMap, const Teuchos::RCP< const import_type > &importer=Teuchos::null, const Teuchos::RCP< const export_type > &exporter=Teuchos::null, const Teuchos::RCP< Teuchos::ParameterList > ¶ms=Teuchos::null)
Perform a fillComplete on a matrix that already has data.
std::shared_ptr< local_multiply_op_type > getLocalMultiplyOperator() const
The local sparse matrix operator (a wrapper of getLocalMatrixDevice() that supports local matrix-vect...
LocalOrdinal transformLocalValues(const LocalOrdinal lclRow, const typename UnmanagedView< LocalIndicesViewType >::type &inputInds, const typename UnmanagedView< ImplScalarViewType >::type &inputVals, BinaryFunction f, const bool atomic=useAtomicUpdatesByDefault)
Transform CrsMatrix entries in place, using local indices to select the entries in the row to transfo...
local_ordinal_type sumIntoLocalValues(const local_ordinal_type localRow, const Kokkos::View< const local_ordinal_type *, Kokkos::AnonymousSpace > &inputInds, const Kokkos::View< const impl_scalar_type *, Kokkos::AnonymousSpace > &inputVals, const bool atomic=useAtomicUpdatesByDefault)
Sum into one or more sparse matrix entries, using local row and column indices.
virtual Teuchos::RCP< RowMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > add(const Scalar &alpha, const RowMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &A, const Scalar &beta, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &domainMap, const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &rangeMap, const Teuchos::RCP< Teuchos::ParameterList > ¶ms) const override
Implementation of RowMatrix::add: return alpha*A + beta*this.
CrsMatrix(CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &&)=default
Move constructor.
friend void batchedApply(const MatrixArray &Matrices, const typename std::remove_pointer< typename MultiVectorArray::value_type >::type &X, MultiVectorArray &Y, typename std::remove_pointer< typename MatrixArray::value_type >::type::scalar_type alpha, typename std::remove_pointer< typename MatrixArray::value_type >::type::scalar_type beta, Teuchos::RCP< Teuchos::ParameterList > params)
Does multiply matrix apply() calls with a single X vector.
DistObject< Scalar, LocalOrdinal, GlobalOrdinal, Node >::buffer_device_type buffer_device_type
Kokkos::Device specialization for communication buffers.
void applyTranspose(const MV &X_in, MV &Y_in, const Teuchos::ETransp mode, Scalar alpha, Scalar beta) const
Special case of apply() for mode != Teuchos::NO_TRANS.
size_t getNumEntriesInLocalRow(local_ordinal_type localRow) const override
Number of entries in the sparse matrix in the given local row, on the calling (MPI) process.
Teuchos::RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > createCrsMatrix(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &map, const size_t maxNumEntriesPerRow=0, const Teuchos::RCP< Teuchos::ParameterList > ¶ms=Teuchos::null)
Create an empty CrsMatrix given a row map and a single integer upper bound on the number of stored en...
Teuchos::RCP< MV > exportMV_
Row Map MultiVector used in apply().
Teuchos::RCP< const Teuchos::Comm< int > > getComm() const override
The communicator over which the matrix is distributed.
bool isFillActive() const
Whether the matrix is not fill complete.
void replaceDomainMapAndImporter(const Teuchos::RCP< const map_type > &newDomainMap, Teuchos::RCP< const import_type > &newImporter)
Replace the current domain Map and Import with the given objects.
local_matrix_host_type::values_type getLocalValuesHost(Access::ReadWriteStruct s)
Get the Kokkos local values on host, read write.
LocalOrdinal sumIntoGlobalValues(const GlobalOrdinal globalRow, const Teuchos::ArrayView< const GlobalOrdinal > &cols, const Teuchos::ArrayView< const Scalar > &vals, const bool atomic=useAtomicUpdatesByDefault)
Sum into one or more sparse matrix entries, using global indices.
virtual ~CrsMatrix()=default
Destructor (virtual for memory safety of derived classes).
void apply(const MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &X, MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &Y, Teuchos::ETransp mode=Teuchos::NO_TRANS, Scalar alpha=Teuchos::ScalarTraits< Scalar >::one(), Scalar beta=Teuchos::ScalarTraits< Scalar >::zero()) const override
Compute a sparse matrix-MultiVector multiply.
mag_type getFrobeniusNorm() const override
Compute and return the Frobenius norm of the matrix.
void insertLocalValues(const LocalOrdinal localRow, const Teuchos::ArrayView< const LocalOrdinal > &cols, const Teuchos::ArrayView< const Scalar > &vals, const CombineMode CM=ADD)
Insert one or more entries into the matrix, using local column indices.
global_size_t getGlobalNumCols() const override
The number of global columns in the matrix.
Teuchos::RCP< const map_type > getRangeMap() const override
The range Map of this matrix.
Teuchos::RCP< MV > importMV_
Column Map MultiVector used in apply().
void allocateValues(ELocalGlobal lg, GraphAllocationStatus gas, const bool verbose)
Allocate values (and optionally indices) using the Node.
size_t getLocalNumEntries() const override
The local number of entries in this matrix.
typename Node::device_type device_type
The Kokkos device type.
bool fillComplete_
Whether the matrix is fill complete.
virtual LocalOrdinal sumIntoGlobalValuesImpl(impl_scalar_type rowVals[], const crs_graph_type &graph, const RowInfo &rowInfo, const GlobalOrdinal inds[], const impl_scalar_type newVals[], const LocalOrdinal numElts, const bool atomic=useAtomicUpdatesByDefault)
Implementation detail of sumIntoGlobalValues.
void replaceDomainMap(const Teuchos::RCP< const map_type > &newDomainMap)
Replace the current domain Map with the given objects.
void removeCrsMatrixZeros(CrsMatrixType &matrix, typename Teuchos::ScalarTraits< typename CrsMatrixType::scalar_type >::magnitudeType const &threshold=Teuchos::ScalarTraits< typename CrsMatrixType::scalar_type >::magnitude(Teuchos::ScalarTraits< typename CrsMatrixType::scalar_type >::zero()))
Remove zero entries from a matrix.
std::string description() const override
A one-line description of this object.
void reindexColumns(crs_graph_type *const graph, const Teuchos::RCP< const map_type > &newColMap, const Teuchos::RCP< const import_type > &newImport=Teuchos::null, const bool sortEachRow=true)
Reindex the column indices in place, and replace the column Map. Optionally, replace the Import objec...
Teuchos::RCP< MV > getColumnMapMultiVector(const MV &X_domainMap, const bool force=false) const
Create a (or fetch a cached) column Map MultiVector.
void replaceRangeMapAndExporter(const Teuchos::RCP< const map_type > &newRangeMap, Teuchos::RCP< const export_type > &newExporter)
Replace the current Range Map and Export with the given objects.
size_t getLocalMaxNumRowEntries() const override
Maximum number of entries in any row of the matrix, on this process.
void replaceColMap(const Teuchos::RCP< const map_type > &newColMap)
Replace the matrix's column Map with the given Map.
global_size_t getGlobalNumRows() const override
Number of global elements in the row map of this matrix.
local_matrix_host_type::values_type::const_type getLocalValuesHost(Access::ReadOnlyStruct s) const
Get the Kokkos local values on host, read only.
void globalAssemble()
Communicate nonlocal contributions to other processes.
void checkInternalState() const
Check that this object's state is sane; throw if it's not.
bool hasTransposeApply() const override
Whether apply() allows applying the transpose or conjugate transpose.
GlobalOrdinal getIndexBase() const override
The index base for global indices for this matrix.
Scalar scalar_type
The type of each entry in the matrix.
LocalOrdinal local_ordinal_type
The type of each local index in the matrix.
void getLocalDiagCopy(Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &diag) const override
Get a constant, nonpersisting view of a row of this matrix, using local row and column indices,...
void setAllToScalar(const Scalar &alpha)
Set all matrix entries equal to alpha.
void fillLocalGraphAndMatrix(const Teuchos::RCP< Teuchos::ParameterList > ¶ms)
Fill data into the local graph and matrix.
row_ptrs_device_view_type getLocalRowPtrsDevice() const
Get a device view of the CRS packed row pointers.
Export< LocalOrdinal, GlobalOrdinal, Node > export_type
The Export specialization suitable for this CrsMatrix specialization.
local_inds_host_view_type getLocalIndicesHost() const
Get a host view of the CRS packed column indicies.
local_matrix_device_type getLocalMatrixDevice() const
The local sparse matrix.
void getLocalRowView(LocalOrdinal LocalRow, local_inds_host_view_type &indices, values_host_view_type &values) const override
Get a constant view of a row of this matrix, using local row and column indices.
Teuchos::RCP< const map_type > getColMap() const override
The Map that describes the column distribution in this matrix.
void insertGlobalValues(const GlobalOrdinal globalRow, const Teuchos::ArrayView< const GlobalOrdinal > &cols, const Teuchos::ArrayView< const Scalar > &vals)
Insert one or more entries into the matrix, using global column indices.
typename Kokkos::ArithTraits< impl_scalar_type >::mag_type mag_type
Type of a norm result.
void fillComplete(const Teuchos::RCP< const map_type > &domainMap, const Teuchos::RCP< const map_type > &rangeMap, const Teuchos::RCP< Teuchos::ParameterList > ¶ms=Teuchos::null)
Tell the matrix that you are done changing its structure or values, and that you are ready to do comp...
typename crs_graph_type::local_graph_device_type local_graph_device_type
The part of the sparse matrix's graph on each MPI process.
void getGlobalRowView(GlobalOrdinal GlobalRow, global_inds_host_view_type &indices, values_host_view_type &values) const override
Get a constant, nonpersisting view of a row of this matrix, using global row and column indices.
void setAllValues(const typename local_graph_device_type::row_map_type &ptr, const typename local_graph_device_type::entries_type::non_const_type &ind, const typename local_matrix_device_type::values_type &val)
Set the local matrix using three (compressed sparse row) arrays.
Teuchos::RCP< const RowGraph< LocalOrdinal, GlobalOrdinal, Node > > getGraph() const override
This matrix's graph, as a RowGraph.
virtual void removeEmptyProcessesInPlace(const Teuchos::RCP< const map_type > &newMap) override
Remove processes owning zero rows from the Maps and their communicator.
local_matrix_device_type::values_type getLocalValuesDevice(Access::ReadWriteStruct s)
Get the Kokkos local values on device, read write.
virtual LocalOrdinal sumIntoLocalValuesImpl(impl_scalar_type rowVals[], const crs_graph_type &graph, const RowInfo &rowInfo, const LocalOrdinal inds[], const impl_scalar_type newVals[], const LocalOrdinal numElts, const bool atomic=useAtomicUpdatesByDefault)
Implementation detail of sumIntoLocalValues.
void swap(CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &matrix)
Swaps the data from *this with the data and maps from crsMatrix.
bool isStaticGraph() const
Indicates that the graph is static, so that new entries cannot be added to this matrix.
global_size_t getGlobalNumEntries() const override
The global number of entries in this matrix.
virtual LocalOrdinal replaceLocalValuesImpl(impl_scalar_type rowVals[], const crs_graph_type &graph, const RowInfo &rowInfo, const LocalOrdinal inds[], const impl_scalar_type newVals[], const LocalOrdinal numElts)
Implementation detail of replaceLocalValues.
Teuchos::RCP< CrsMatrixType > importAndFillCompleteCrsMatrix(const Teuchos::RCP< const CrsMatrixType > &sourceMatrix, const Import< typename CrsMatrixType::local_ordinal_type, typename CrsMatrixType::global_ordinal_type, typename CrsMatrixType::node_type > &importer, const Teuchos::RCP< const Map< typename CrsMatrixType::local_ordinal_type, typename CrsMatrixType::global_ordinal_type, typename CrsMatrixType::node_type > > &domainMap=Teuchos::null, const Teuchos::RCP< const Map< typename CrsMatrixType::local_ordinal_type, typename CrsMatrixType::global_ordinal_type, typename CrsMatrixType::node_type > > &rangeMap=Teuchos::null, const Teuchos::RCP< Teuchos::ParameterList > ¶ms=Teuchos::null)
Nonmember CrsMatrix constructor that fuses Import and fillComplete().
KokkosSparse::CrsMatrix< impl_scalar_type, local_ordinal_type, device_type, void, typename local_graph_device_type::size_type > local_matrix_device_type
The specialization of Kokkos::CrsMatrix that represents the part of the sparse matrix on each MPI pro...
size_t getLocalNumRows() const override
The number of matrix rows owned by the calling process.
bool isFillComplete() const override
Whether the matrix is fill complete.
LocalOrdinal transformGlobalValues(const GlobalOrdinal gblRow, const Kokkos::View< const GlobalOrdinal *, InputMemorySpace, Kokkos::MemoryUnmanaged > &inputInds, const Kokkos::View< const impl_scalar_type *, InputMemorySpace, Kokkos::MemoryUnmanaged > &inputVals, BinaryFunction f, const bool atomic=useAtomicUpdatesByDefault)
Transform CrsMatrix entries in place, using global indices to select the entries in the row to transf...
virtual bool checkSizes(const SrcDistObject &source) override
Compare the source and target (this) objects for compatibility.
Teuchos::RCP< const map_type > getRowMap() const override
The Map that describes the row distribution in this matrix.
typename device_type::memory_space memory_space
The Kokkos memory space.
local_matrix_device_type::values_type getLocalValuesDevice(Access::OverwriteAllStruct s)
Get the Kokkos local values on device, overwrite all.
local_ordinal_type replaceLocalValues(const local_ordinal_type localRow, const Kokkos::View< const local_ordinal_type *, Kokkos::AnonymousSpace > &inputInds, const Kokkos::View< const impl_scalar_type *, Kokkos::AnonymousSpace > &inputVals)
Replace one or more entries' values, using local row and column indices.
void exportAndFillComplete(Teuchos::RCP< CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &destMatrix, const export_type &exporter, const Teuchos::RCP< const map_type > &domainMap=Teuchos::null, const Teuchos::RCP< const map_type > &rangeMap=Teuchos::null, const Teuchos::RCP< Teuchos::ParameterList > ¶ms=Teuchos::null) const
Export from this to the given destination matrix, and make the result fill complete.
local_matrix_host_type::values_type getLocalValuesHost(Access::OverwriteAllStruct s)
Get the Kokkos local values on host, overwrite all.
values_dualv_type::t_host::const_type getValuesViewHost(const RowInfo &rowinfo) const
Get a const Host view of the locally owned values row myRow, such that rowinfo = getRowInfo(myRow).
CrsMatrix(const CrsMatrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &)=default
Copy constructor.
bool isLocallyIndexed() const override
Whether the matrix is locally indexed on the calling process.
typename row_matrix_type::impl_scalar_type impl_scalar_type
The type used internally in place of Scalar.
Teuchos::RCP< MV > getRowMapMultiVector(const MV &Y_rangeMap, const bool force=false) const
Create a (or fetch a cached) row Map MultiVector.
local_matrix_device_type::values_type::const_type getLocalValuesDevice(Access::ReadOnlyStruct s) const
Get the Kokkos local values on device, read only.
virtual LocalOrdinal replaceGlobalValuesImpl(impl_scalar_type rowVals[], const crs_graph_type &graph, const RowInfo &rowInfo, const GlobalOrdinal inds[], const impl_scalar_type newVals[], const LocalOrdinal numElts)
Implementation detail of replaceGlobalValues.
values_dualv_type::t_host getValuesViewHostNonConst(const RowInfo &rowinfo)
Get a non-const Host view of the locally owned values row myRow, such that rowinfo = getRowInfo(myRow...
void resumeFill(const Teuchos::RCP< Teuchos::ParameterList > ¶ms=Teuchos::null)
Resume operations that may change the values or structure of the matrix.
void getLocalDiagOffsets(Teuchos::ArrayRCP< size_t > &offsets) const
Get offsets of the diagonal entries in the matrix.
void fillLocalMatrix(const Teuchos::RCP< Teuchos::ParameterList > ¶ms)
Fill data into the local matrix.
void rightScale(const Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &x) override
Scale the matrix on the right with the given Vector.
Teuchos::RCP< CrsMatrixType > exportAndFillCompleteCrsMatrix(const Teuchos::RCP< const CrsMatrixType > &sourceMatrix, const Export< typename CrsMatrixType::local_ordinal_type, typename CrsMatrixType::global_ordinal_type, typename CrsMatrixType::node_type > &rowExporter, const Export< typename CrsMatrixType::local_ordinal_type, typename CrsMatrixType::global_ordinal_type, typename CrsMatrixType::node_type > &domainExporter, const Teuchos::RCP< const Map< typename CrsMatrixType::local_ordinal_type, typename CrsMatrixType::global_ordinal_type, typename CrsMatrixType::node_type > > &domainMap, const Teuchos::RCP< const Map< typename CrsMatrixType::local_ordinal_type, typename CrsMatrixType::global_ordinal_type, typename CrsMatrixType::node_type > > &rangeMap, const Teuchos::RCP< Teuchos::ParameterList > ¶ms)
Nonmember CrsMatrix constructor that fuses Export and fillComplete().
bool isStorageOptimized() const
Returns true if storage has been optimized.
Import< LocalOrdinal, GlobalOrdinal, Node > import_type
The Import specialization suitable for this CrsMatrix specialization.
void getLocalRowCopy(LocalOrdinal LocalRow, nonconst_local_inds_host_view_type &Indices, nonconst_values_host_view_type &Values, size_t &NumEntries) const override
Fill given arrays with a deep copy of the locally owned entries of the matrix in a given row,...
Teuchos::RCP< CrsMatrixType > exportAndFillCompleteCrsMatrix(const Teuchos::RCP< const CrsMatrixType > &sourceMatrix, const Export< typename CrsMatrixType::local_ordinal_type, typename CrsMatrixType::global_ordinal_type, typename CrsMatrixType::node_type > &exporter, const Teuchos::RCP< const Map< typename CrsMatrixType::local_ordinal_type, typename CrsMatrixType::global_ordinal_type, typename CrsMatrixType::node_type > > &domainMap=Teuchos::null, const Teuchos::RCP< const Map< typename CrsMatrixType::local_ordinal_type, typename CrsMatrixType::global_ordinal_type, typename CrsMatrixType::node_type > > &rangeMap=Teuchos::null, const Teuchos::RCP< Teuchos::ParameterList > ¶ms=Teuchos::null)
Nonmember CrsMatrix constructor that fuses Export and fillComplete().
values_dualv_type::t_dev::const_type getValuesViewDevice(const RowInfo &rowinfo) const
Get a const Device view of the locally owned values row myRow, such that rowinfo = getRowInfo(myRow).
void leftScale(const Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &x) override
Scale the matrix on the left with the given Vector.
virtual bool supportsRowViews() const override
Return true if getLocalRowView() and getGlobalRowView() are valid for this object.
local_inds_device_view_type getLocalIndicesDevice() const
Get a device_view of the CRS packed column indicies.
static size_t mergeRowIndicesAndValues(size_t rowLen, local_ordinal_type *cols, impl_scalar_type *vals)
Merge duplicate row indices in the given row, along with their corresponding values.
Teuchos::RCP< const crs_graph_type > getCrsGraph() const
This matrix's graph, as a CrsGraph.
Keep track of how much more space a CrsGraph or CrsMatrix needs, when the graph or matrix is the targ...
Base class for distributed Tpetra objects that support data redistribution.
Communication plan for data redistribution from a (possibly) multiply-owned to a uniquely-owned distr...
Communication plan for data redistribution from a uniquely-owned to a (possibly) multiply-owned distr...
Abstract interface for local operators (e.g., matrices and preconditioners).
A parallel distribution of indices over processes.
One or more distributed dense vectors.
A read-only, row-oriented interface to a sparse matrix.
typename Kokkos::ArithTraits< Scalar >::val_type impl_scalar_type
The type used internally in place of Scalar.
Abstract base class for objects that can be the source of an Import or Export operation.
Implementation details of Tpetra.
EStorageStatus
Status of the graph's or matrix's storage, when not in a fill-complete state.
void residual(const Operator< SC, LO, GO, NO > &A, const MultiVector< SC, LO, GO, NO > &X, const MultiVector< SC, LO, GO, NO > &B, MultiVector< SC, LO, GO, NO > &R)
Computes R = B - A * X.
Namespace Tpetra contains the class and methods constituting the Tpetra library.
Teuchos::RCP< CrsMatrixType > exportAndFillCompleteCrsMatrix(const Teuchos::RCP< const CrsMatrixType > &sourceMatrix, const Export< typename CrsMatrixType::local_ordinal_type, typename CrsMatrixType::global_ordinal_type, typename CrsMatrixType::node_type > &exporter, const Teuchos::RCP< const Map< typename CrsMatrixType::local_ordinal_type, typename CrsMatrixType::global_ordinal_type, typename CrsMatrixType::node_type > > &domainMap=Teuchos::null, const Teuchos::RCP< const Map< typename CrsMatrixType::local_ordinal_type, typename CrsMatrixType::global_ordinal_type, typename CrsMatrixType::node_type > > &rangeMap=Teuchos::null, const Teuchos::RCP< Teuchos::ParameterList > ¶ms=Teuchos::null)
Nonmember CrsMatrix constructor that fuses Export and fillComplete().
size_t global_size_t
Global size_t object.
Teuchos::RCP< CrsMatrixType > importAndFillCompleteCrsMatrix(const Teuchos::RCP< const CrsMatrixType > &sourceMatrix, const Import< typename CrsMatrixType::local_ordinal_type, typename CrsMatrixType::global_ordinal_type, typename CrsMatrixType::node_type > &importer, const Teuchos::RCP< const Map< typename CrsMatrixType::local_ordinal_type, typename CrsMatrixType::global_ordinal_type, typename CrsMatrixType::node_type > > &domainMap=Teuchos::null, const Teuchos::RCP< const Map< typename CrsMatrixType::local_ordinal_type, typename CrsMatrixType::global_ordinal_type, typename CrsMatrixType::node_type > > &rangeMap=Teuchos::null, const Teuchos::RCP< Teuchos::ParameterList > ¶ms=Teuchos::null)
Nonmember CrsMatrix constructor that fuses Import and fillComplete().
CombineMode
Rule for combining data in an Import or Export.
Allocation information for a locally owned row in a CrsGraph or CrsMatrix.