41#ifndef TPETRA_CRSGRAPH_DECL_HPP
42#define TPETRA_CRSGRAPH_DECL_HPP
50#include "Tpetra_DistObject.hpp"
51#include "Tpetra_Exceptions.hpp"
52#include "Tpetra_RowGraph.hpp"
54#include "Tpetra_Details_WrappedDualView.hpp"
56#include "KokkosSparse_findRelOffset.hpp"
57#include "Kokkos_DualView.hpp"
58#include "Kokkos_StaticCrsGraph.hpp"
60#include "Teuchos_CommHelpers.hpp"
61#include "Teuchos_Describable.hpp"
62#include "Teuchos_OrdinalTraits.hpp"
63#include "Teuchos_ParameterListAcceptorDefaultBase.hpp"
72 template<
class LocalOrdinal,
class GlobalOrdinal,
class Node>
class crsGraph_Swap_Tester;
74#ifndef DOXYGEN_SHOULD_SKIP_THIS
76 template<
class LocalOrdinal,
83 template<
class ViewType>
84 struct UnmanagedView {
85 static_assert (Kokkos::is_view<ViewType>::value,
86 "ViewType must be a Kokkos::View specialization.");
90 typedef Kokkos::View<
typename ViewType::data_type,
91 typename ViewType::array_layout,
92 typename ViewType::device_type,
93 Kokkos::MemoryUnmanaged> type;
216 template <
class LocalOrdinal,
220 public RowGraph<LocalOrdinal, GlobalOrdinal, Node>,
225 public Teuchos::ParameterListAcceptorDefaultBase
227 template <
class S,
class LO,
class GO,
class N>
228 friend class CrsMatrix;
229 template <
class LO2,
class GO2,
class N2>
230 friend class CrsGraph;
231 template <
class LO,
class GO,
class N>
232 friend class FECrsGraph;
270 using local_inds_dualv_type =
271 Kokkos::DualView<local_ordinal_type*, device_type>;
272 using local_inds_wdv_type =
276 using global_inds_dualv_type =
277 Kokkos::DualView<global_ordinal_type*, device_type>;
278 using global_inds_wdv_type =
283 using row_ptrs_device_view_type =
284 typename row_graph_type::row_ptrs_device_view_type;
285 using row_ptrs_host_view_type =
286 typename row_graph_type::row_ptrs_host_view_type;
290 typename row_graph_type::local_inds_device_view_type;
291 using local_inds_host_view_type =
292 typename row_graph_type::local_inds_host_view_type;
293 using nonconst_local_inds_host_view_type =
294 typename row_graph_type::nonconst_local_inds_host_view_type;
298 typename row_graph_type::global_inds_device_view_type;
299 using global_inds_host_view_type =
300 typename row_graph_type::global_inds_host_view_type;
301 using nonconst_global_inds_host_view_type =
302 typename row_graph_type::nonconst_global_inds_host_view_type;
304 using offset_device_view_type =
305 typename row_ptrs_device_view_type::non_const_type;
322 CrsGraph (
const Teuchos::RCP<const map_type>& rowMap,
323 const size_t maxNumEntriesPerRow,
324 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
338 CrsGraph (
const Teuchos::RCP<const map_type>& rowMap,
339 const Kokkos::DualView<const size_t*, device_type>& numEntPerRow,
340 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
355 CrsGraph (
const Teuchos::RCP<const map_type>& rowMap,
356 const Teuchos::ArrayView<const size_t>& numEntPerRow,
357 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
376 CrsGraph (
const Teuchos::RCP<const map_type>& rowMap,
377 const Teuchos::RCP<const map_type>& colMap,
378 const size_t maxNumEntriesPerRow,
379 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
395 CrsGraph (
const Teuchos::RCP<const map_type>& rowMap,
396 const Teuchos::RCP<const map_type>& colMap,
397 const Kokkos::DualView<const size_t*, device_type>& numEntPerRow,
398 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
415 CrsGraph (
const Teuchos::RCP<const map_type>& rowMap,
416 const Teuchos::RCP<const map_type>& colMap,
417 const Teuchos::ArrayView<const size_t>& numEntPerRow,
418 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
432 CrsGraph (CrsGraph<local_ordinal_type, global_ordinal_type, node_type>& originalGraph,
433 const Teuchos::RCP<const map_type>& rowMap,
434 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
458 CrsGraph (
const Teuchos::RCP<const map_type>& rowMap,
459 const Teuchos::RCP<const map_type>& colMap,
460 const typename local_graph_device_type::row_map_type& rowPointers,
461 const typename local_graph_device_type::entries_type::non_const_type& columnIndices,
462 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
486 CrsGraph (
const Teuchos::RCP<const map_type>& rowMap,
487 const Teuchos::RCP<const map_type>& colMap,
488 const Teuchos::ArrayRCP<size_t>& rowPointers,
489 const Teuchos::ArrayRCP<local_ordinal_type>& columnIndices,
490 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
513 CrsGraph (
const Teuchos::RCP<const map_type>& rowMap,
514 const Teuchos::RCP<const map_type>& colMap,
516 const Teuchos::RCP<Teuchos::ParameterList>& params);
545 const Teuchos::RCP<const map_type>& rowMap,
546 const Teuchos::RCP<const map_type>& colMap,
547 const Teuchos::RCP<const map_type>& domainMap = Teuchos::null,
548 const Teuchos::RCP<const map_type>& rangeMap = Teuchos::null,
549 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
556 const Teuchos::RCP<const map_type>& rowMap,
557 const Teuchos::RCP<const map_type>& colMap,
558 const Teuchos::RCP<const map_type>& domainMap,
559 const Teuchos::RCP<const map_type>& rangeMap,
560 const Teuchos::RCP<const import_type>& importer,
561 const Teuchos::RCP<const export_type>& exporter,
562 const Teuchos::RCP<Teuchos::ParameterList>& params =
566 CrsGraph (
const CrsGraph<local_ordinal_type, global_ordinal_type, node_type>&) =
default;
569 CrsGraph&
operator= (
const CrsGraph<local_ordinal_type, global_ordinal_type, node_type>&) =
default;
572 CrsGraph (CrsGraph<local_ordinal_type, global_ordinal_type, node_type>&&) =
default;
575 CrsGraph&
operator= (CrsGraph<local_ordinal_type, global_ordinal_type, node_type>&&) =
default;
632 bool isIdenticalTo(
const CrsGraph<LocalOrdinal, GlobalOrdinal, Node> &graph)
const;
643 Teuchos::RCP<const Teuchos::ParameterList>
673 const Teuchos::ArrayView<const global_ordinal_type>& indices);
703 const Teuchos::ArrayView<const local_ordinal_type>& indices);
760 resumeFill (
const Teuchos::RCP<Teuchos::ParameterList>& params =
802 const Teuchos::RCP<const map_type>& rangeMap,
803 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
833 fillComplete (
const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null);
865 const Teuchos::RCP<const map_type>& rangeMap,
866 const Teuchos::RCP<const import_type>& importer =
868 const Teuchos::RCP<const export_type>& exporter =
870 const Teuchos::RCP<Teuchos::ParameterList>& params =
877 Teuchos::RCP<const Teuchos::Comm<int> >
getComm()
const override;
881 Teuchos::RCP<const map_type>
getRowMap ()
const override;
884 Teuchos::RCP<const map_type>
getColMap ()
const override;
1078 nonconst_global_inds_host_view_type &gblColInds,
1079 size_t& numColInds)
const override;
1090 nonconst_local_inds_host_view_type &gblColInds,
1091 size_t& numColInds)
const override;
1106 global_inds_host_view_type &gblColInds)
const override;
1126 const LocalOrdinal lclRow,
1127 local_inds_host_view_type &lclColInds)
const override;
1141 const Teuchos::EVerbosityLevel verbLevel =
1142 Teuchos::Describable::verbLevel_default)
const override;
1160 using dist_object_type::
1168 const size_t numSameIDs,
1179 applyCrsPadding(
const padding_type& padding,
1180 const bool verbose);
1182 std::unique_ptr<padding_type>
1186 const size_t numSameIDs,
1191 const bool verbose)
const;
1194 std::unique_ptr<padding_type>
1195 computeCrsPaddingForImports(
1198 Kokkos::DualView<packet_type*, buffer_device_type> imports,
1199 Kokkos::DualView<size_t*, buffer_device_type> numPacketsPerLID,
1200 const bool verbose)
const;
1202 std::unique_ptr<padding_type>
1203 computePaddingForCrsMatrixUnpack(
1206 Kokkos::DualView<char*, buffer_device_type> imports,
1207 Kokkos::DualView<size_t*, buffer_device_type> numPacketsPerLID,
1208 const bool verbose)
const;
1211 computeCrsPaddingForSameIDs(
1212 padding_type& padding,
1218 computeCrsPaddingForPermutedIDs(
1219 padding_type& padding,
1230 const Kokkos::DualView<const local_ordinal_type*, buffer_device_type>& exportLIDs,
1231 Kokkos::DualView<packet_type*, buffer_device_type>& exports,
1232 Kokkos::DualView<size_t*, buffer_device_type> numPacketsPerLID,
1233 size_t& constantNumPackets)
override;
1243 pack (
const Teuchos::ArrayView<const local_ordinal_type>& exportLIDs,
1244 Teuchos::Array<global_ordinal_type>& exports,
1245 const Teuchos::ArrayView<size_t>& numPacketsPerLID,
1246 size_t& constantNumPackets)
const override;
1249 packFillActive (
const Teuchos::ArrayView<const local_ordinal_type>& exportLIDs,
1250 Teuchos::Array<global_ordinal_type>& exports,
1251 const Teuchos::ArrayView<size_t>& numPacketsPerLID,
1252 size_t& constantNumPackets)
const;
1259 Kokkos::DualView<
size_t*,
1261 size_t& constantNumPackets)
const;
1276 Kokkos::DualView<
size_t*,
1278 const size_t constantNumPackets,
1356 setAllIndices (
const typename local_graph_device_type::row_map_type& rowPointers,
1357 const typename local_graph_device_type::entries_type::non_const_type& columnIndices);
1370 const Teuchos::ArrayRCP<local_ordinal_type> & columnIndices);
1427 const Teuchos::RCP<const import_type>& newImport = Teuchos::null,
1428 const bool sortIndicesInEachRow =
true);
1454 const Teuchos::RCP<const import_type>& newImporter);
1480 const Teuchos::RCP<const export_type>& newExporter);
1514 template<
class DestViewType,
class SrcViewType,
1515 class DestOffsetViewType,
class SrcOffsetViewType >
1516 struct pack_functor {
1520 SrcOffsetViewType src_offset;
1521 DestOffsetViewType dest_offset;
1522 typedef typename DestOffsetViewType::non_const_value_type ScalarIndx;
1524 pack_functor(DestViewType dest_,
1525 const SrcViewType src_,
1526 DestOffsetViewType dest_offset_,
1527 const SrcOffsetViewType src_offset_):
1528 src(src_),dest(dest_),
1529 src_offset(src_offset_),dest_offset(dest_offset_) {};
1531 KOKKOS_INLINE_FUNCTION
1532 void operator() (
size_t row)
const {
1533 ScalarIndx i = src_offset(row);
1534 ScalarIndx j = dest_offset(row);
1535 const ScalarIndx k = dest_offset(row+1);
1544 template<
class CrsGraphType>
1545 friend Teuchos::RCP<CrsGraphType>
1546 importAndFillCompleteCrsGraph (
const Teuchos::RCP<const CrsGraphType>& sourceGraph,
1547 const Import<
typename CrsGraphType::local_ordinal_type,
1548 typename CrsGraphType::global_ordinal_type,
1549 typename CrsGraphType::node_type>& importer,
1550 const Teuchos::RCP<
const Map<
typename CrsGraphType::local_ordinal_type,
1551 typename CrsGraphType::global_ordinal_type,
1552 typename CrsGraphType::node_type> >& domainMap,
1553 const Teuchos::RCP<
const Map<
typename CrsGraphType::local_ordinal_type,
1554 typename CrsGraphType::global_ordinal_type,
1555 typename CrsGraphType::node_type> >& rangeMap,
1556 const Teuchos::RCP<Teuchos::ParameterList>& params);
1559 template<
class CrsGraphType>
1560 friend Teuchos::RCP<CrsGraphType>
1561 importAndFillCompleteCrsGraph (
const Teuchos::RCP<const CrsGraphType>& sourceGraph,
1562 const Import<
typename CrsGraphType::local_ordinal_type,
1563 typename CrsGraphType::global_ordinal_type,
1564 typename CrsGraphType::node_type>& rowImporter,
1565 const Import<
typename CrsGraphType::local_ordinal_type,
1566 typename CrsGraphType::global_ordinal_type,
1567 typename CrsGraphType::node_type>& domainImporter,
1568 const Teuchos::RCP<
const Map<
typename CrsGraphType::local_ordinal_type,
1569 typename CrsGraphType::global_ordinal_type,
1570 typename CrsGraphType::node_type> >& domainMap,
1571 const Teuchos::RCP<
const Map<
typename CrsGraphType::local_ordinal_type,
1572 typename CrsGraphType::global_ordinal_type,
1573 typename CrsGraphType::node_type> >& rangeMap,
1574 const Teuchos::RCP<Teuchos::ParameterList>& params);
1578 template<
class CrsGraphType>
1579 friend Teuchos::RCP<CrsGraphType>
1580 exportAndFillCompleteCrsGraph (
const Teuchos::RCP<const CrsGraphType>& sourceGraph,
1581 const Export<
typename CrsGraphType::local_ordinal_type,
1582 typename CrsGraphType::global_ordinal_type,
1583 typename CrsGraphType::node_type>& exporter,
1584 const Teuchos::RCP<
const Map<
typename CrsGraphType::local_ordinal_type,
1585 typename CrsGraphType::global_ordinal_type,
1586 typename CrsGraphType::node_type> >& domainMap,
1587 const Teuchos::RCP<
const Map<
typename CrsGraphType::local_ordinal_type,
1588 typename CrsGraphType::global_ordinal_type,
1589 typename CrsGraphType::node_type> >& rangeMap,
1590 const Teuchos::RCP<Teuchos::ParameterList>& params);
1593 template<
class CrsGraphType>
1594 friend Teuchos::RCP<CrsGraphType>
1595 exportAndFillCompleteCrsGraph (
const Teuchos::RCP<const CrsGraphType>& sourceGraph,
1596 const Export<
typename CrsGraphType::local_ordinal_type,
1597 typename CrsGraphType::global_ordinal_type,
1598 typename CrsGraphType::node_type>& rowExporter,
1599 const Export<
typename CrsGraphType::local_ordinal_type,
1600 typename CrsGraphType::global_ordinal_type,
1601 typename CrsGraphType::node_type>& domainExporter,
1602 const Teuchos::RCP<
const Map<
typename CrsGraphType::local_ordinal_type,
1603 typename CrsGraphType::global_ordinal_type,
1604 typename CrsGraphType::node_type> >& domainMap,
1605 const Teuchos::RCP<
const Map<
typename CrsGraphType::local_ordinal_type,
1606 typename CrsGraphType::global_ordinal_type,
1607 typename CrsGraphType::node_type> >& rangeMap,
1608 const Teuchos::RCP<Teuchos::ParameterList>& params);
1629 const Teuchos::RCP<const map_type>& domainMap,
1630 const Teuchos::RCP<const map_type>& rangeMap,
1631 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null)
const;
1652 const Teuchos::RCP<const map_type>& domainMap,
1653 const Teuchos::RCP<const map_type>& rangeMap,
1654 const Teuchos::RCP<Teuchos::ParameterList>& params)
const;
1675 const Teuchos::RCP<const map_type>& domainMap = Teuchos::null,
1676 const Teuchos::RCP<const map_type>& rangeMap = Teuchos::null,
1677 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null)
const;
1698 const Teuchos::RCP<const map_type>& domainMap,
1699 const Teuchos::RCP<const map_type>& rangeMap,
1700 const Teuchos::RCP<Teuchos::ParameterList>& params)
const;
1725 transferAndFillComplete (Teuchos::RCP<CrsGraph<local_ordinal_type, global_ordinal_type, Node> >& destGraph,
1726 const ::Tpetra::Details::Transfer<local_ordinal_type, global_ordinal_type, Node>& rowTransfer,
1727 const Teuchos::RCP<const ::Tpetra::Details::Transfer<local_ordinal_type, global_ordinal_type, Node> > & domainTransfer,
1728 const Teuchos::RCP<const map_type>& domainMap = Teuchos::null,
1729 const Teuchos::RCP<const map_type>& rangeMap = Teuchos::null,
1730 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null)
const;
1735 struct SLocalGlobalViews {
1736 Teuchos::ArrayView<const global_ordinal_type> ginds;
1737 Teuchos::ArrayView<const local_ordinal_type> linds;
1739 struct SLocalGlobalNCViews {
1740 Teuchos::ArrayView<global_ordinal_type> ginds;
1741 Teuchos::ArrayView<local_ordinal_type> linds;
1744 bool indicesAreAllocated ()
const;
1747 allocateIndices(
const ELocalGlobal lg,
const bool verbose=
false);
1783 std::pair<size_t, std::string>
1796 const bool useRemotePIDs);
1838 const SLocalGlobalViews& newInds,
1839 const ELocalGlobal lg,
1840 const ELocalGlobal I);
1854 const size_t numInputInds);
1868 const size_t numInputInds,
1869 std::function<
void(
const size_t,
const size_t,
const size_t)> fun =
1870 std::function<
void(
const size_t,
const size_t,
const size_t)>());
1874 const Teuchos::ArrayView<const local_ordinal_type>& gblColInds,
1875 std::function<
void(
const size_t,
const size_t,
const size_t)> fun =
1876 std::function<
void(
const size_t,
const size_t,
const size_t)>());
1895 const Teuchos::ArrayView<const global_ordinal_type>& indices,
1896 std::function<
void(
const size_t,
const size_t,
const size_t)> fun)
const;
1935#ifdef KOKKOS_ENABLE_SERIAL
1936 ! std::is_same<execution_space, Kokkos::Serial>::value;
1961 sortAndMergeAllIndices (
const bool sorted,
const bool merged);
1990 const Teuchos::RCP<const map_type>& rangeMap);
1992 void staticAssertions()
const;
1993 void clearGlobalConstants();
2018 bool haveLocalOffRankOffsets()
const {
return haveLocalOffRankOffsets_;}
2074 void fillLocalGraph (
const Teuchos::RCP<Teuchos::ParameterList>& params);
2082 void swap(CrsGraph<local_ordinal_type, global_ordinal_type, Node> & graph);
2117 Teuchos::OrdinalTraits<size_t>::invalid();
2123 Teuchos::OrdinalTraits<global_size_t>::invalid();
2130 Teuchos::OrdinalTraits<global_size_t>::invalid();
2144 row_ptrs_device_view_type rowPtrsUnpacked_dev_;
2145 mutable row_ptrs_host_view_type rowPtrsUnpacked_host_;
2150 row_ptrs_device_view_type rowPtrsPacked_dev_;
2151 mutable row_ptrs_host_view_type rowPtrsPacked_host_;
2154 bool packedUnpackedRowPtrsMatch_ =
false;
2157 void setRowPtrsUnpacked(
const row_ptrs_device_view_type &dview) {
2158 packedUnpackedRowPtrsMatch_ =
false;
2159 rowPtrsUnpacked_dev_ = dview;
2161 rowPtrsUnpacked_host_ = row_ptrs_host_view_type();
2167 return rowPtrsUnpacked_dev_;
2173 if(rowPtrsUnpacked_host_.extent(0) != rowPtrsUnpacked_dev_.extent(0))
2179 if constexpr(std::is_same_v<typename Node::memory_space, Kokkos::HostSpace>)
2181 rowPtrsUnpacked_host_ = rowPtrsUnpacked_dev_;
2186 typename row_ptrs_host_view_type::non_const_type rowPtrsTemp(
2187 Kokkos::view_alloc(Kokkos::WithoutInitializing,
"rowPtrsUnpacked_host_"), rowPtrsUnpacked_dev_.extent(0));
2188 Kokkos::deep_copy(rowPtrsTemp, rowPtrsUnpacked_dev_);
2189 rowPtrsUnpacked_host_= rowPtrsTemp;
2192 if(packedUnpackedRowPtrsMatch_)
2194 rowPtrsPacked_host_ = rowPtrsUnpacked_host_;
2197 return rowPtrsUnpacked_host_;
2200 void setRowPtrsPacked(
const row_ptrs_device_view_type &dview) {
2201 packedUnpackedRowPtrsMatch_ =
false;
2202 rowPtrsPacked_dev_ = dview;
2204 rowPtrsPacked_host_ = row_ptrs_host_view_type();
2210 return rowPtrsPacked_dev_;
2216 if(rowPtrsPacked_host_.extent(0) != rowPtrsPacked_dev_.extent(0))
2222 if constexpr(std::is_same_v<typename Node::memory_space, Kokkos::HostSpace>)
2224 rowPtrsPacked_host_ = rowPtrsPacked_dev_;
2229 typename row_ptrs_host_view_type::non_const_type rowPtrsTemp(
2230 Kokkos::view_alloc(Kokkos::WithoutInitializing,
"rowPtrsPacked_host_"), rowPtrsPacked_dev_.extent(0));
2231 Kokkos::deep_copy(rowPtrsTemp, rowPtrsPacked_dev_);
2232 rowPtrsPacked_host_= rowPtrsTemp;
2235 if(packedUnpackedRowPtrsMatch_)
2237 rowPtrsUnpacked_host_ = rowPtrsPacked_host_;
2240 return rowPtrsPacked_host_;
2247 void setRowPtrs(
const row_ptrs_device_view_type &dview) {
2248 packedUnpackedRowPtrsMatch_ =
true;
2249 rowPtrsUnpacked_dev_ = dview;
2250 rowPtrsPacked_dev_ = dview;
2252 rowPtrsUnpacked_host_ = row_ptrs_host_view_type();
2253 rowPtrsPacked_host_ = row_ptrs_host_view_type();
2306 typename local_inds_dualv_type::t_host::const_type
2312 typename local_inds_dualv_type::t_dev::const_type
2318 typename global_inds_dualv_type::t_host::const_type
2324 typename global_inds_dualv_type::t_dev::const_type
2330 typename local_inds_dualv_type::t_host
2362 typename Kokkos::View<const size_t*, device_type>::HostMirror
2447 Details::STORAGE_1D_UNPACKED;
2449 bool indicesAreAllocated_ =
false;
2450 bool indicesAreLocal_ =
false;
2451 bool indicesAreGlobal_ =
false;
2452 bool fillComplete_ =
false;
2464 mutable bool haveLocalOffRankOffsets_ =
false;
2466 typedef typename std::map<global_ordinal_type, std::vector<global_ordinal_type> > nonlocals_type;
2489 static bool getDebug();
2493 bool debug_ = getDebug();
2496 static bool getVerbose();
2501 bool verbose_ = getVerbose();
2505 mutable bool need_sync_host_uvm_access =
false;
2508 void set_need_sync_host_uvm_access() {
2509 need_sync_host_uvm_access =
true;
2513 void execute_sync_host_uvm_access()
const {
2514 if(need_sync_host_uvm_access) {
2516 need_sync_host_uvm_access =
false;
2528 template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
2529 Teuchos::RCP<CrsGraph<LocalOrdinal, GlobalOrdinal, Node> >
2533 size_t maxNumEntriesPerRow = 0,
2534 const Teuchos::RCP<Teuchos::ParameterList>& params =
2538 using graph_type = CrsGraph<LocalOrdinal, GlobalOrdinal, Node>;
2539 return rcp(
new graph_type(map, maxNumEntriesPerRow,
2592 template<
class CrsGraphType>
2593 Teuchos::RCP<CrsGraphType>
2595 const Import<
typename CrsGraphType::local_ordinal_type,
2596 typename CrsGraphType::global_ordinal_type,
2597 typename CrsGraphType::node_type>& importer,
2598 const Teuchos::RCP<
const Map<
typename CrsGraphType::local_ordinal_type,
2599 typename CrsGraphType::global_ordinal_type,
2600 typename CrsGraphType::node_type> >& domainMap = Teuchos::null,
2601 const Teuchos::RCP<
const Map<
typename CrsGraphType::local_ordinal_type,
2602 typename CrsGraphType::global_ordinal_type,
2603 typename CrsGraphType::node_type> >& rangeMap = Teuchos::null,
2604 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null)
2606 Teuchos::RCP<CrsGraphType> destGraph;
2607 sourceGraph->importAndFillComplete (destGraph,importer,domainMap, rangeMap, params);
2661 template<
class CrsGraphType>
2662 Teuchos::RCP<CrsGraphType>
2664 const Import<
typename CrsGraphType::local_ordinal_type,
2665 typename CrsGraphType::global_ordinal_type,
2666 typename CrsGraphType::node_type>& rowImporter,
2667 const Import<
typename CrsGraphType::local_ordinal_type,
2668 typename CrsGraphType::global_ordinal_type,
2669 typename CrsGraphType::node_type>& domainImporter,
2670 const Teuchos::RCP<
const Map<
typename CrsGraphType::local_ordinal_type,
2671 typename CrsGraphType::global_ordinal_type,
2672 typename CrsGraphType::node_type> >& domainMap,
2673 const Teuchos::RCP<
const Map<
typename CrsGraphType::local_ordinal_type,
2674 typename CrsGraphType::global_ordinal_type,
2675 typename CrsGraphType::node_type> >& rangeMap,
2676 const Teuchos::RCP<Teuchos::ParameterList>& params)
2678 Teuchos::RCP<CrsGraphType> destGraph;
2679 sourceGraph->importAndFillComplete (destGraph,rowImporter,domainImporter, domainMap, rangeMap, params);
2716 template<
class CrsGraphType>
2717 Teuchos::RCP<CrsGraphType>
2719 const Export<
typename CrsGraphType::local_ordinal_type,
2720 typename CrsGraphType::global_ordinal_type,
2721 typename CrsGraphType::node_type>& exporter,
2722 const Teuchos::RCP<
const Map<
typename CrsGraphType::local_ordinal_type,
2723 typename CrsGraphType::global_ordinal_type,
2724 typename CrsGraphType::node_type> >& domainMap = Teuchos::null,
2725 const Teuchos::RCP<
const Map<
typename CrsGraphType::local_ordinal_type,
2726 typename CrsGraphType::global_ordinal_type,
2727 typename CrsGraphType::node_type> >& rangeMap = Teuchos::null,
2728 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null)
2730 Teuchos::RCP<CrsGraphType> destGraph;
2731 sourceGraph->exportAndFillComplete (destGraph,exporter,domainMap, rangeMap, params);
2768 template<
class CrsGraphType>
2769 Teuchos::RCP<CrsGraphType>
2771 const Export<
typename CrsGraphType::local_ordinal_type,
2772 typename CrsGraphType::global_ordinal_type,
2773 typename CrsGraphType::node_type>& rowExporter,
2774 const Export<
typename CrsGraphType::local_ordinal_type,
2775 typename CrsGraphType::global_ordinal_type,
2776 typename CrsGraphType::node_type>& domainExporter,
2777 const Teuchos::RCP<
const Map<
typename CrsGraphType::local_ordinal_type,
2778 typename CrsGraphType::global_ordinal_type,
2779 typename CrsGraphType::node_type> >& domainMap,
2780 const Teuchos::RCP<
const Map<
typename CrsGraphType::local_ordinal_type,
2781 typename CrsGraphType::global_ordinal_type,
2782 typename CrsGraphType::node_type> >& rangeMap,
2783 const Teuchos::RCP<Teuchos::ParameterList>& params)
2785 Teuchos::RCP<CrsGraphType> destGraph;
2786 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...
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_
size_t sortAndMergeRowIndices(const RowInfo &rowInfo, const bool sorted, const bool merged)
Sort and merge duplicate column indices in the given row.
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.
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).
void computeLocalConstants()
Compute local constants, if they have not yet been computed.
typename row_graph_type::local_inds_device_view_type local_inds_device_view_type
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...
Kokkos::View< size_t *, Kokkos::LayoutLeft, device_type >::HostMirror num_row_entries_type
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.
Kokkos::StaticCrsGraph< local_ordinal_type, Kokkos::LayoutLeft, device_type, void, size_t > local_graph_device_type
global_size_t globalNumEntries_
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)
Constructor specifying column Map and a local graph, which the resulting CrsGraph views....
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.
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.
Kokkos::View< constsize_t *, device_type >::HostMirror k_numAllocPerRow_
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,...
virtual ~CrsGraph()=default
Destructor (virtual for memory safety of derived classes).
typename row_graph_type::global_inds_device_view_type global_inds_device_view_type
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.
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)
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.
Kokkos::Device< typename device_type::execution_space, buffer_memory_space > buffer_device_type
Kokkos::Device specialization for communication buffers.
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.