10#ifndef TPETRA_CRSGRAPH_DECL_HPP
11#define TPETRA_CRSGRAPH_DECL_HPP
19#include "Tpetra_DistObject.hpp"
20#include "Tpetra_Exceptions.hpp"
21#include "Tpetra_RowGraph.hpp"
23#include "Tpetra_Details_WrappedDualView.hpp"
25#include "KokkosSparse_findRelOffset.hpp"
26#include "Kokkos_DualView.hpp"
28#include "Teuchos_CommHelpers.hpp"
29#include "Teuchos_Describable.hpp"
30#include "Teuchos_OrdinalTraits.hpp"
31#include "Teuchos_ParameterListAcceptorDefaultBase.hpp"
33#include "KokkosSparse_StaticCrsGraph.hpp"
41template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
42class crsGraph_Swap_Tester;
44#ifndef DOXYGEN_SHOULD_SKIP_THIS
46template <
class LocalOrdinal,
53template <
class ViewType>
55 static_assert(Kokkos::is_view<ViewType>::value,
56 "ViewType must be a Kokkos::View specialization.");
60 typedef Kokkos::View<
typename ViewType::data_type,
61 typename ViewType::array_layout,
62 typename ViewType::device_type,
63 Kokkos::MemoryUnmanaged>
187template <
class LocalOrdinal,
190class CrsGraph :
public RowGraph<LocalOrdinal, GlobalOrdinal, Node>,
195 public Teuchos::ParameterListAcceptorDefaultBase {
196 template <
class S,
class LO,
class GO,
class N>
197 friend class CrsMatrix;
198 template <
class LO2,
class GO2,
class N2>
199 friend class CrsGraph;
200 template <
class LO,
class GO,
class N>
201 friend class FECrsGraph;
228#if KOKKOS_VERSION >= 40799
243 using local_inds_dualv_type =
244 Kokkos::DualView<local_ordinal_type*, device_type>;
245 using local_inds_wdv_type =
249 using global_inds_dualv_type =
250 Kokkos::DualView<global_ordinal_type*, device_type>;
251 using global_inds_wdv_type =
256 using row_ptrs_device_view_type =
257 typename row_graph_type::row_ptrs_device_view_type;
258 using row_ptrs_host_view_type =
259 typename row_graph_type::row_ptrs_host_view_type;
263 typename row_graph_type::local_inds_device_view_type;
264 using local_inds_host_view_type =
265 typename row_graph_type::local_inds_host_view_type;
266 using nonconst_local_inds_host_view_type =
267 typename row_graph_type::nonconst_local_inds_host_view_type;
271 typename row_graph_type::global_inds_device_view_type;
272 using global_inds_host_view_type =
273 typename row_graph_type::global_inds_host_view_type;
274 using nonconst_global_inds_host_view_type =
275 typename row_graph_type::nonconst_global_inds_host_view_type;
277 using offset_device_view_type =
278 typename row_ptrs_device_view_type::non_const_type;
295 CrsGraph(
const Teuchos::RCP<const map_type>& rowMap,
296 const size_t maxNumEntriesPerRow,
297 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
311 CrsGraph(
const Teuchos::RCP<const map_type>& rowMap,
312 const Kokkos::DualView<const size_t*, device_type>& numEntPerRow,
313 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
328 CrsGraph(
const Teuchos::RCP<const map_type>& rowMap,
329 const Teuchos::ArrayView<const size_t>& numEntPerRow,
330 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
348 CrsGraph(
const Teuchos::RCP<const map_type>& rowMap,
349 const Teuchos::RCP<const map_type>& colMap,
350 const size_t maxNumEntriesPerRow,
351 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
367 CrsGraph(
const Teuchos::RCP<const map_type>& rowMap,
368 const Teuchos::RCP<const map_type>& colMap,
369 const Kokkos::DualView<const size_t*, device_type>& numEntPerRow,
370 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
387 CrsGraph(
const Teuchos::RCP<const map_type>& rowMap,
388 const Teuchos::RCP<const map_type>& colMap,
389 const Teuchos::ArrayView<const size_t>& numEntPerRow,
390 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
403 CrsGraph(CrsGraph<local_ordinal_type, global_ordinal_type, node_type>& originalGraph,
404 const Teuchos::RCP<const map_type>& rowMap,
405 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
429 CrsGraph(
const Teuchos::RCP<const map_type>& rowMap,
430 const Teuchos::RCP<const map_type>& colMap,
431 const typename local_graph_device_type::row_map_type& rowPointers,
432 const typename local_graph_device_type::entries_type::non_const_type& columnIndices,
433 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
457 CrsGraph(
const Teuchos::RCP<const map_type>& rowMap,
458 const Teuchos::RCP<const map_type>& colMap,
459 const Teuchos::ArrayRCP<size_t>& rowPointers,
460 const Teuchos::ArrayRCP<local_ordinal_type>& columnIndices,
461 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
484 CrsGraph(
const Teuchos::RCP<const map_type>& rowMap,
485 const Teuchos::RCP<const map_type>& colMap,
487 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
516 const Teuchos::RCP<const map_type>& rowMap,
517 const Teuchos::RCP<const map_type>& colMap,
518 const Teuchos::RCP<const map_type>& domainMap = Teuchos::null,
519 const Teuchos::RCP<const map_type>& rangeMap = Teuchos::null,
520 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
527 const Teuchos::RCP<const map_type>& rowMap,
528 const Teuchos::RCP<const map_type>& colMap,
529 const Teuchos::RCP<const map_type>& domainMap,
530 const Teuchos::RCP<const map_type>& rangeMap,
531 const Teuchos::RCP<const import_type>& importer,
532 const Teuchos::RCP<const export_type>& exporter,
533 const Teuchos::RCP<Teuchos::ParameterList>& params =
577 CrsGraph(
const row_ptrs_device_view_type& rowPointers,
578 const local_inds_wdv_type& columnIndices,
579 const Teuchos::RCP<const map_type>& rowMap,
580 const Teuchos::RCP<const map_type>& colMap,
581 const Teuchos::RCP<const map_type>& domainMap,
582 const Teuchos::RCP<const map_type>& rangeMap,
583 const Teuchos::RCP<const import_type>& importer,
584 const Teuchos::RCP<const export_type>& exporter,
585 const Teuchos::RCP<Teuchos::ParameterList>& params =
589 CrsGraph(
const CrsGraph<local_ordinal_type, global_ordinal_type, node_type>&) =
default;
592 CrsGraph&
operator=(
const CrsGraph<local_ordinal_type, global_ordinal_type, node_type>&) =
default;
595 CrsGraph(CrsGraph<local_ordinal_type, global_ordinal_type, node_type>&&) =
default;
598 CrsGraph&
operator=(CrsGraph<local_ordinal_type, global_ordinal_type, node_type>&&) =
default;
655 bool isIdenticalTo(
const CrsGraph<LocalOrdinal, GlobalOrdinal, Node>& graph)
const;
666 Teuchos::RCP<const Teuchos::ParameterList>
696 const Teuchos::ArrayView<const global_ordinal_type>& indices);
726 const Teuchos::ArrayView<const local_ordinal_type>& indices);
783 resumeFill(
const Teuchos::RCP<Teuchos::ParameterList>& params =
825 const Teuchos::RCP<const map_type>& rangeMap,
826 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
856 fillComplete(
const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
888 const Teuchos::RCP<const map_type>& rangeMap,
889 const Teuchos::RCP<const import_type>& importer =
891 const Teuchos::RCP<const export_type>& exporter =
893 const Teuchos::RCP<Teuchos::ParameterList>& params =
900 Teuchos::RCP<const Teuchos::Comm<int>>
getComm()
const override;
903 Teuchos::RCP<const map_type>
getRowMap()
const override;
906 Teuchos::RCP<const map_type>
getColMap()
const override;
1098 nonconst_global_inds_host_view_type& gblColInds,
1099 size_t& numColInds)
const override;
1110 nonconst_local_inds_host_view_type& gblColInds,
1111 size_t& numColInds)
const override;
1126 global_inds_host_view_type& gblColInds)
const override;
1144 const LocalOrdinal lclRow,
1145 local_inds_host_view_type& lclColInds)
const override;
1158 const Teuchos::EVerbosityLevel verbLevel =
1159 Teuchos::Describable::verbLevel_default)
const override;
1176 using dist_object_type::
1182 const size_t numSameIDs,
1189 void copyAndPermuteNew(
1190 const row_graph_type& source,
1191 row_graph_type& target,
1192 const size_t numSameIDs,
1193 const Kokkos::DualView<const local_ordinal_type*, buffer_device_type>& permuteToLIDs,
1194 const Kokkos::DualView<const local_ordinal_type*, buffer_device_type>& permuteFromLIDs,
1197 void insertGlobalIndicesDevice(
1198 const CrsGraph<LocalOrdinal, GlobalOrdinal, Node>& srcCrsGraph,
1199 CrsGraph<LocalOrdinal, GlobalOrdinal, Node>& tgtCrsGraph,
1200 const Kokkos::DualView<const local_ordinal_type*, buffer_device_type>& permuteToLIDs,
1201 const Kokkos::DualView<const local_ordinal_type*, buffer_device_type>& permuteFromLIDs,
1202 LocalOrdinal loopEnd);
1208 applyCrsPadding(
const padding_type& padding,
1209 const bool verbose);
1211 std::unique_ptr<padding_type>
1215 const size_t numSameIDs,
1220 const bool verbose)
const;
1223 std::unique_ptr<padding_type>
1224 computeCrsPaddingForImports(
1227 Kokkos::DualView<packet_type*, buffer_device_type> imports,
1228 Kokkos::DualView<size_t*, buffer_device_type> numPacketsPerLID,
1229 const bool verbose)
const;
1231 std::unique_ptr<padding_type>
1232 computePaddingForCrsMatrixUnpack(
1235 Kokkos::DualView<char*, buffer_device_type> imports,
1236 Kokkos::DualView<size_t*, buffer_device_type> numPacketsPerLID,
1237 const bool verbose)
const;
1240 computeCrsPaddingForSameIDs(
1241 padding_type& padding,
1247 computeCrsPaddingForPermutedIDs(
1248 padding_type& padding,
1259 const Kokkos::DualView<const local_ordinal_type*, buffer_device_type>& exportLIDs,
1260 Kokkos::DualView<packet_type*, buffer_device_type>& exports,
1261 Kokkos::DualView<size_t*, buffer_device_type> numPacketsPerLID,
1262 size_t& constantNumPackets)
override;
1270 pack(
const Teuchos::ArrayView<const local_ordinal_type>& exportLIDs,
1271 Teuchos::Array<global_ordinal_type>& exports,
1272 const Teuchos::ArrayView<size_t>& numPacketsPerLID,
1273 size_t& constantNumPackets)
const override;
1276 packFillActive(
const Teuchos::ArrayView<const local_ordinal_type>& exportLIDs,
1277 Teuchos::Array<global_ordinal_type>& exports,
1278 const Teuchos::ArrayView<size_t>& numPacketsPerLID,
1279 size_t& constantNumPackets)
const;
1286 Kokkos::DualView<
size_t*,
1289 size_t& constantNumPackets)
const;
1302 Kokkos::DualView<
size_t*,
1305 const size_t constantNumPackets,
1383 setAllIndices(
const typename local_graph_device_type::row_map_type& rowPointers,
1384 const typename local_graph_device_type::entries_type::non_const_type& columnIndices);
1397 const Teuchos::ArrayRCP<local_ordinal_type>& columnIndices);
1454 const Teuchos::RCP<const import_type>& newImport = Teuchos::null,
1455 const bool sortIndicesInEachRow =
true);
1481 const Teuchos::RCP<const import_type>& newImporter);
1507 const Teuchos::RCP<const export_type>& newExporter);
1541 template <
class DestViewType,
class SrcViewType,
1542 class DestOffsetViewType,
class SrcOffsetViewType>
1543 struct pack_functor {
1547 SrcOffsetViewType src_offset;
1548 DestOffsetViewType dest_offset;
1549 typedef typename DestOffsetViewType::non_const_value_type ScalarIndx;
1551 pack_functor(DestViewType dest_,
1552 const SrcViewType src_,
1553 DestOffsetViewType dest_offset_,
1554 const SrcOffsetViewType src_offset_)
1557 , src_offset(src_offset_)
1558 , dest_offset(dest_offset_){};
1560 KOKKOS_INLINE_FUNCTION
1561 void operator()(
size_t row)
const {
1562 ScalarIndx i = src_offset(row);
1563 ScalarIndx j = dest_offset(row);
1564 const ScalarIndx k = dest_offset(row + 1);
1565 for (; j < k; j++, i++) {
1573 template <
class CrsGraphType>
1574 friend Teuchos::RCP<CrsGraphType>
1575 importAndFillCompleteCrsGraph(
const Teuchos::RCP<const CrsGraphType>& sourceGraph,
1576 const Import<
typename CrsGraphType::local_ordinal_type,
1577 typename CrsGraphType::global_ordinal_type,
1578 typename CrsGraphType::node_type>& importer,
1579 const Teuchos::RCP<
const Map<
typename CrsGraphType::local_ordinal_type,
1580 typename CrsGraphType::global_ordinal_type,
1581 typename CrsGraphType::node_type>>& domainMap,
1582 const Teuchos::RCP<
const Map<
typename CrsGraphType::local_ordinal_type,
1583 typename CrsGraphType::global_ordinal_type,
1584 typename CrsGraphType::node_type>>& rangeMap,
1585 const Teuchos::RCP<Teuchos::ParameterList>& params);
1588 template <
class CrsGraphType>
1589 friend Teuchos::RCP<CrsGraphType>
1590 importAndFillCompleteCrsGraph(
const Teuchos::RCP<const CrsGraphType>& sourceGraph,
1591 const Import<
typename CrsGraphType::local_ordinal_type,
1592 typename CrsGraphType::global_ordinal_type,
1593 typename CrsGraphType::node_type>& rowImporter,
1594 const Import<
typename CrsGraphType::local_ordinal_type,
1595 typename CrsGraphType::global_ordinal_type,
1596 typename CrsGraphType::node_type>& domainImporter,
1597 const Teuchos::RCP<
const Map<
typename CrsGraphType::local_ordinal_type,
1598 typename CrsGraphType::global_ordinal_type,
1599 typename CrsGraphType::node_type>>& domainMap,
1600 const Teuchos::RCP<
const Map<
typename CrsGraphType::local_ordinal_type,
1601 typename CrsGraphType::global_ordinal_type,
1602 typename CrsGraphType::node_type>>& rangeMap,
1603 const Teuchos::RCP<Teuchos::ParameterList>& params);
1606 template <
class CrsGraphType>
1607 friend Teuchos::RCP<CrsGraphType>
1608 exportAndFillCompleteCrsGraph(
const Teuchos::RCP<const CrsGraphType>& sourceGraph,
1609 const Export<
typename CrsGraphType::local_ordinal_type,
1610 typename CrsGraphType::global_ordinal_type,
1611 typename CrsGraphType::node_type>& exporter,
1612 const Teuchos::RCP<
const Map<
typename CrsGraphType::local_ordinal_type,
1613 typename CrsGraphType::global_ordinal_type,
1614 typename CrsGraphType::node_type>>& domainMap,
1615 const Teuchos::RCP<
const Map<
typename CrsGraphType::local_ordinal_type,
1616 typename CrsGraphType::global_ordinal_type,
1617 typename CrsGraphType::node_type>>& rangeMap,
1618 const Teuchos::RCP<Teuchos::ParameterList>& params);
1621 template <
class CrsGraphType>
1622 friend Teuchos::RCP<CrsGraphType>
1623 exportAndFillCompleteCrsGraph(
const Teuchos::RCP<const CrsGraphType>& sourceGraph,
1624 const Export<
typename CrsGraphType::local_ordinal_type,
1625 typename CrsGraphType::global_ordinal_type,
1626 typename CrsGraphType::node_type>& rowExporter,
1627 const Export<
typename CrsGraphType::local_ordinal_type,
1628 typename CrsGraphType::global_ordinal_type,
1629 typename CrsGraphType::node_type>& domainExporter,
1630 const Teuchos::RCP<
const Map<
typename CrsGraphType::local_ordinal_type,
1631 typename CrsGraphType::global_ordinal_type,
1632 typename CrsGraphType::node_type>>& domainMap,
1633 const Teuchos::RCP<
const Map<
typename CrsGraphType::local_ordinal_type,
1634 typename CrsGraphType::global_ordinal_type,
1635 typename CrsGraphType::node_type>>& rangeMap,
1636 const Teuchos::RCP<Teuchos::ParameterList>& params);
1657 const Teuchos::RCP<const map_type>& domainMap,
1658 const Teuchos::RCP<const map_type>& rangeMap,
1659 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null)
const;
1680 const Teuchos::RCP<const map_type>& domainMap,
1681 const Teuchos::RCP<const map_type>& rangeMap,
1682 const Teuchos::RCP<Teuchos::ParameterList>& params)
const;
1702 const Teuchos::RCP<const map_type>& domainMap = Teuchos::null,
1703 const Teuchos::RCP<const map_type>& rangeMap = Teuchos::null,
1704 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null)
const;
1725 const Teuchos::RCP<const map_type>& domainMap,
1726 const Teuchos::RCP<const map_type>& rangeMap,
1727 const Teuchos::RCP<Teuchos::ParameterList>& params)
const;
1751 transferAndFillComplete(Teuchos::RCP<CrsGraph<local_ordinal_type, global_ordinal_type, Node>>& destGraph,
1752 const ::Tpetra::Details::Transfer<local_ordinal_type, global_ordinal_type, Node>& rowTransfer,
1753 const Teuchos::RCP<const ::Tpetra::Details::Transfer<local_ordinal_type, global_ordinal_type, Node>>& domainTransfer,
1754 const Teuchos::RCP<const map_type>& domainMap = Teuchos::null,
1755 const Teuchos::RCP<const map_type>& rangeMap = Teuchos::null,
1756 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null)
const;
1761 struct SLocalGlobalViews {
1762 Teuchos::ArrayView<const global_ordinal_type> ginds;
1763 Teuchos::ArrayView<const local_ordinal_type> linds;
1765 struct SLocalGlobalNCViews {
1766 Teuchos::ArrayView<global_ordinal_type> ginds;
1767 Teuchos::ArrayView<local_ordinal_type> linds;
1770 bool indicesAreAllocated()
const;
1773 allocateIndices(
const ELocalGlobal lg,
const bool verbose =
false);
1809 std::pair<size_t, std::string>
1822 const bool useRemotePIDs);
1864 const SLocalGlobalViews& newInds,
1865 const ELocalGlobal lg,
1866 const ELocalGlobal I);
1880 const size_t numInputInds);
1894 const size_t numInputInds,
1895 std::function<
void(
const size_t,
const size_t,
const size_t)> fun =
1896 std::function<
void(
const size_t,
const size_t,
const size_t)>());
1900 const Teuchos::ArrayView<const local_ordinal_type>& gblColInds,
1901 std::function<
void(
const size_t,
const size_t,
const size_t)> fun =
1902 std::function<
void(
const size_t,
const size_t,
const size_t)>());
1921 const Teuchos::ArrayView<const global_ordinal_type>& indices,
1922 std::function<
void(
const size_t,
const size_t,
const size_t)> fun)
const;
1961#ifdef KOKKOS_ENABLE_SERIAL
1962 !std::is_same<execution_space, Kokkos::Serial>::value;
1987 sortAndMergeAllIndices(
const bool sorted,
const bool merged);
2005 const Teuchos::RCP<const map_type>& rangeMap);
2007 void staticAssertions()
const;
2008 void clearGlobalConstants();
2033 bool haveLocalOffRankOffsets()
const {
return haveLocalOffRankOffsets_; }
2087 void fillLocalGraph(
const Teuchos::RCP<Teuchos::ParameterList>& params);
2095 void swap(CrsGraph<local_ordinal_type, global_ordinal_type, Node>& graph);
2129 Teuchos::OrdinalTraits<size_t>::invalid();
2135 Teuchos::OrdinalTraits<global_size_t>::invalid();
2142 Teuchos::OrdinalTraits<global_size_t>::invalid();
2156 row_ptrs_device_view_type rowPtrsUnpacked_dev_;
2157 mutable row_ptrs_host_view_type rowPtrsUnpacked_host_;
2162 row_ptrs_device_view_type rowPtrsPacked_dev_;
2163 mutable row_ptrs_host_view_type rowPtrsPacked_host_;
2166 bool packedUnpackedRowPtrsMatch_ =
false;
2169 void setRowPtrsUnpacked(
const row_ptrs_device_view_type& dview) {
2170 packedUnpackedRowPtrsMatch_ =
false;
2171 rowPtrsUnpacked_dev_ = dview;
2173 rowPtrsUnpacked_host_ = row_ptrs_host_view_type();
2178 return rowPtrsUnpacked_dev_;
2183 if (rowPtrsUnpacked_host_.extent(0) != rowPtrsUnpacked_dev_.extent(0)) {
2188 if constexpr (std::is_same_v<typename Node::memory_space, Kokkos::HostSpace>) {
2189 rowPtrsUnpacked_host_ = rowPtrsUnpacked_dev_;
2192 typename row_ptrs_host_view_type::non_const_type rowPtrsTemp(
2193 Kokkos::view_alloc(Kokkos::WithoutInitializing,
"rowPtrsUnpacked_host_"), rowPtrsUnpacked_dev_.extent(0));
2194 Kokkos::deep_copy(rowPtrsTemp, rowPtrsUnpacked_dev_);
2195 rowPtrsUnpacked_host_ = rowPtrsTemp;
2198 if (packedUnpackedRowPtrsMatch_) {
2199 rowPtrsPacked_host_ = rowPtrsUnpacked_host_;
2202 return rowPtrsUnpacked_host_;
2205 void setRowPtrsPacked(
const row_ptrs_device_view_type& dview) {
2206 packedUnpackedRowPtrsMatch_ =
false;
2207 rowPtrsPacked_dev_ = dview;
2209 rowPtrsPacked_host_ = row_ptrs_host_view_type();
2214 return rowPtrsPacked_dev_;
2219 if (rowPtrsPacked_host_.extent(0) != rowPtrsPacked_dev_.extent(0)) {
2224 if constexpr (std::is_same_v<typename Node::memory_space, Kokkos::HostSpace>) {
2225 rowPtrsPacked_host_ = rowPtrsPacked_dev_;
2228 typename row_ptrs_host_view_type::non_const_type rowPtrsTemp(
2229 Kokkos::view_alloc(Kokkos::WithoutInitializing,
"rowPtrsPacked_host_"), rowPtrsPacked_dev_.extent(0));
2230 Kokkos::deep_copy(rowPtrsTemp, rowPtrsPacked_dev_);
2231 rowPtrsPacked_host_ = rowPtrsTemp;
2234 if (packedUnpackedRowPtrsMatch_) {
2235 rowPtrsUnpacked_host_ = rowPtrsPacked_host_;
2238 return rowPtrsPacked_host_;
2245 void setRowPtrs(
const row_ptrs_device_view_type& dview) {
2246 packedUnpackedRowPtrsMatch_ =
true;
2247 rowPtrsUnpacked_dev_ = dview;
2248 rowPtrsPacked_dev_ = dview;
2250 rowPtrsUnpacked_host_ = row_ptrs_host_view_type();
2251 rowPtrsPacked_host_ = row_ptrs_host_view_type();
2304 typename local_inds_dualv_type::t_host::const_type
2310 typename local_inds_dualv_type::t_dev::const_type
2316 typename global_inds_dualv_type::t_host::const_type
2322 typename global_inds_dualv_type::t_dev::const_type
2328 typename local_inds_dualv_type::t_host
2360 typename Kokkos::View<const size_t*, device_type>::host_mirror_type
2445 Details::STORAGE_1D_UNPACKED;
2447 bool indicesAreAllocated_ =
false;
2448 bool indicesAreLocal_ =
false;
2449 bool indicesAreGlobal_ =
false;
2450 bool fillComplete_ =
false;
2462 mutable bool haveLocalOffRankOffsets_ =
false;
2464 typedef typename std::map<global_ordinal_type, std::vector<global_ordinal_type>> nonlocals_type;
2487 static bool getDebug();
2491 bool debug_ = getDebug();
2494 static bool getVerbose();
2499 bool verbose_ = getVerbose();
2503 mutable bool need_sync_host_uvm_access =
false;
2506 void set_need_sync_host_uvm_access() {
2507 need_sync_host_uvm_access =
true;
2511 void execute_sync_host_uvm_access()
const {
2512 if (need_sync_host_uvm_access) {
2513 Kokkos::fence(
"CrsGraph::execute_sync_host_uvm_access");
2514 need_sync_host_uvm_access =
false;
2526template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
2527Teuchos::RCP<CrsGraph<LocalOrdinal, GlobalOrdinal, Node>>
2531 size_t maxNumEntriesPerRow = 0,
2532 const Teuchos::RCP<Teuchos::ParameterList>& params =
2535 using graph_type = CrsGraph<LocalOrdinal, GlobalOrdinal, Node>;
2536 return rcp(
new graph_type(map, maxNumEntriesPerRow,
2589template <
class CrsGraphType>
2590Teuchos::RCP<CrsGraphType>
2592 const Import<
typename CrsGraphType::local_ordinal_type,
2593 typename CrsGraphType::global_ordinal_type,
2594 typename CrsGraphType::node_type>& importer,
2595 const Teuchos::RCP<
const Map<
typename CrsGraphType::local_ordinal_type,
2596 typename CrsGraphType::global_ordinal_type,
2597 typename CrsGraphType::node_type>>& domainMap = Teuchos::null,
2598 const Teuchos::RCP<
const Map<
typename CrsGraphType::local_ordinal_type,
2599 typename CrsGraphType::global_ordinal_type,
2600 typename CrsGraphType::node_type>>& rangeMap = Teuchos::null,
2601 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
2602 Teuchos::RCP<CrsGraphType> destGraph;
2603 sourceGraph->importAndFillComplete(destGraph, importer, domainMap, rangeMap, params);
2657template <
class CrsGraphType>
2658Teuchos::RCP<CrsGraphType>
2660 const Import<
typename CrsGraphType::local_ordinal_type,
2661 typename CrsGraphType::global_ordinal_type,
2662 typename CrsGraphType::node_type>& rowImporter,
2663 const Import<
typename CrsGraphType::local_ordinal_type,
2664 typename CrsGraphType::global_ordinal_type,
2665 typename CrsGraphType::node_type>& domainImporter,
2666 const Teuchos::RCP<
const Map<
typename CrsGraphType::local_ordinal_type,
2667 typename CrsGraphType::global_ordinal_type,
2668 typename CrsGraphType::node_type>>& domainMap,
2669 const Teuchos::RCP<
const Map<
typename CrsGraphType::local_ordinal_type,
2670 typename CrsGraphType::global_ordinal_type,
2671 typename CrsGraphType::node_type>>& rangeMap,
2672 const Teuchos::RCP<Teuchos::ParameterList>& params) {
2673 Teuchos::RCP<CrsGraphType> destGraph;
2674 sourceGraph->importAndFillComplete(destGraph, rowImporter, domainImporter, domainMap, rangeMap, params);
2711template <
class CrsGraphType>
2712Teuchos::RCP<CrsGraphType>
2714 const Export<
typename CrsGraphType::local_ordinal_type,
2715 typename CrsGraphType::global_ordinal_type,
2716 typename CrsGraphType::node_type>& exporter,
2717 const Teuchos::RCP<
const Map<
typename CrsGraphType::local_ordinal_type,
2718 typename CrsGraphType::global_ordinal_type,
2719 typename CrsGraphType::node_type>>& domainMap = Teuchos::null,
2720 const Teuchos::RCP<
const Map<
typename CrsGraphType::local_ordinal_type,
2721 typename CrsGraphType::global_ordinal_type,
2722 typename CrsGraphType::node_type>>& rangeMap = Teuchos::null,
2723 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
2724 Teuchos::RCP<CrsGraphType> destGraph;
2725 sourceGraph->exportAndFillComplete(destGraph, exporter, domainMap, rangeMap, params);
2762template <
class CrsGraphType>
2763Teuchos::RCP<CrsGraphType>
2765 const Export<
typename CrsGraphType::local_ordinal_type,
2766 typename CrsGraphType::global_ordinal_type,
2767 typename CrsGraphType::node_type>& rowExporter,
2768 const Export<
typename CrsGraphType::local_ordinal_type,
2769 typename CrsGraphType::global_ordinal_type,
2770 typename CrsGraphType::node_type>& domainExporter,
2771 const Teuchos::RCP<
const Map<
typename CrsGraphType::local_ordinal_type,
2772 typename CrsGraphType::global_ordinal_type,
2773 typename CrsGraphType::node_type>>& domainMap,
2774 const Teuchos::RCP<
const Map<
typename CrsGraphType::local_ordinal_type,
2775 typename CrsGraphType::global_ordinal_type,
2776 typename CrsGraphType::node_type>>& rangeMap,
2777 const Teuchos::RCP<Teuchos::ParameterList>& params) {
2778 Teuchos::RCP<CrsGraphType> destGraph;
2779 sourceGraph->exportAndFillComplete(destGraph, rowExporter, domainExporter, domainMap, rangeMap, params);
Forward declaration of Tpetra::BlockCrsMatrix.
Forward declaration of Tpetra::CrsGraph.
Forward declaration of Tpetra::CrsMatrix.
Stand-alone utility functions and macros.
bool isMerged() const
Whether duplicate column indices in each row have been merged.
virtual void unpackAndCombine(const Kokkos::DualView< const local_ordinal_type *, buffer_device_type > &importLIDs, Kokkos::DualView< packet_type *, buffer_device_type > imports, Kokkos::DualView< size_t *, buffer_device_type > numPacketsPerLID, const size_t constantNumPackets, const CombineMode combineMode) override
local_inds_dualv_type::t_dev::const_type getLocalIndsViewDevice(const RowInfo &rowinfo) const
Get a const, locally indexed view of the locally owned row myRow, such that rowinfo = getRowInfo(myRo...
void insertGlobalIndices(const global_ordinal_type globalRow, const local_ordinal_type numEnt, const global_ordinal_type inds[])
Epetra compatibility version of insertGlobalIndices (see above) that takes input as a raw pointer,...
global_size_t globalMaxNumRowEntries_
void reindexColumns(const Teuchos::RCP< const map_type > &newColMap, const Teuchos::RCP< const import_type > &newImport=Teuchos::null, const bool sortIndicesInEachRow=true)
Reindex the column indices in place, and replace the column Map. Optionally, replace the Import objec...
Kokkos::View< size_t *, Kokkos::LayoutLeft, device_type >::host_mirror_type num_row_entries_type
global_inds_dualv_type::t_host::const_type getGlobalIndsViewHost(const RowInfo &rowinfo) const
Get a const, globally indexed view of the locally owned row myRow, such that rowinfo = getRowInfo(myR...
size_t getNumEntriesInLocalRow(local_ordinal_type localRow) const override
Get the number of entries in the given row (local index).
Teuchos::RCP< CrsGraphType > importAndFillCompleteCrsGraph(const Teuchos::RCP< const CrsGraphType > &sourceGraph, const Import< typename CrsGraphType::local_ordinal_type, typename CrsGraphType::global_ordinal_type, typename CrsGraphType::node_type > &rowImporter, const Import< typename CrsGraphType::local_ordinal_type, typename CrsGraphType::global_ordinal_type, typename CrsGraphType::node_type > &domainImporter, const Teuchos::RCP< const Map< typename CrsGraphType::local_ordinal_type, typename CrsGraphType::global_ordinal_type, typename CrsGraphType::node_type > > &domainMap, const Teuchos::RCP< const Map< typename CrsGraphType::local_ordinal_type, typename CrsGraphType::global_ordinal_type, typename CrsGraphType::node_type > > &rangeMap, const Teuchos::RCP< Teuchos::ParameterList > ¶ms)
Nonmember CrsGraph constructor that fuses Import and fillComplete().
Teuchos::RCP< const map_type > getColMap() const override
Returns the Map that describes the column distribution in this graph.
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const override
Default parameter list suitable for validation.
Details::EStorageStatus storageStatus_
::Tpetra::Import< LO, GO, node_type > import_type
global_ordinal_type packet_type
void insertGlobalIndicesIntoNonownedRows(const global_ordinal_type gblRow, const global_ordinal_type gblColInds[], const local_ordinal_type numGblColInds)
Implementation of insertGlobalIndices for nonowned rows.
Teuchos::RCP< const map_type > rangeMap_
std::pair< size_t, std::string > makeIndicesLocal(const bool verbose=false)
Convert column indices from global to local.
void insertLocalIndices(const local_ordinal_type localRow, const local_ordinal_type numEnt, const local_ordinal_type inds[])
Epetra compatibility version of insertLocalIndices (see above) that takes input as a raw pointer,...
local_inds_device_view_type getLocalIndicesDevice() const
Get a device view of the packed column indicies.
global_size_t getGlobalNumEntries() const override
Returns the global number of entries in the graph.
bool isIdenticalTo(const CrsGraph< LocalOrdinal, GlobalOrdinal, Node > &graph) const
Create a cloned CrsGraph for a different Node type.
Teuchos::RCP< const Teuchos::Comm< int > > getComm() const override
Returns the communicator.
local_inds_wdv_type lclIndsUnpacked_wdv
bool haveGlobalConstants() const
Returns true if globalConstants have been computed; false otherwise.
void globalAssemble()
Communicate nonlocal contributions to other processes.
RowInfo getRowInfoFromGlobalRowIndex(const global_ordinal_type gblRow) const
Get information about the locally owned row with global index gblRow.
void getLocalDiagOffsets(const Kokkos::View< size_t *, device_type, Kokkos::MemoryUnmanaged > &offsets) const
Get offsets of the diagonal entries in the graph.
size_t findGlobalIndices(const RowInfo &rowInfo, const Teuchos::ArrayView< const global_ordinal_type > &indices, std::function< void(const size_t, const size_t, const size_t)> fun) const
Finds indices in the given row.
CrsGraph(const CrsGraph< local_ordinal_type, global_ordinal_type, node_type > &)=default
Copy constructor (default).
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 graph that you are done changing its structure.
global_inds_wdv_type gblInds_wdv
size_t nodeMaxNumRowEntries_
KokkosSparse::StaticCrsGraph< local_ordinal_type, Kokkos::LayoutLeft, device_type, void, size_t > local_graph_device_type
Teuchos::RCP< const import_type > importer_
void setAllIndices(const Teuchos::ArrayRCP< size_t > &rowPointers, const Teuchos::ArrayRCP< local_ordinal_type > &columnIndices)
Set the graph's data directly, using 1-D storage.
Teuchos::RCP< CrsGraphType > exportAndFillCompleteCrsGraph(const Teuchos::RCP< const CrsGraphType > &sourceGraph, const Export< typename CrsGraphType::local_ordinal_type, typename CrsGraphType::global_ordinal_type, typename CrsGraphType::node_type > &exporter, const Teuchos::RCP< const Map< typename CrsGraphType::local_ordinal_type, typename CrsGraphType::global_ordinal_type, typename CrsGraphType::node_type > > &domainMap=Teuchos::null, const Teuchos::RCP< const Map< typename CrsGraphType::local_ordinal_type, typename CrsGraphType::global_ordinal_type, typename CrsGraphType::node_type > > &rangeMap=Teuchos::null, const Teuchos::RCP< Teuchos::ParameterList > ¶ms=Teuchos::null)
Nonmember CrsGraph constructor that fuses Export and fillComplete().
num_row_entries_type k_numRowEntries_
CrsGraph(CrsGraph< local_ordinal_type, global_ordinal_type, node_type > &&)=default
Move constructor (default).
const row_ptrs_device_view_type & getRowPtrsUnpackedDevice() const
Get the unpacked row pointers on device.
size_t numAllocForAllRows_
bool hasColMap() const override
Whether the graph has a column Map.
std::string description() const override
Return a one-line human-readable description of this object.
bool isStorageOptimized() const
Returns true if storage has been optimized.
void getGlobalRowCopy(global_ordinal_type gblRow, nonconst_global_inds_host_view_type &gblColInds, size_t &numColInds) const override
Get a copy of the given row, using global indices.
CrsGraph(const Teuchos::RCP< const map_type > &rowMap, const Kokkos::DualView< const size_t *, device_type > &numEntPerRow, const Teuchos::RCP< Teuchos::ParameterList > ¶ms=Teuchos::null)
Constructor specifying a (possibly different) upper bound for the number of entries in each row.
void removeLocalIndices(local_ordinal_type localRow)
Remove all graph indices from the specified local row.
void importAndFillComplete(Teuchos::RCP< CrsGraph< local_ordinal_type, global_ordinal_type, Node > > &destGraph, 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 graph, and make the result fill complete.
CrsGraph(const Teuchos::RCP< const map_type > &rowMap, const Teuchos::RCP< const map_type > &colMap, const local_graph_device_type &lclGraph, const Teuchos::RCP< Teuchos::ParameterList > ¶ms=Teuchos::null)
Constructor specifying column Map and a local graph, which the resulting CrsGraph views....
global_size_t getGlobalNumRows() const override
Returns the number of global rows in the graph.
Teuchos::RCP< const map_type > getDomainMap() const override
Returns the Map associated with the domain of this graph.
void replaceRangeMapAndExporter(const Teuchos::RCP< const map_type > &newRangeMap, const Teuchos::RCP< const export_type > &newExporter)
Replace the current Range Map and Export with the given parameters.
CrsGraph(const Teuchos::RCP< const map_type > &rowMap, const Teuchos::RCP< const map_type > &colMap, const Teuchos::ArrayView< const size_t > &numEntPerRow, const Teuchos::RCP< Teuchos::ParameterList > ¶ms=Teuchos::null)
Constructor specifying column Map and number of entries in each row (legacy KokkosClassic version).
typename row_graph_type::global_inds_device_view_type global_inds_device_view_type
void computeLocalConstants()
Compute local constants, if they have not yet been computed.
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel=Teuchos::Describable::verbLevel_default) const override
Print this object to the given output stream with the given verbosity level.
void setParameterList(const Teuchos::RCP< Teuchos::ParameterList > ¶ms) override
Set the given list of parameters (must be nonnull).
static const bool useAtomicUpdatesByDefault
void resumeFill(const Teuchos::RCP< Teuchos::ParameterList > ¶ms=Teuchos::null)
Resume fill operations.
size_t insertIndices(RowInfo &rowInfo, const SLocalGlobalViews &newInds, const ELocalGlobal lg, const ELocalGlobal I)
Insert indices into the given row.
typename node_type::device_type device_type
Teuchos::RCP< CrsGraphType > importAndFillCompleteCrsGraph(const Teuchos::RCP< const CrsGraphType > &sourceGraph, const Import< typename CrsGraphType::local_ordinal_type, typename CrsGraphType::global_ordinal_type, typename CrsGraphType::node_type > &importer, const Teuchos::RCP< const Map< typename CrsGraphType::local_ordinal_type, typename CrsGraphType::global_ordinal_type, typename CrsGraphType::node_type > > &domainMap=Teuchos::null, const Teuchos::RCP< const Map< typename CrsGraphType::local_ordinal_type, typename CrsGraphType::global_ordinal_type, typename CrsGraphType::node_type > > &rangeMap=Teuchos::null, const Teuchos::RCP< Teuchos::ParameterList > ¶ms=Teuchos::null)
Nonmember CrsGraph constructor that fuses Import and fillComplete().
void insertGlobalIndicesFiltered(const local_ordinal_type lclRow, const global_ordinal_type gblColInds[], const local_ordinal_type numGblColInds)
Like insertGlobalIndices(), but with column Map filtering.
virtual void copyAndPermute(const SrcDistObject &source, const size_t numSameIDs, const Kokkos::DualView< const local_ordinal_type *, buffer_device_type > &permuteToLIDs, const Kokkos::DualView< const local_ordinal_type *, buffer_device_type > &permuteFromLIDs, const CombineMode CM) override
CrsGraph(const Teuchos::RCP< const map_type > &rowMap, const Teuchos::RCP< const map_type > &colMap, const typename local_graph_device_type::row_map_type &rowPointers, const typename local_graph_device_type::entries_type::non_const_type &columnIndices, const Teuchos::RCP< Teuchos::ParameterList > ¶ms=Teuchos::null)
Constructor specifying column Map and arrays containing the graph. In almost all cases the indices mu...
RowInfo getRowInfo(const local_ordinal_type myRow) const
Get information about the locally owned row with local index myRow.
global_inds_dualv_type::t_dev::const_type getGlobalIndsViewDevice(const RowInfo &rowinfo) const
Get a const, globally indexed view of the locally owned row myRow, such that rowinfo = getRowInfo(myR...
typename local_graph_device_type::HostMirror local_graph_host_type
Teuchos::RCP< const map_type > colMap_
CrsGraph(const Teuchos::RCP< const map_type > &rowMap, const size_t maxNumEntriesPerRow, const Teuchos::RCP< Teuchos::ParameterList > ¶ms=Teuchos::null)
Constructor specifying a single upper bound for the number of entries in all rows on the calling proc...
row_ptrs_host_view_type getLocalRowPtrsHost() const
Get a host view of the packed row offsets.
bool isSorted() const
Whether graph indices in all rows are known to be sorted.
typename dist_object_type::buffer_device_type buffer_device_type
Teuchos::RCP< CrsGraph< LocalOrdinal, GlobalOrdinal, Node > > createCrsGraph(const Teuchos::RCP< const Map< LocalOrdinal, GlobalOrdinal, Node > > &map, size_t maxNumEntriesPerRow=0, const Teuchos::RCP< Teuchos::ParameterList > ¶ms=Teuchos::null)
Nonmember function to create an empty CrsGraph given a row Map and the max number of entries allowed ...
void setAllIndices(const typename local_graph_device_type::row_map_type &rowPointers, const typename local_graph_device_type::entries_type::non_const_type &columnIndices)
Set the graph's data directly, using 1-D storage.
void insertLocalIndices(const local_ordinal_type localRow, const Teuchos::ArrayView< const local_ordinal_type > &indices)
Insert local indices into the graph.
local_inds_host_view_type getLocalIndicesHost() const
Get a host view of the packed column indicies.
bool supportsRowViews() const override
Whether this class implements getLocalRowView() and getGlobalRowView() (it does).
size_t getNumEntriesInGlobalRow(global_ordinal_type globalRow) const override
Returns the current number of entries on this node in the specified global row.
CrsGraph(CrsGraph< local_ordinal_type, global_ordinal_type, node_type > &originalGraph, const Teuchos::RCP< const map_type > &rowMap, const Teuchos::RCP< Teuchos::ParameterList > ¶ms=Teuchos::null)
Constructor specifying column Map and an existing graph to subview. The graph created will point to t...
size_t insertGlobalIndicesImpl(const RowInfo &rowInfo, const global_ordinal_type inputGblColInds[], const size_t numInputInds, std::function< void(const size_t, const size_t, const size_t)> fun=std::function< void(const size_t, const size_t, const size_t)>())
Insert global indices, using an input RowInfo.
bool isFillComplete() const override
Whether fillComplete() has been called and the graph is in compute mode.
void setDomainRangeMaps(const Teuchos::RCP< const map_type > &domainMap, const Teuchos::RCP< const map_type > &rangeMap)
void fillComplete(const Teuchos::RCP< Teuchos::ParameterList > ¶ms=Teuchos::null)
Tell the graph that you are done changing its structure; set default domain and range Maps.
void swap(CrsGraph< local_ordinal_type, global_ordinal_type, Node > &graph)
Swaps the data from *this with the data and maps from graph.
::Tpetra::Map< LO, GO, node_type > map_type
CrsGraph & operator=(const CrsGraph< local_ordinal_type, global_ordinal_type, node_type > &)=default
Assignment operator (default).
void getGlobalRowView(const global_ordinal_type gblRow, global_inds_host_view_type &gblColInds) const override
Get a const view of the given global row's global column indices.
CrsGraph(const Teuchos::RCP< const map_type > &rowMap, const Teuchos::RCP< const map_type > &colMap, const size_t maxNumEntriesPerRow, const Teuchos::RCP< Teuchos::ParameterList > ¶ms=Teuchos::null)
Constructor specifying column Map and a single upper bound for the number of entries in all rows on t...
const row_ptrs_host_view_type & getRowPtrsUnpackedHost() const
Get the unpacked row pointers on host. Lazily make a copy from device.
void exportAndFillComplete(Teuchos::RCP< CrsGraph< local_ordinal_type, global_ordinal_type, Node > > &destGraph, const export_type &rowExporter, const export_type &domainExporter, const Teuchos::RCP< const map_type > &domainMap, const Teuchos::RCP< const map_type > &rangeMap, const Teuchos::RCP< Teuchos::ParameterList > ¶ms) const
Export from this to the given destination graph, and make the result fill complete.
void exportAndFillComplete(Teuchos::RCP< CrsGraph< local_ordinal_type, global_ordinal_type, Node > > &destGraph, 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 graph, and make the result fill complete.
void makeColMap(Teuchos::Array< int > &remotePIDs)
Make and set the graph's column Map.
bool haveGlobalConstants_
CrsGraph(const local_graph_device_type &lclGraph, const Teuchos::RCP< const map_type > &rowMap, const Teuchos::RCP< const map_type > &colMap, 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)
Constructor specifying column, domain and range maps, and a local graph, which the resulting CrsGraph...
size_t getGlobalMaxNumRowEntries() const override
Maximum number of entries in any row of the graph, over all processes in the graph's communicator.
void checkInternalState() const
Throw an exception if the internal state is not consistent.
Teuchos::RCP< const map_type > getRangeMap() const override
Returns the Map associated with the domain of this graph.
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 graph that already has data, via setAllIndices().
bool sortGhostsAssociatedWithEachProcessor_
size_t getNumAllocatedEntriesInGlobalRow(global_ordinal_type globalRow) const
Current number of allocated entries in the given row on the calling (MPI) process,...
Teuchos::RCP< const export_type > getExporter() const override
Returns the exporter associated with this graph.
typename device_type::execution_space execution_space
void makeImportExport(Teuchos::Array< int > &remotePIDs, const bool useRemotePIDs)
Make the Import and Export objects, if needed.
global_ordinal_type getIndexBase() const override
Returns the index base for global indices for this graph.
void getLocalDiagOffsets(Teuchos::ArrayRCP< size_t > &offsets) const
Backwards compatibility overload of the above method.
row_ptrs_device_view_type getLocalRowPtrsDevice() const
Get a device view of the packed row offsets.
void getLocalRowCopy(local_ordinal_type gblRow, nonconst_local_inds_host_view_type &gblColInds, size_t &numColInds) const override
Get a copy of the given row, using local indices.
local_inds_dualv_type::t_host::const_type getLocalIndsViewHost(const RowInfo &rowinfo) const
Get a const, locally indexed view of the locally owned row myRow, such that rowinfo = getRowInfo(myRo...
bool isFillActive() const
Whether resumeFill() has been called and the graph is in edit mode.
Teuchos::RCP< const map_type > getRowMap() const override
Returns the Map that describes the row distribution in this graph.
global_size_t globalNumEntries_
size_t insertGlobalIndicesImpl(const local_ordinal_type lclRow, const global_ordinal_type inputGblColInds[], const size_t numInputInds)
Insert global indices, using an input local row index.
::Tpetra::Export< LO, GO, node_type > export_type
size_t getLocalNumEntries() const override
The local number of entries in the graph.
CrsGraph(const Teuchos::RCP< const map_type > &rowMap, const Teuchos::ArrayView< const size_t > &numEntPerRow, const Teuchos::RCP< Teuchos::ParameterList > ¶ms=Teuchos::null)
Constructor specifying a (possibly different) upper bound for the number of entries in each row (lega...
Teuchos::RCP< const import_type > getImporter() const override
Returns the importer associated with this graph.
local_inds_wdv_type lclIndsPacked_wdv
Teuchos::RCP< const map_type > domainMap_
const row_ptrs_host_view_type & getRowPtrsPackedHost() const
Get the packed row pointers on host. Lazily make a copy from device.
size_t getLocalNumCols() const override
Returns the number of columns connected to the locally owned rows of this graph.
nonlocals_type nonlocals_
virtual void pack(const Teuchos::ArrayView< const local_ordinal_type > &exportLIDs, Teuchos::Array< global_ordinal_type > &exports, const Teuchos::ArrayView< size_t > &numPacketsPerLID, size_t &constantNumPackets) const override
void getLocalOffRankOffsets(offset_device_view_type &offsets) const
Get offsets of the off-rank entries in the graph.
global_size_t getGlobalNumCols() const override
Returns the number of global columns in the graph.
Kokkos::View< constsize_t *, device_type >::host_mirror_type k_numAllocPerRow_
Teuchos::RCP< const export_type > exporter_
void insertGlobalIndices(const global_ordinal_type globalRow, const Teuchos::ArrayView< const global_ordinal_type > &indices)
Insert global indices into the graph.
local_inds_dualv_type::t_host getLocalIndsViewHostNonConst(const RowInfo &rowinfo)
Get a ReadWrite locally indexed view of the locally owned row myRow, such that rowinfo = getRowInfo(m...
void replaceDomainMap(const Teuchos::RCP< const map_type > &newDomainMap)
Replace the current domain Map with the given objects.
CrsGraph & operator=(CrsGraph< local_ordinal_type, global_ordinal_type, node_type > &&)=default
Move assignment (default).
void computeGlobalConstants()
Compute global constants, if they have not yet been computed.
CrsGraph(const Teuchos::RCP< const map_type > &rowMap, const Teuchos::RCP< const map_type > &colMap, const Kokkos::DualView< const size_t *, device_type > &numEntPerRow, const Teuchos::RCP< Teuchos::ParameterList > ¶ms=Teuchos::null)
Constructor specifying column Map and number of entries in each row.
size_t getNumAllocatedEntriesInLocalRow(local_ordinal_type localRow) const
Current number of allocated entries in the given row on the calling (MPI) process,...
typename row_graph_type::local_inds_device_view_type local_inds_device_view_type
virtual ~CrsGraph()=default
Destructor (virtual for memory safety of derived classes).
offset_device_view_type k_offRankOffsets_
void replaceDomainMapAndImporter(const Teuchos::RCP< const map_type > &newDomainMap, const Teuchos::RCP< const import_type > &newImporter)
Replace the current domain Map and Import with the given parameters.
void setLocallyModified()
Report that we made a local modification to its structure.
CrsGraph(const row_ptrs_device_view_type &rowPointers, const local_inds_wdv_type &columnIndices, const Teuchos::RCP< const map_type > &rowMap, const Teuchos::RCP< const map_type > &colMap, const Teuchos::RCP< const map_type > &domainMap, const Teuchos::RCP< const map_type > &rangeMap, const Teuchos::RCP< const import_type > &importer, const Teuchos::RCP< const export_type > &exporter, const Teuchos::RCP< Teuchos::ParameterList > ¶ms=Teuchos::null)
Constructor specifying the local row pointer and column indices arrays of the local graph; the row,...
size_t getLocalAllocationSize() const
The local number of indices allocated for the graph, over all rows on the calling (MPI) process.
void replaceRangeMap(const Teuchos::RCP< const map_type > &newRangeMap)
Replace the current Range Map with the given objects.
Teuchos::RCP< const map_type > rowMap_
Teuchos::RCP< CrsGraphType > exportAndFillCompleteCrsGraph(const Teuchos::RCP< const CrsGraphType > &sourceGraph, const Export< typename CrsGraphType::local_ordinal_type, typename CrsGraphType::global_ordinal_type, typename CrsGraphType::node_type > &rowExporter, const Export< typename CrsGraphType::local_ordinal_type, typename CrsGraphType::global_ordinal_type, typename CrsGraphType::node_type > &domainExporter, const Teuchos::RCP< const Map< typename CrsGraphType::local_ordinal_type, typename CrsGraphType::global_ordinal_type, typename CrsGraphType::node_type > > &domainMap, const Teuchos::RCP< const Map< typename CrsGraphType::local_ordinal_type, typename CrsGraphType::global_ordinal_type, typename CrsGraphType::node_type > > &rangeMap, const Teuchos::RCP< Teuchos::ParameterList > ¶ms)
Nonmember CrsGraph constructor that fuses Export and fillComplete().
CrsGraph(const local_graph_device_type &lclGraph, const Teuchos::RCP< const map_type > &rowMap, const Teuchos::RCP< const map_type > &colMap, const Teuchos::RCP< const map_type > &domainMap, const Teuchos::RCP< const map_type > &rangeMap, const Teuchos::RCP< const import_type > &importer, const Teuchos::RCP< const export_type > &exporter, const Teuchos::RCP< Teuchos::ParameterList > ¶ms=Teuchos::null)
void importAndFillComplete(Teuchos::RCP< CrsGraph< local_ordinal_type, global_ordinal_type, Node > > &destGraph, const import_type &rowImporter, const import_type &domainImporter, const Teuchos::RCP< const map_type > &domainMap, const Teuchos::RCP< const map_type > &rangeMap, const Teuchos::RCP< Teuchos::ParameterList > ¶ms) const
Import from this to the given destination graph, and make the result fill complete.
CrsGraph(const Teuchos::RCP< const map_type > &rowMap, const Teuchos::RCP< const map_type > &colMap, const Teuchos::ArrayRCP< size_t > &rowPointers, const Teuchos::ArrayRCP< local_ordinal_type > &columnIndices, const Teuchos::RCP< Teuchos::ParameterList > ¶ms=Teuchos::null)
Constructor specifying column Map and arrays containing the graph. In almost all cases the indices mu...
const row_ptrs_device_view_type & getRowPtrsPackedDevice() const
Get the packed row pointers on device.
virtual void removeEmptyProcessesInPlace(const Teuchos::RCP< const map_type > &newMap) override
Remove processes owning zero rows from the Maps and their communicator.
void getLocalRowView(const LocalOrdinal lclRow, local_inds_host_view_type &lclColInds) const override
Get a const view of the given local row's local column indices.
bool isGloballyIndexed() const override
Whether the graph's column indices are stored as global indices.
bool isLocallyIndexed() const override
Whether the graph's column indices are stored as local indices.
size_t getLocalMaxNumRowEntries() const override
Maximum number of entries in any row of the graph, on this process.
virtual bool checkSizes(const SrcDistObject &source) override
Compare the source and target (this) objects for compatibility.
local_graph_device_type getLocalGraphDevice() const
Get the local graph.
size_t getLocalNumRows() const override
Returns the number of graph rows owned on the calling node.
void replaceColMap(const Teuchos::RCP< const map_type > &newColMap)
Replace the graph's current column Map with the given Map.
Keep track of how much more space a CrsGraph or CrsMatrix needs, when the graph or matrix is the targ...
A wrapper around Kokkos::DualView to safely manage data that might be replicated between host and dev...
DistObject(const Teuchos::RCP< const map_type > &map)
Kokkos::Device< typename device_type::execution_space, buffer_memory_space > buffer_device_type
Kokkos::Device specialization for communication buffers.
virtual void packAndPrepare(const SrcDistObject &source, const Kokkos::DualView< const local_ordinal_type *, buffer_device_type > &exportLIDs, Kokkos::DualView< packet_type *, buffer_device_type > &exports, Kokkos::DualView< size_t *, buffer_device_type > numPacketsPerLID, size_t &constantNumPackets)
Pack data and metadata for communication (sends).
virtual void unpackAndCombine(const Kokkos::DualView< const local_ordinal_type *, buffer_device_type > &importLIDs, Kokkos::DualView< packet_type *, buffer_device_type > imports, Kokkos::DualView< size_t *, buffer_device_type > numPacketsPerLID, const size_t constantNumPackets, const CombineMode combineMode)
Perform any unpacking and combining after communication.
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...
A parallel distribution of indices over processes.
An abstract interface for graphs accessed by rows.
Abstract base class for objects that can be the source of an Import or Export operation.
Implementation details of Tpetra.
Nonmember function that computes a residual Computes R = B - A * X.
EStorageStatus
Status of the graph's or matrix's storage, when not in a fill-complete state.
Namespace Tpetra contains the class and methods constituting the Tpetra library.
size_t global_size_t
Global size_t object.
CombineMode
Rule for combining data in an Import or Export.
Allocation information for a locally owned row in a CrsGraph or CrsMatrix.