10#ifndef MUELU_AGGREGATES_DECL_HPP
11#define MUELU_AGGREGATES_DECL_HPP
17#include <Xpetra_Map_fwd.hpp>
18#include <Xpetra_Vector_fwd.hpp>
19#include <Xpetra_VectorFactory_fwd.hpp>
20#include <Xpetra_MultiVector_fwd.hpp>
24#include "MueLu_LWGraph_kokkos.hpp"
26#include "MueLu_LWGraph.hpp"
27#include "MueLu_IndexManager.hpp"
28#include "MueLu_IndexManager_kokkos.hpp"
30#define MUELU_UNAGGREGATED -1
33#define MUELU_UNASSIGNED -1
66template <
class LocalOrdinal,
class GlobalOrdinal,
class Node>
74 using range_type = Kokkos::RangePolicy<local_ordinal_type, execution_space>;
75 using LO_view = Kokkos::View<local_ordinal_type*, device_type>;
80#undef MUELU_AGGREGATES_SHORT
86 using colors_view_type = Kokkos::View<
typename local_graph_type::entries_type::data_type,
87 typename local_graph_type::device_type::memory_space>;
224 const RCP<const Map>
GetMap()
const;
268 void print(Teuchos::FancyOStream& out,
const VerbLevel verbLevel = verbLevel_default)
const;
328#define MUELU_AGGREGATES_SHORT
MueLu::DefaultLocalOrdinal LocalOrdinal
MueLu::DefaultGlobalOrdinal GlobalOrdinal
Container class for aggregation information.
Teuchos::ArrayRCP< bool > isRoot_
An ArrayRCP of booleans specifying if a local entry is an aggregate root.
typename LWGraph_kokkos::local_graph_type local_graph_type
KOKKOS_INLINE_FUNCTION void AggregatesCrossProcessors(const bool &flag)
Record whether aggregates include DOFs from other processes.
aggregates_sizes_type aggregateSizes_
Array of sizes of each local aggregate.
void ComputeNodesInAggregate(LO_view &aggPtr, LO_view &aggNodes, LO_view &unaggregated) const
Generates a compressed list of nodes in each aggregate, where the entries in aggNodes[aggPtr[i]] up t...
void SetGraphNumColors(const LO graphNumColors)
Set the number of colors needed by the distance 2 coloring.
Teuchos::ArrayRCP< LocalOrdinal > ComputeAggregateSizesArrayRCP(bool forceRecompute=false) const
Compute sizes of aggregates.
void print(Teuchos::FancyOStream &out, const VerbLevel verbLevel=verbLevel_default) const
Print the object with some verbosity level to an FancyOStream object.
aggregates_sizes_type::const_type ComputeAggregateSizes(bool forceRecompute=false) const
Compute sizes of aggregates.
void SetNumGlobalAggregates(GO nGlobalAggregates)
Set number of global aggregates on current processor.
RCP< LOVector > & GetProcWinnerNonConst()
Returns nonconstant vector that maps local node IDs to owning processor IDs.
RCP< IndexManager > geoData_
Kokkos::View< typename local_graph_type::entries_type::data_type, typename local_graph_type::device_type::memory_space > colors_view_type
RCP< LOMultiVector > & GetVertex2AggIdNonConst()
Returns a nonconstant vector that maps local node IDs to local aggregates IDs.
bool aggregatesIncludeGhosts_
Set to false iff aggregates do not include any DOFs belong to other processes.
KOKKOS_INLINE_FUNCTION bool AggregatesCrossProcessors() const
Return false if and only if no aggregates include DOFs from other processes.
LO numAggregates_
Number of aggregates on this processor.
typename Node::execution_space execution_space
LO GetGraphNumColors()
Get the number of colors needed by the distance 2 coloring.
aggregates_sizes_type::host_mirror_type aggregateSizesHost_
KOKKOS_INLINE_FUNCTION LO GetNumAggregates() const
void SetIndexManagerKokkos(RCP< IndexManager_kokkos > &geoDataKokkos)
Set the index manager used by structured aggregation algorithms. This has to be done by the aggregati...
typename Node::device_type device_type
RCP< IndexManager_kokkos > & GetIndexManagerKokkos()
Get the index manager used by structured aggregation algorithms. This has to be done by the aggregati...
local_graph_type GetGraph() const
GlobalOrdinal global_ordinal_type
Kokkos::RangePolicy< local_ordinal_type, execution_space > range_type
const RCP< const Map > GetMap() const
returns (overlapping) map of aggregate/node distribution
GO GetNumGlobalAggregatesComputeIfNeeded()
Get global number of aggregates.
void SetIsRoot(LO i, bool value=true)
Set root node information.
RCP< IndexManager > & GetIndexManager()
Get the index manager used by various aggregation algorithms. This has to be done by the aggregation ...
bool IsRoot(LO i) const
Returns true if node with given local node id is marked to be a root node.
colors_view_type graphColors_
std::string description() const
Return a simple one-line description of this object.
local_graph_type graph_
Aggregates represented as Kokkos graph type.
RCP< IndexManager_kokkos > geoDataKokkos_
Kokkos::View< LocalOrdinal *, device_type > aggregates_sizes_type
Kokkos::View< local_ordinal_type *, device_type > LO_view
const RCP< LOMultiVector > & GetVertex2AggId() const
Returns constant vector that maps local node IDs to local aggregates IDs.
GO numGlobalAggregates_
Number of global aggregates.
RCP< LOVector > procWinner_
LocalOrdinal local_ordinal_type
colors_view_type & GetGraphColors()
Get a distance 2 coloring of the underlying graph. The coloring is computed and set during Phase1 of ...
RCP< LOMultiVector > vertex2AggId_
virtual ~Aggregates()
Destructor.
const RCP< LOVector > & GetProcWinner() const
Returns constant vector that maps local node IDs to owning processor IDs.
void SetGraphColors(colors_view_type graphColors)
Set a distance 2 coloring of the underlying graph. The coloring is computed and set during Phase1 of ...
void SetIndexManager(RCP< IndexManager > &geoData)
Set the index manager used by various aggregation algorithms. This has to be done by the aggregation ...
void SetNumAggregates(LO nAggregates)
Set number of local aggregates on current processor.
Base class for MueLu classes.
typename std::conditional< OnHost, typename local_graph_device_type::HostMirror, local_graph_device_type >::type local_graph_type
Lightweight MueLu representation of a compressed row storage graph.
Lightweight MueLu representation of a compressed row storage graph.
Namespace for MueLu classes and methods.