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"
24#include "Tpetra_Details_makeColMap.hpp"
26#include "KokkosSparse_findRelOffset.hpp"
27#include "Kokkos_DualView.hpp"
29#include "Teuchos_CommHelpers.hpp"
30#include "Teuchos_Describable.hpp"
31#include "Teuchos_OrdinalTraits.hpp"
32#include "Teuchos_ParameterListAcceptorDefaultBase.hpp"
34#include "KokkosSparse_StaticCrsGraph.hpp"
42template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
43class crsGraph_Swap_Tester;
45#ifndef DOXYGEN_SHOULD_SKIP_THIS
47template <
class LocalOrdinal,
54template <
class ViewType>
56 static_assert(Kokkos::is_view<ViewType>::value,
57 "ViewType must be a Kokkos::View specialization.");
61 typedef Kokkos::View<
typename ViewType::data_type,
62 typename ViewType::array_layout,
63 typename ViewType::device_type,
64 Kokkos::MemoryUnmanaged>
188template <
class LocalOrdinal,
196 public Teuchos::ParameterListAcceptorDefaultBase {
197 template <
class S,
class LO,
class GO,
class N>
199 template <
class LO2,
class GO2,
class N2>
201 template <
class LO,
class GO,
class N>
240 using local_inds_dualv_type =
241 Kokkos::DualView<local_ordinal_type*, device_type>;
246 using global_inds_dualv_type =
247 Kokkos::DualView<global_ordinal_type*, device_type>;
253 using row_ptrs_device_view_type =
254 typename row_graph_type::row_ptrs_device_view_type;
255 using row_ptrs_host_view_type =
256 typename row_graph_type::row_ptrs_host_view_type;
260 typename row_graph_type::local_inds_device_view_type;
261 using local_inds_host_view_type =
262 typename row_graph_type::local_inds_host_view_type;
263 using nonconst_local_inds_host_view_type =
264 typename row_graph_type::nonconst_local_inds_host_view_type;
268 typename row_graph_type::global_inds_device_view_type;
269 using global_inds_host_view_type =
270 typename row_graph_type::global_inds_host_view_type;
271 using nonconst_global_inds_host_view_type =
272 typename row_graph_type::nonconst_global_inds_host_view_type;
274 using offset_device_view_type =
275 typename row_ptrs_device_view_type::non_const_type;
292 CrsGraph(
const Teuchos::RCP<const map_type>& rowMap,
294 const Teuchos::RCP<Teuchos::ParameterList>&
params = Teuchos::null);
308 CrsGraph(
const Teuchos::RCP<const map_type>& rowMap,
309 const Kokkos::DualView<const size_t*, device_type>&
numEntPerRow,
310 const Teuchos::RCP<Teuchos::ParameterList>&
params = Teuchos::null);
325 CrsGraph(
const Teuchos::RCP<const map_type>& rowMap,
327 const Teuchos::RCP<Teuchos::ParameterList>&
params = Teuchos::null);
345 CrsGraph(
const Teuchos::RCP<const map_type>& rowMap,
346 const Teuchos::RCP<const map_type>& colMap,
348 const Teuchos::RCP<Teuchos::ParameterList>&
params = Teuchos::null);
364 CrsGraph(
const Teuchos::RCP<const map_type>& rowMap,
365 const Teuchos::RCP<const map_type>& colMap,
366 const Kokkos::DualView<const size_t*, device_type>&
numEntPerRow,
367 const Teuchos::RCP<Teuchos::ParameterList>&
params = Teuchos::null);
384 CrsGraph(
const Teuchos::RCP<const map_type>& rowMap,
385 const Teuchos::RCP<const map_type>& colMap,
387 const Teuchos::RCP<Teuchos::ParameterList>&
params = Teuchos::null);
401 const Teuchos::RCP<const map_type>& rowMap,
402 const Teuchos::RCP<Teuchos::ParameterList>&
params = Teuchos::null);
426 CrsGraph(
const Teuchos::RCP<const map_type>& rowMap,
427 const Teuchos::RCP<const map_type>& colMap,
428 const typename local_graph_device_type::row_map_type&
rowPointers,
429 const typename local_graph_device_type::entries_type::non_const_type&
columnIndices,
430 const Teuchos::RCP<Teuchos::ParameterList>&
params = Teuchos::null);
454 CrsGraph(
const Teuchos::RCP<const map_type>& rowMap,
455 const Teuchos::RCP<const map_type>& colMap,
458 const Teuchos::RCP<Teuchos::ParameterList>&
params = Teuchos::null);
481 CrsGraph(
const Teuchos::RCP<const map_type>& rowMap,
482 const Teuchos::RCP<const map_type>& colMap,
484 const Teuchos::RCP<Teuchos::ParameterList>&
params = Teuchos::null);
513 const Teuchos::RCP<const map_type>& rowMap,
514 const Teuchos::RCP<const map_type>& colMap,
515 const Teuchos::RCP<const map_type>& domainMap = Teuchos::null,
516 const Teuchos::RCP<const map_type>&
rangeMap = Teuchos::null,
517 const Teuchos::RCP<Teuchos::ParameterList>&
params = Teuchos::null);
524 const Teuchos::RCP<const map_type>& rowMap,
525 const Teuchos::RCP<const map_type>& colMap,
526 const Teuchos::RCP<const map_type>& domainMap,
527 const Teuchos::RCP<const map_type>&
rangeMap,
528 const Teuchos::RCP<const import_type>&
importer,
529 const Teuchos::RCP<const export_type>&
exporter,
530 const Teuchos::RCP<Teuchos::ParameterList>&
params =
576 const Teuchos::RCP<const map_type>& rowMap,
577 const Teuchos::RCP<const map_type>& colMap,
578 const Teuchos::RCP<const map_type>& domainMap,
579 const Teuchos::RCP<const map_type>&
rangeMap,
580 const Teuchos::RCP<const import_type>&
importer,
581 const Teuchos::RCP<const export_type>&
exporter,
582 const Teuchos::RCP<Teuchos::ParameterList>&
params =
663 Teuchos::RCP<const Teuchos::ParameterList>
693 const Teuchos::ArrayView<const global_ordinal_type>& indices);
723 const Teuchos::ArrayView<const local_ordinal_type>& indices);
821 fillComplete(
const Teuchos::RCP<const map_type>& domainMap,
822 const Teuchos::RCP<const map_type>&
rangeMap,
823 const Teuchos::RCP<Teuchos::ParameterList>&
params = Teuchos::null);
885 const Teuchos::RCP<const map_type>&
rangeMap,
886 const Teuchos::RCP<const import_type>&
importer =
888 const Teuchos::RCP<const export_type>&
exporter =
890 const Teuchos::RCP<Teuchos::ParameterList>&
params =
897 Teuchos::RCP<const Teuchos::Comm<int>>
getComm()
const override;
900 Teuchos::RCP<const map_type>
getRowMap()
const override;
903 Teuchos::RCP<const map_type>
getColMap()
const override;
906 Teuchos::RCP<const map_type>
getDomainMap()
const override;
909 Teuchos::RCP<const map_type>
getRangeMap()
const override;
912 Teuchos::RCP<const import_type>
getImporter()
const override;
915 Teuchos::RCP<const export_type>
getExporter()
const override;
1095 nonconst_global_inds_host_view_type&
gblColInds,
1107 nonconst_local_inds_host_view_type&
gblColInds,
1123 global_inds_host_view_type&
gblColInds)
const override;
1142 local_inds_host_view_type&
lclColInds)
const override;
1155 const Teuchos::EVerbosityLevel
verbLevel =
1156 Teuchos::Describable::verbLevel_default)
const override;
1179 const size_t numSameIDs,
1186 void copyAndPermuteNew(
1189 const size_t numSameIDs,
1190 const Kokkos::DualView<const local_ordinal_type*, buffer_device_type>&
permuteToLIDs,
1191 const Kokkos::DualView<const local_ordinal_type*, buffer_device_type>&
permuteFromLIDs,
1194 void insertGlobalIndicesDevice(
1197 const Kokkos::DualView<const local_ordinal_type*, buffer_device_type>&
permuteToLIDs,
1198 const Kokkos::DualView<const local_ordinal_type*, buffer_device_type>&
permuteFromLIDs,
1206 const bool verbose);
1208 std::unique_ptr<padding_type>
1212 const size_t numSameIDs,
1217 const bool verbose)
const;
1220 std::unique_ptr<padding_type>
1221 computeCrsPaddingForImports(
1224 Kokkos::DualView<packet_type*, buffer_device_type> imports,
1226 const bool verbose)
const;
1228 std::unique_ptr<padding_type>
1229 computePaddingForCrsMatrixUnpack(
1232 Kokkos::DualView<char*, buffer_device_type> imports,
1234 const bool verbose)
const;
1237 computeCrsPaddingForSameIDs(
1244 computeCrsPaddingForPermutedIDs(
1256 const Kokkos::DualView<const local_ordinal_type*, buffer_device_type>&
exportLIDs,
1257 Kokkos::DualView<packet_type*, buffer_device_type>& exports,
1267 pack(
const Teuchos::ArrayView<const local_ordinal_type>&
exportLIDs,
1268 Teuchos::Array<global_ordinal_type>& exports,
1273 packFillActive(
const Teuchos::ArrayView<const local_ordinal_type>&
exportLIDs,
1274 Teuchos::Array<global_ordinal_type>& exports,
1283 Kokkos::DualView<
size_t*,
1299 Kokkos::DualView<
size_t*,
1352 getLocalDiagOffsets(
const Kokkos::View<size_t*, device_type, Kokkos::MemoryUnmanaged>& offsets)
const;
1381 const typename local_graph_device_type::entries_type::non_const_type&
columnIndices);
1394 const Teuchos::ArrayRCP<local_ordinal_type>&
columnIndices);
1451 const Teuchos::RCP<const import_type>&
newImport = Teuchos::null,
1478 const Teuchos::RCP<const import_type>&
newImporter);
1504 const Teuchos::RCP<const export_type>&
newExporter);
1540 struct pack_functor {
1546 typedef typename DestOffsetViewType::non_const_value_type ScalarIndx;
1554 , src_offset(src_offset_)
1558 void operator()(
size_t row)
const {
1559 ScalarIndx
i = src_offset(row);
1560 ScalarIndx
j = dest_offset(row);
1561 const ScalarIndx
k = dest_offset(row + 1);
1562 for (;
j <
k;
j++,
i++) {
1570 template <
class CrsGraphType>
1571 friend Teuchos::RCP<CrsGraphType>
1572 importAndFillCompleteCrsGraph(
const Teuchos::RCP<const CrsGraphType>& sourceGraph,
1573 const Import<
typename CrsGraphType::local_ordinal_type,
1574 typename CrsGraphType::global_ordinal_type,
1575 typename CrsGraphType::node_type>& importer,
1576 const Teuchos::RCP<
const Map<
typename CrsGraphType::local_ordinal_type,
1577 typename CrsGraphType::global_ordinal_type,
1578 typename CrsGraphType::node_type>>& domainMap,
1579 const Teuchos::RCP<
const Map<
typename CrsGraphType::local_ordinal_type,
1580 typename CrsGraphType::global_ordinal_type,
1581 typename CrsGraphType::node_type>>& rangeMap,
1582 const Teuchos::RCP<Teuchos::ParameterList>& params);
1585 template <
class CrsGraphType>
1586 friend Teuchos::RCP<CrsGraphType>
1587 importAndFillCompleteCrsGraph(
const Teuchos::RCP<const CrsGraphType>& sourceGraph,
1588 const Import<
typename CrsGraphType::local_ordinal_type,
1589 typename CrsGraphType::global_ordinal_type,
1590 typename CrsGraphType::node_type>& rowImporter,
1591 const Import<
typename CrsGraphType::local_ordinal_type,
1592 typename CrsGraphType::global_ordinal_type,
1593 typename CrsGraphType::node_type>& domainImporter,
1594 const Teuchos::RCP<
const Map<
typename CrsGraphType::local_ordinal_type,
1595 typename CrsGraphType::global_ordinal_type,
1596 typename CrsGraphType::node_type>>& domainMap,
1597 const Teuchos::RCP<
const Map<
typename CrsGraphType::local_ordinal_type,
1598 typename CrsGraphType::global_ordinal_type,
1599 typename CrsGraphType::node_type>>& rangeMap,
1600 const Teuchos::RCP<Teuchos::ParameterList>& params);
1603 template <
class CrsGraphType>
1604 friend Teuchos::RCP<CrsGraphType>
1605 exportAndFillCompleteCrsGraph(
const Teuchos::RCP<const CrsGraphType>& sourceGraph,
1606 const Export<
typename CrsGraphType::local_ordinal_type,
1607 typename CrsGraphType::global_ordinal_type,
1608 typename CrsGraphType::node_type>& exporter,
1609 const Teuchos::RCP<
const Map<
typename CrsGraphType::local_ordinal_type,
1610 typename CrsGraphType::global_ordinal_type,
1611 typename CrsGraphType::node_type>>& domainMap,
1612 const Teuchos::RCP<
const Map<
typename CrsGraphType::local_ordinal_type,
1613 typename CrsGraphType::global_ordinal_type,
1614 typename CrsGraphType::node_type>>& rangeMap,
1615 const Teuchos::RCP<Teuchos::ParameterList>& params);
1618 template <
class CrsGraphType>
1619 friend Teuchos::RCP<CrsGraphType>
1620 exportAndFillCompleteCrsGraph(
const Teuchos::RCP<const CrsGraphType>& sourceGraph,
1621 const Export<
typename CrsGraphType::local_ordinal_type,
1622 typename CrsGraphType::global_ordinal_type,
1623 typename CrsGraphType::node_type>& rowExporter,
1624 const Export<
typename CrsGraphType::local_ordinal_type,
1625 typename CrsGraphType::global_ordinal_type,
1626 typename CrsGraphType::node_type>& domainExporter,
1627 const Teuchos::RCP<
const Map<
typename CrsGraphType::local_ordinal_type,
1628 typename CrsGraphType::global_ordinal_type,
1629 typename CrsGraphType::node_type>>& domainMap,
1630 const Teuchos::RCP<
const Map<
typename CrsGraphType::local_ordinal_type,
1631 typename CrsGraphType::global_ordinal_type,
1632 typename CrsGraphType::node_type>>& rangeMap,
1633 const Teuchos::RCP<Teuchos::ParameterList>& params);
1636 template <
class LO,
class GO,
class NT>
1639 Teuchos::Array<int>& remotePIDs,
1641 const CrsGraph<LO, GO, NT>& graph,
1642 const bool sortEachProcsGids,
1643 std::ostream* errStrm);
1662 importAndFillComplete(Teuchos::RCP<CrsGraph<local_ordinal_type, global_ordinal_type, Node>>& destGraph,
1664 const Teuchos::RCP<const map_type>& domainMap,
1665 const Teuchos::RCP<const map_type>& rangeMap,
1666 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null)
const;
1684 importAndFillComplete(Teuchos::RCP<CrsGraph<local_ordinal_type, global_ordinal_type, Node>>& destGraph,
1687 const Teuchos::RCP<const map_type>& domainMap,
1688 const Teuchos::RCP<const map_type>& rangeMap,
1689 const Teuchos::RCP<Teuchos::ParameterList>& params)
const;
1707 exportAndFillComplete(Teuchos::RCP<CrsGraph<local_ordinal_type, global_ordinal_type, Node>>& destGraph,
1709 const Teuchos::RCP<const map_type>& domainMap = Teuchos::null,
1710 const Teuchos::RCP<const map_type>& rangeMap = Teuchos::null,
1711 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null)
const;
1729 exportAndFillComplete(Teuchos::RCP<CrsGraph<local_ordinal_type, global_ordinal_type, Node>>& destGraph,
1732 const Teuchos::RCP<const map_type>& domainMap,
1733 const Teuchos::RCP<const map_type>& rangeMap,
1734 const Teuchos::RCP<Teuchos::ParameterList>& params)
const;
1758 transferAndFillComplete(Teuchos::RCP<CrsGraph<local_ordinal_type, global_ordinal_type, Node>>& destGraph,
1759 const ::Tpetra::Details::Transfer<local_ordinal_type, global_ordinal_type, Node>& rowTransfer,
1760 const Teuchos::RCP<const ::Tpetra::Details::Transfer<local_ordinal_type, global_ordinal_type, Node>>& domainTransfer,
1761 const Teuchos::RCP<const map_type>& domainMap = Teuchos::null,
1762 const Teuchos::RCP<const map_type>& rangeMap = Teuchos::null,
1763 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null)
const;
1768 struct SLocalGlobalViews {
1769 Teuchos::ArrayView<const global_ordinal_type> ginds;
1770 Teuchos::ArrayView<const local_ordinal_type> linds;
1772 struct SLocalGlobalNCViews {
1773 Teuchos::ArrayView<global_ordinal_type> ginds;
1774 Teuchos::ArrayView<local_ordinal_type> linds;
1777 bool indicesAreAllocated()
const;
1780 allocateIndices(
const ELocalGlobal lg,
const bool verbose =
false);
1794 void makeColMap(Teuchos::Array<int>& remotePIDs);
1816 std::pair<size_t, std::string>
1829 const bool useRemotePIDs);
1871 const SLocalGlobalViews& newInds,
1872 const ELocalGlobal lg,
1873 const ELocalGlobal I);
1887 const size_t numInputInds);
1901 const size_t numInputInds,
1902 std::function<
void(
const size_t,
const size_t,
const size_t)> fun =
1903 std::function<
void(
const size_t,
const size_t,
const size_t)>());
1907 const Teuchos::ArrayView<const local_ordinal_type>& gblColInds,
1908 std::function<
void(
const size_t,
const size_t,
const size_t)> fun =
1909 std::function<
void(
const size_t,
const size_t,
const size_t)>());
1928 const Teuchos::ArrayView<const global_ordinal_type>& indices,
1929 std::function<
void(
const size_t,
const size_t,
const size_t)> fun)
const;
1968#ifdef KOKKOS_ENABLE_SERIAL
1969 !std::is_same<execution_space, Kokkos::Serial>::value;
1994 sortAndMergeAllIndices(
const bool sorted,
const bool merged);
2012 const Teuchos::RCP<const map_type>&
rangeMap);
2014 void staticAssertions()
const;
2015 void clearGlobalConstants();
2040 bool haveLocalOffRankOffsets()
const {
return haveLocalOffRankOffsets_; }
2094 void fillLocalGraph(
const Teuchos::RCP<Teuchos::ParameterList>& params);
2102 void swap(CrsGraph<local_ordinal_type, global_ordinal_type, Node>& graph);
2136 Teuchos::OrdinalTraits<size_t>::invalid();
2142 Teuchos::OrdinalTraits<global_size_t>::invalid();
2149 Teuchos::OrdinalTraits<global_size_t>::invalid();
2163 row_ptrs_device_view_type rowPtrsUnpacked_dev_;
2164 mutable row_ptrs_host_view_type rowPtrsUnpacked_host_;
2169 row_ptrs_device_view_type rowPtrsPacked_dev_;
2170 mutable row_ptrs_host_view_type rowPtrsPacked_host_;
2173 bool packedUnpackedRowPtrsMatch_ =
false;
2176 void setRowPtrsUnpacked(
const row_ptrs_device_view_type&
dview) {
2177 packedUnpackedRowPtrsMatch_ =
false;
2178 rowPtrsUnpacked_dev_ =
dview;
2180 rowPtrsUnpacked_host_ = row_ptrs_host_view_type();
2185 return rowPtrsUnpacked_dev_;
2190 if (rowPtrsUnpacked_host_.extent(0) != rowPtrsUnpacked_dev_.extent(0)) {
2195 if constexpr (std::is_same_v<typename Node::memory_space, Kokkos::HostSpace>) {
2196 rowPtrsUnpacked_host_ = rowPtrsUnpacked_dev_;
2199 typename row_ptrs_host_view_type::non_const_type
rowPtrsTemp(
2200 Kokkos::view_alloc(Kokkos::WithoutInitializing,
"rowPtrsUnpacked_host_"), rowPtrsUnpacked_dev_.extent(0));
2201 Kokkos::deep_copy(
rowPtrsTemp, rowPtrsUnpacked_dev_);
2205 if (packedUnpackedRowPtrsMatch_) {
2206 rowPtrsPacked_host_ = rowPtrsUnpacked_host_;
2209 return rowPtrsUnpacked_host_;
2212 void setRowPtrsPacked(
const row_ptrs_device_view_type&
dview) {
2213 packedUnpackedRowPtrsMatch_ =
false;
2214 rowPtrsPacked_dev_ =
dview;
2216 rowPtrsPacked_host_ = row_ptrs_host_view_type();
2221 return rowPtrsPacked_dev_;
2226 if (rowPtrsPacked_host_.extent(0) != rowPtrsPacked_dev_.extent(0)) {
2231 if constexpr (std::is_same_v<typename Node::memory_space, Kokkos::HostSpace>) {
2232 rowPtrsPacked_host_ = rowPtrsPacked_dev_;
2235 typename row_ptrs_host_view_type::non_const_type
rowPtrsTemp(
2236 Kokkos::view_alloc(Kokkos::WithoutInitializing,
"rowPtrsPacked_host_"), rowPtrsPacked_dev_.extent(0));
2237 Kokkos::deep_copy(
rowPtrsTemp, rowPtrsPacked_dev_);
2241 if (packedUnpackedRowPtrsMatch_) {
2242 rowPtrsUnpacked_host_ = rowPtrsPacked_host_;
2245 return rowPtrsPacked_host_;
2252 void setRowPtrs(
const row_ptrs_device_view_type&
dview) {
2253 packedUnpackedRowPtrsMatch_ =
true;
2254 rowPtrsUnpacked_dev_ =
dview;
2255 rowPtrsPacked_dev_ =
dview;
2257 rowPtrsUnpacked_host_ = row_ptrs_host_view_type();
2258 rowPtrsPacked_host_ = row_ptrs_host_view_type();
2311 typename local_inds_dualv_type::t_host::const_type
2317 typename local_inds_dualv_type::t_dev::const_type
2323 typename global_inds_dualv_type::t_host::const_type
2329 typename global_inds_dualv_type::t_dev::const_type
2335 typename local_inds_dualv_type::t_host
2367 typename Kokkos::View<const size_t*, device_type>::host_mirror_type
2452 Details::STORAGE_1D_UNPACKED;
2454 bool indicesAreAllocated_ =
false;
2455 bool indicesAreLocal_ =
false;
2456 bool indicesAreGlobal_ =
false;
2457 bool fillComplete_ =
false;
2469 mutable bool haveLocalOffRankOffsets_ =
false;
2471 typedef typename std::map<global_ordinal_type, std::vector<global_ordinal_type>> nonlocals_type;
2494 static bool getDebug();
2498 bool debug_ = getDebug();
2501 static bool getVerbose();
2506 bool verbose_ = getVerbose();
2510 mutable bool need_sync_host_uvm_access =
false;
2513 void set_need_sync_host_uvm_access() {
2514 need_sync_host_uvm_access =
true;
2518 void execute_sync_host_uvm_access()
const {
2519 if (need_sync_host_uvm_access) {
2520 Kokkos::fence(
"CrsGraph::execute_sync_host_uvm_access");
2521 need_sync_host_uvm_access =
false;
2533template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
2534Teuchos::RCP<CrsGraph<LocalOrdinal, GlobalOrdinal, Node>>
2539 const Teuchos::RCP<Teuchos::ParameterList>&
params =
2596template <
class CrsGraphType>
2597Teuchos::RCP<CrsGraphType>
2599 const Import<
typename CrsGraphType::local_ordinal_type,
2600 typename CrsGraphType::global_ordinal_type,
2601 typename CrsGraphType::node_type>&
importer,
2602 const Teuchos::RCP<
const Map<
typename CrsGraphType::local_ordinal_type,
2603 typename CrsGraphType::global_ordinal_type,
2604 typename CrsGraphType::node_type>>& domainMap = Teuchos::null,
2605 const Teuchos::RCP<
const Map<
typename CrsGraphType::local_ordinal_type,
2606 typename CrsGraphType::global_ordinal_type,
2607 typename CrsGraphType::node_type>>&
rangeMap = Teuchos::null,
2608 const Teuchos::RCP<Teuchos::ParameterList>&
params = Teuchos::null) {
2664template <
class CrsGraphType>
2665Teuchos::RCP<CrsGraphType>
2667 const Import<
typename CrsGraphType::local_ordinal_type,
2668 typename CrsGraphType::global_ordinal_type,
2670 const Import<
typename CrsGraphType::local_ordinal_type,
2671 typename CrsGraphType::global_ordinal_type,
2673 const Teuchos::RCP<
const Map<
typename CrsGraphType::local_ordinal_type,
2674 typename CrsGraphType::global_ordinal_type,
2675 typename CrsGraphType::node_type>>& domainMap,
2676 const Teuchos::RCP<
const Map<
typename CrsGraphType::local_ordinal_type,
2677 typename CrsGraphType::global_ordinal_type,
2678 typename CrsGraphType::node_type>>&
rangeMap,
2679 const Teuchos::RCP<Teuchos::ParameterList>&
params) {
2718template <
class CrsGraphType>
2719Teuchos::RCP<CrsGraphType>
2721 const Export<
typename CrsGraphType::local_ordinal_type,
2722 typename CrsGraphType::global_ordinal_type,
2723 typename CrsGraphType::node_type>&
exporter,
2724 const Teuchos::RCP<
const Map<
typename CrsGraphType::local_ordinal_type,
2725 typename CrsGraphType::global_ordinal_type,
2726 typename CrsGraphType::node_type>>& domainMap = Teuchos::null,
2727 const Teuchos::RCP<
const Map<
typename CrsGraphType::local_ordinal_type,
2728 typename CrsGraphType::global_ordinal_type,
2729 typename CrsGraphType::node_type>>&
rangeMap = Teuchos::null,
2730 const Teuchos::RCP<Teuchos::ParameterList>&
params = Teuchos::null) {
2769template <
class CrsGraphType>
2770Teuchos::RCP<CrsGraphType>
2772 const Export<
typename CrsGraphType::local_ordinal_type,
2773 typename CrsGraphType::global_ordinal_type,
2775 const Export<
typename CrsGraphType::local_ordinal_type,
2776 typename CrsGraphType::global_ordinal_type,
2778 const Teuchos::RCP<
const Map<
typename CrsGraphType::local_ordinal_type,
2779 typename CrsGraphType::global_ordinal_type,
2780 typename CrsGraphType::node_type>>& domainMap,
2781 const Teuchos::RCP<
const Map<
typename CrsGraphType::local_ordinal_type,
2782 typename CrsGraphType::global_ordinal_type,
2783 typename CrsGraphType::node_type>>&
rangeMap,
2784 const Teuchos::RCP<Teuchos::ParameterList>&
params) {
Forward declaration of Tpetra::BlockCrsMatrix.
Forward declaration of Tpetra::CrsGraph.
Forward declaration of Tpetra::CrsMatrix.
Stand-alone utility functions and macros.
A distributed graph accessed by rows (adjacency lists) and stored sparsely.
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...
global_size_t globalMaxNumRowEntries_
Global maximum of the number of entries in each row.
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
Row offsets for "1-D" storage.
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_
Status of the graph's storage, when not in a fill-complete state.
::Tpetra::Import< LocalOrdinal, GlobalOrdinal, Node > import_type
The Import specialization used by this class.
global_ordinal_type packet_type
Type of each entry of the DistObject communication buffer.
GlobalOrdinal global_ordinal_type
The type of the graph's global indices.
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_
The Map describing the range of the (matrix corresponding to the) graph.
std::pair< size_t, std::string > makeIndicesLocal(const bool verbose=false)
Convert column indices from global to local.
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
Local ordinals of column indices for all rows Valid when isLocallyIndexed is true If OptimizedStorage...
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
Global ordinals of column indices for all rows.
size_t nodeMaxNumRowEntries_
Local maximum of the number of entries in each row.
Teuchos::RCP< const import_type > importer_
The Import from the domain Map to the column Map.
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_
The number of local entries in each locally owned row.
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_
The maximum number of entries to allow in each locally owned row.
bool hasColMap() const override
Whether the graph has a column Map.
LocalOrdinal local_ordinal_type
The type of the graph's local indices.
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.
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.
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.
typename local_graph_device_type::host_mirror_type local_graph_host_type
The type of the part of the sparse graph on each MPI process.
void setParameterList(const Teuchos::RCP< Teuchos::ParameterList > ¶ms) override
Set the given list of parameters (must be nonnull).
static const bool useAtomicUpdatesByDefault
Whether transformLocalValues should use atomic updates by default.
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::device_type device_type
This class' Kokkos 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
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...
KokkosSparse::StaticCrsGraph< local_ordinal_type, Kokkos::LayoutLeft, device_type, void, size_t > local_graph_device_type
The type of the part of the sparse graph on each MPI process.
Teuchos::RCP< const map_type > colMap_
The Map describing the distribution of columns of the graph.
bool noRedundancies_
Whether the graph's indices are non-redundant (merged) in each row, on this process.
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.
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.
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 swap(CrsGraph< local_ordinal_type, global_ordinal_type, Node > &graph)
Swaps the data from *this with the data and maps from graph.
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.
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 &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_
Whether all processes have computed global constants.
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.
typename dist_object_type::buffer_device_type buffer_device_type
Kokkos::Device specialization for communication buffers.
Teuchos::RCP< const map_type > getRangeMap() const override
Returns the Map associated with the domain of this graph.
typename row_graph_type::global_inds_device_view_type global_inds_device_view_type
The Kokkos::View type for views of global ordinals on device and host.
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_
Whether to require makeColMap() (and therefore fillComplete()) to order column Map GIDs associated wi...
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
This class' Kokkos 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.
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_
Global number of entries in the graph.
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< LocalOrdinal, GlobalOrdinal, Node > export_type
The Export specialization used by this class.
size_t getLocalNumEntries() const override
The local number of entries in the graph.
Teuchos::RCP< const import_type > getImporter() const override
Returns the importer associated with this graph.
local_inds_wdv_type lclIndsPacked_wdv
Local ordinals of column indices for all rows Valid when isLocallyIndexed is true Built during fillCo...
Teuchos::RCP< const map_type > domainMap_
The Map describing the domain of the (matrix corresponding to the) graph.
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_
Nonlocal data given to insertGlobalIndices.
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.
typename row_graph_type::local_inds_device_view_type local_inds_device_view_type
The Kokkos::View type for views of local ordinals on device and host.
Kokkos::View< constsize_t *, device_type >::host_mirror_type k_numAllocPerRow_
The maximum number of entries to allow in each locally owned row, per row.
bool indicesAreSorted_
Whether the graph's indices are sorted in each row, on this process.
Node node_type
This class' Kokkos Node type.
Teuchos::RCP< const export_type > exporter_
The Export from the row Map to the range Map.
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.
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).
offset_device_view_type k_offRankOffsets_
The offsets for off-rank entries.
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_
The Map describing the distribution of rows of the graph.
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().
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.
bool haveLocalConstants_
Whether this process has computed local constants.
Sparse matrix that presents a row-oriented interface that lets users read or modify entries.
Struct that holds views of the contents of a CrsMatrix.
Keep track of how much more space a CrsGraph or CrsMatrix needs, when the graph or matrix is the targ...
Base class for distributed Tpetra objects that support data redistribution.
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).
Kokkos::Device< typename device_type::execution_space, buffer_memory_space > buffer_device_type
Kokkos::Device specialization for communication buffers.
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...
A distributed graph accessed by rows (adjacency lists) and stored sparsely.
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.
int makeColMap(Teuchos::RCP< const Tpetra::Map< LO, GO, NT > > &colMap, Teuchos::Array< int > &remotePIDs, const Teuchos::RCP< const Tpetra::Map< LO, GO, NT > > &domMap, const CrsGraph< LO, GO, NT > &graph, const bool sortEachProcsGids=true, std::ostream *errStrm=NULL)
Make the graph's column Map.
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.
CombineMode
Rule for combining data in an Import or Export.
Allocation information for a locally owned row in a CrsGraph or CrsMatrix.