MueLu  Version of the Day
MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node > Class Template Reference

Provides methods to build a multigrid hierarchy and apply multigrid cycles. More...

#include <MueLu_Hierarchy_decl.hpp>

Inheritance diagram for MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >:
MueLu::BaseClass MueLu::VerboseObject MueLu::Describable

Classes

struct  ConvData
 Data struct for defining stopping criteria of multigrid iteration. More...
 

Public Member Functions

void AddLevel (const RCP< Level > &level)
 Add a level at the end of the hierarchy. More...
 
void AddNewLevel ()
 Add a new level at the end of the hierarchy. More...
 
RCP< Level > & GetLevel (const int levelID=0)
 Retrieve a certain level from hierarchy. More...
 
int GetNumLevels () const
 
int GetGlobalNumLevels () const
 
MagnitudeType GetRate () const
 
double GetOperatorComplexity () const
 
double GetSmootherComplexity () const
 
void CheckLevel (Level &level, int levelID)
 Helper function. More...
 
bool Setup (int coarseLevelID, const RCP< const FactoryManagerBase > fineLevelManager, const RCP< const FactoryManagerBase > coarseLevelManager, const RCP< const FactoryManagerBase > nextLevelManager=Teuchos::null)
 Multi-level setup phase: build a new level of the hierarchy. More...
 
void Setup (const FactoryManagerBase &manager=FactoryManager(), int startLevel=0, int numDesiredLevels=GetDefaultMaxLevels())
 
void SetupRe ()
 
void Clear (int startLevel=0)
 Clear impermanent data from previous setup. More...
 
void ExpertClear ()
 
CycleType GetCycle () const
 Returns multigrid cycle type (supports VCYCLE and WCYCLE) More...
 
void SetCycle (CycleType Cycle)
 Supports VCYCLE and WCYCLE types. More...
 
void SetProlongatorScalingFactor (double scalingFactor)
 Specify damping factor alpha such that x = x + alpha*P*c, where c is the coarse grid correction. More...
 
ReturnType Iterate (const MultiVector &B, MultiVector &X, ConvData conv=ConvData(), bool InitialGuessIsZero=false, LO startLevel=0)
 Apply the multigrid preconditioner. More...
 
void Write (const LO &start=-1, const LO &end=-1, const std::string &suffix="")
 Print matrices in the multigrid hierarchy to file. More...
 
void EnableGraphDumping (const std::string &filename, int levelID=1)
 
template<class Node2 >
Teuchos::RCP< Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node2 > > clone (const RCP< Node2 > &node2) const
 
void setlib (Xpetra::UnderlyingLib inlib)
 
Xpetra::UnderlyingLib lib ()
 
void ResetDescription ()
 
template<typename Node2 >
Teuchos::RCP< Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node2 > > clone (const Teuchos::RCP< Node2 > &node2) const
 
- Public Member Functions inherited from MueLu::BaseClass
virtual ~BaseClass ()
 Destructor. More...
 
- Public Member Functions inherited from MueLu::VerboseObject
VerbLevel GetVerbLevel () const
 Get the verbosity level. More...
 
void SetVerbLevel (const VerbLevel verbLevel)
 Set the verbosity level of this object. More...
 
int GetProcRankVerbose () const
 Get proc rank used for printing. Do not use this information for any other purpose. More...
 
int SetProcRankVerbose (int procRank) const
 Set proc rank used for printing. More...
 
bool IsPrint (MsgType type, int thisProcRankOnly=-1) const
 Find out whether we need to print out information for a specific message type. More...
 
Teuchos::FancyOStream & GetOStream (MsgType type, int thisProcRankOnly=0) const
 Get an output stream for outputting the input message type. More...
 
Teuchos::FancyOStream & GetBlackHole () const
 
 VerboseObject ()
 
virtual ~VerboseObject ()
 Destructor. More...
 
- Public Member Functions inherited from MueLu::Describable
virtual ~Describable ()
 Destructor. More...
 
virtual std::string ShortClassName () const
 Return the class name of the object, without template parameters and without namespace. More...
 
void describe (Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel=Teuchos::Describable::verbLevel_default) const
 Print the object with some verbosity level to an FancyOStream object. More...
 

Protected Member Functions

const RCP< const FactoryManagerBase > & GetLevelManager (const int levelID) const
 

Private Types

typedef Teuchos::ScalarTraits< SC > STS
 
typedef STS::magnitudeType MagnitudeType
 

Private Member Functions

int LastLevelID () const
 
void DumpCurrentGraph () const
 
 Hierarchy (const Hierarchy &h)
 Copy constructor is not implemented. More...
 
void ReplaceCoordinateMap (Level &level)
 

Private Attributes

Array< RCP< Level > > Levels_
 Container for Level objects. More...
 
Xpetra::global_size_t maxCoarseSize_
 
bool implicitTranspose_
 
bool doPRrebalance_
 
bool isPreconditioner_
 
CycleType Cycle_
 
double scalingFactor_
 
Xpetra::UnderlyingLib lib_
 
std::string description_ = ""
 
bool isDumpingEnabled_
 Graph dumping. More...
 
int dumpLevel_
 
std::string dumpFile_
 
MagnitudeType rate_
 Convergece rate. More...
 
Array< RCP< const FactoryManagerBase > > levelManagers_
 

Friends

template<class S2 , class LO2 , class GO2 , class N2 >
class Hierarchy
 

Constructors/Destructors

 Hierarchy ()
 Default constructor. More...
 
 Hierarchy (const RCP< Matrix > &A)
 Constructor. More...
 
virtual ~Hierarchy ()
 Destructor. More...
 

Set/Get Methods.

Xpetra::global_size_t GetMaxCoarseSize () const
 
bool GetImplicitTranspose () const
 
void SetMaxCoarseSize (Xpetra::global_size_t maxCoarseSize)
 
void SetPRrebalance (bool doPRrebalance)
 
void SetImplicitTranspose (const bool &implicit)
 
static CycleType GetDefaultCycle ()
 
static bool GetDefaultImplicitTranspose ()
 
static Xpetra::global_size_t GetDefaultMaxCoarseSize ()
 
static int GetDefaultMaxLevels ()
 
static bool GetDefaultPRrebalance ()
 

Permanent storage

void Keep (const std::string &ename, const FactoryBase *factory=NoFactory::get())
 Call Level::Keep(ename, factory) for each level of the Hierarchy. More...
 
void Delete (const std::string &ename, const FactoryBase *factory=NoFactory::get())
 Call Level::Delete(ename, factory) for each level of the Hierarchy. More...
 
void AddKeepFlag (const std::string &ename, const FactoryBase *factory=NoFactory::get(), KeepType keep=MueLu::Keep)
 Call Level::AddKeepFlag for each level of the Hierarchy. More...
 
void RemoveKeepFlag (const std::string &ename, const FactoryBase *factory, KeepType keep=MueLu::All)
 Call Level::RemoveKeepFlag for each level of the Hierarchy. More...
 

Overridden from Teuchos::Describable

std::string description () const
 Return a simple one-line description of this object. More...
 
void describe (Teuchos::FancyOStream &out, const VerbLevel verbLevel=Default) const
 Print the Hierarchy with some verbosity level to a FancyOStream object. More...
 
void describe (Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel=Teuchos::VERB_HIGH) const
 
void print (std::ostream &out=std::cout, const VerbLevel verbLevel=(MueLu::Parameters|MueLu::Statistics0)) const
 
void IsPreconditioner (const bool flag)
 

Additional Inherited Members

- Static Public Member Functions inherited from MueLu::VerboseObject
static void SetDefaultOStream (const Teuchos::RCP< Teuchos::FancyOStream > &defaultOStream)
 
static Teuchos::RCP< Teuchos::FancyOStream > GetDefaultOStream ()
 
static void SetDefaultVerbLevel (const VerbLevel defaultVerbLevel)
 Set the default (global) verbosity level. More...
 
static VerbLevel GetDefaultVerbLevel ()
 Get the default (global) verbosity level. More...
 

Detailed Description

template<class Scalar = Xpetra::Operator<>::scalar_type, class LocalOrdinal = typename Xpetra::Operator<Scalar>::local_ordinal_type, class GlobalOrdinal = typename Xpetra::Operator<Scalar, LocalOrdinal>::global_ordinal_type, class Node = typename Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
class MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >

Provides methods to build a multigrid hierarchy and apply multigrid cycles.

Allows users to manually populate operators at different levels within a multigrid method and push them into the hierarchy via SetLevel() and/or to supply factories for automatically generating prolongators, restrictors, and coarse level discretizations. Additionally, this class contains an apply method that supports V and W cycles.

Definition at line 104 of file MueLu_Hierarchy_decl.hpp.

Member Typedef Documentation

◆ STS

template<class Scalar = Xpetra::Operator<>::scalar_type, class LocalOrdinal = typename Xpetra::Operator<Scalar>::local_ordinal_type, class GlobalOrdinal = typename Xpetra::Operator<Scalar, LocalOrdinal>::global_ordinal_type, class Node = typename Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
typedef Teuchos::ScalarTraits<SC> MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::STS
private

Definition at line 108 of file MueLu_Hierarchy_decl.hpp.

◆ MagnitudeType

template<class Scalar = Xpetra::Operator<>::scalar_type, class LocalOrdinal = typename Xpetra::Operator<Scalar>::local_ordinal_type, class GlobalOrdinal = typename Xpetra::Operator<Scalar, LocalOrdinal>::global_ordinal_type, class Node = typename Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
typedef STS::magnitudeType MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::MagnitudeType
private

Definition at line 109 of file MueLu_Hierarchy_decl.hpp.

Constructor & Destructor Documentation

◆ Hierarchy() [1/3]

template<class Scalar , class LocalOrdinal , class GlobalOrdinal , class Node >
MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::Hierarchy ( )

Default constructor.

Definition at line 80 of file MueLu_Hierarchy_def.hpp.

◆ Hierarchy() [2/3]

template<class Scalar , class LocalOrdinal , class GlobalOrdinal , class Node >
MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::Hierarchy ( const RCP< Matrix > &  A)

Constructor.

Definition at line 89 of file MueLu_Hierarchy_def.hpp.

◆ ~Hierarchy()

template<class Scalar = Xpetra::Operator<>::scalar_type, class LocalOrdinal = typename Xpetra::Operator<Scalar>::local_ordinal_type, class GlobalOrdinal = typename Xpetra::Operator<Scalar, LocalOrdinal>::global_ordinal_type, class Node = typename Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
virtual MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::~Hierarchy ( )
inlinevirtual

Destructor.

Definition at line 134 of file MueLu_Hierarchy_decl.hpp.

◆ Hierarchy() [3/3]

template<class Scalar = Xpetra::Operator<>::scalar_type, class LocalOrdinal = typename Xpetra::Operator<Scalar>::local_ordinal_type, class GlobalOrdinal = typename Xpetra::Operator<Scalar, LocalOrdinal>::global_ordinal_type, class Node = typename Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::Hierarchy ( const Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node > &  h)
private

Copy constructor is not implemented.

Member Function Documentation

◆ GetDefaultCycle()

template<class Scalar = Xpetra::Operator<>::scalar_type, class LocalOrdinal = typename Xpetra::Operator<Scalar>::local_ordinal_type, class GlobalOrdinal = typename Xpetra::Operator<Scalar, LocalOrdinal>::global_ordinal_type, class Node = typename Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
static CycleType MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::GetDefaultCycle ( )
inlinestatic

Definition at line 142 of file MueLu_Hierarchy_decl.hpp.

◆ GetDefaultImplicitTranspose()

template<class Scalar = Xpetra::Operator<>::scalar_type, class LocalOrdinal = typename Xpetra::Operator<Scalar>::local_ordinal_type, class GlobalOrdinal = typename Xpetra::Operator<Scalar, LocalOrdinal>::global_ordinal_type, class Node = typename Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
static bool MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::GetDefaultImplicitTranspose ( )
inlinestatic

Definition at line 143 of file MueLu_Hierarchy_decl.hpp.

◆ GetDefaultMaxCoarseSize()

template<class Scalar = Xpetra::Operator<>::scalar_type, class LocalOrdinal = typename Xpetra::Operator<Scalar>::local_ordinal_type, class GlobalOrdinal = typename Xpetra::Operator<Scalar, LocalOrdinal>::global_ordinal_type, class Node = typename Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
static Xpetra::global_size_t MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::GetDefaultMaxCoarseSize ( )
inlinestatic

Definition at line 144 of file MueLu_Hierarchy_decl.hpp.

◆ GetDefaultMaxLevels()

template<class Scalar = Xpetra::Operator<>::scalar_type, class LocalOrdinal = typename Xpetra::Operator<Scalar>::local_ordinal_type, class GlobalOrdinal = typename Xpetra::Operator<Scalar, LocalOrdinal>::global_ordinal_type, class Node = typename Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
static int MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::GetDefaultMaxLevels ( )
inlinestatic

Definition at line 145 of file MueLu_Hierarchy_decl.hpp.

◆ GetDefaultPRrebalance()

template<class Scalar = Xpetra::Operator<>::scalar_type, class LocalOrdinal = typename Xpetra::Operator<Scalar>::local_ordinal_type, class GlobalOrdinal = typename Xpetra::Operator<Scalar, LocalOrdinal>::global_ordinal_type, class Node = typename Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
static bool MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::GetDefaultPRrebalance ( )
inlinestatic

Definition at line 146 of file MueLu_Hierarchy_decl.hpp.

◆ GetMaxCoarseSize()

template<class Scalar = Xpetra::Operator<>::scalar_type, class LocalOrdinal = typename Xpetra::Operator<Scalar>::local_ordinal_type, class GlobalOrdinal = typename Xpetra::Operator<Scalar, LocalOrdinal>::global_ordinal_type, class Node = typename Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
Xpetra::global_size_t MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::GetMaxCoarseSize ( ) const
inline

Definition at line 148 of file MueLu_Hierarchy_decl.hpp.

◆ GetImplicitTranspose()

template<class Scalar = Xpetra::Operator<>::scalar_type, class LocalOrdinal = typename Xpetra::Operator<Scalar>::local_ordinal_type, class GlobalOrdinal = typename Xpetra::Operator<Scalar, LocalOrdinal>::global_ordinal_type, class Node = typename Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
bool MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::GetImplicitTranspose ( ) const
inline

Definition at line 149 of file MueLu_Hierarchy_decl.hpp.

◆ SetMaxCoarseSize()

template<class Scalar = Xpetra::Operator<>::scalar_type, class LocalOrdinal = typename Xpetra::Operator<Scalar>::local_ordinal_type, class GlobalOrdinal = typename Xpetra::Operator<Scalar, LocalOrdinal>::global_ordinal_type, class Node = typename Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
void MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::SetMaxCoarseSize ( Xpetra::global_size_t  maxCoarseSize)
inline

Definition at line 151 of file MueLu_Hierarchy_decl.hpp.

◆ SetPRrebalance()

template<class Scalar = Xpetra::Operator<>::scalar_type, class LocalOrdinal = typename Xpetra::Operator<Scalar>::local_ordinal_type, class GlobalOrdinal = typename Xpetra::Operator<Scalar, LocalOrdinal>::global_ordinal_type, class Node = typename Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
void MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::SetPRrebalance ( bool  doPRrebalance)
inline

Definition at line 152 of file MueLu_Hierarchy_decl.hpp.

◆ SetImplicitTranspose()

template<class Scalar = Xpetra::Operator<>::scalar_type, class LocalOrdinal = typename Xpetra::Operator<Scalar>::local_ordinal_type, class GlobalOrdinal = typename Xpetra::Operator<Scalar, LocalOrdinal>::global_ordinal_type, class Node = typename Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
void MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::SetImplicitTranspose ( const bool &  implicit)
inline

Definition at line 153 of file MueLu_Hierarchy_decl.hpp.

◆ LastLevelID()

template<class Scalar = Xpetra::Operator<>::scalar_type, class LocalOrdinal = typename Xpetra::Operator<Scalar>::local_ordinal_type, class GlobalOrdinal = typename Xpetra::Operator<Scalar, LocalOrdinal>::global_ordinal_type, class Node = typename Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
int MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::LastLevelID ( ) const
inlineprivate

Definition at line 163 of file MueLu_Hierarchy_decl.hpp.

◆ DumpCurrentGraph()

template<class Scalar , class LocalOrdinal , class GlobalOrdinal , class Node >
void MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::DumpCurrentGraph ( ) const
private

Definition at line 1284 of file MueLu_Hierarchy_def.hpp.

◆ AddLevel()

template<class Scalar , class LocalOrdinal , class GlobalOrdinal , class Node >
void MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::AddLevel ( const RCP< Level > &  level)

Add a level at the end of the hierarchy.

Definition at line 103 of file MueLu_Hierarchy_def.hpp.

◆ AddNewLevel()

template<class Scalar , class LocalOrdinal , class GlobalOrdinal , class Node >
void MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::AddNewLevel ( )

Add a new level at the end of the hierarchy.

Definition at line 119 of file MueLu_Hierarchy_def.hpp.

◆ GetLevel()

template<class Scalar , class LocalOrdinal , class GlobalOrdinal , class Node >
RCP< Level > & MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::GetLevel ( const int  levelID = 0)

Retrieve a certain level from hierarchy.

Definition at line 126 of file MueLu_Hierarchy_def.hpp.

◆ GetNumLevels()

template<class Scalar , class LocalOrdinal , class GlobalOrdinal , class Node >
int MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::GetNumLevels ( ) const

Definition at line 133 of file MueLu_Hierarchy_def.hpp.

◆ GetGlobalNumLevels()

template<class Scalar , class LocalOrdinal , class GlobalOrdinal , class Node >
int MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::GetGlobalNumLevels ( ) const

Definition at line 138 of file MueLu_Hierarchy_def.hpp.

◆ GetRate()

template<class Scalar = Xpetra::Operator<>::scalar_type, class LocalOrdinal = typename Xpetra::Operator<Scalar>::local_ordinal_type, class GlobalOrdinal = typename Xpetra::Operator<Scalar, LocalOrdinal>::global_ordinal_type, class Node = typename Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
MagnitudeType MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::GetRate ( ) const
inline

Definition at line 180 of file MueLu_Hierarchy_decl.hpp.

◆ GetOperatorComplexity()

template<class Scalar , class LocalOrdinal , class GlobalOrdinal , class Node >
double MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::GetOperatorComplexity ( ) const

Definition at line 150 of file MueLu_Hierarchy_def.hpp.

◆ GetSmootherComplexity()

template<class Scalar , class LocalOrdinal , class GlobalOrdinal , class Node >
double MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::GetSmootherComplexity ( ) const

Definition at line 173 of file MueLu_Hierarchy_def.hpp.

◆ CheckLevel()

template<class Scalar , class LocalOrdinal , class GlobalOrdinal , class Node >
void MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::CheckLevel ( Level level,
int  levelID 
)

Helper function.

Definition at line 213 of file MueLu_Hierarchy_def.hpp.

◆ Setup() [1/2]

template<class Scalar , class LocalOrdinal , class GlobalOrdinal , class Node >
bool MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::Setup ( int  coarseLevelID,
const RCP< const FactoryManagerBase fineLevelManager,
const RCP< const FactoryManagerBase coarseLevelManager,
const RCP< const FactoryManagerBase nextLevelManager = Teuchos::null 
)

Multi-level setup phase: build a new level of the hierarchy.

This method is aimed to be used in a loop building the hierarchy level by level. See Hierarchy::Setup(manager, startLevel, numDesiredLevels) for an example of usage.

Parameters
coarseLevelIDID of the level to be built.
fineLevelManagerdefines how to build missing data of the fineLevel (example: aggregates)
coarseLevelManagerdefines how to build the level
nextLevelManagerdefines how the next coarse level will be built. This is used to post corresponding request before building the coarse level to keep useful data.

CoarseLevel is considered to be the last level if:

  • input parameter isLastLevel == true or
  • Ac->getRowMap()->getGlobalNumElements() <= maxCoarseSize_ Method return true if CoarseLevel is the last level.

Pre-condition: FineLevel:

  • must have kept useful data (TODO: not tested yet)
  • must be Teuchos::null when Setup is called for finest level (Setup then automatically calls Request for "Smoother" and "CoarseSolver") CoarseLevel:
  • already allocated (using Hierarchy::AddLevel())
  • requests already posted (exception: for finest level (=fineLevelManager==null) requests are called within setup routine) NextLevel:
  • do not need to be allocate but could (FIXME: will be deleted if lastlevel...).
  • should be null when Setup is called for last level

Post-condition: FineLevel:

  • temporary data have been used and released (this condition is not tested) CoarseLevel:
  • built, requests have been used
  • if it is the last level (due to input parameter isLastLevel or getGlobalNumElements() <= maxCoarseSize_), then the coarse solver factory of the factory manager have been used instead of the smoother factory. NextLevel: If input parameter isLastLevel == false:
  • have been allocated
  • requests already posted.

Definition at line 225 of file MueLu_Hierarchy_def.hpp.

◆ Setup() [2/2]

template<class Scalar , class LocalOrdinal , class GlobalOrdinal , class Node >
void MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::Setup ( const FactoryManagerBase manager = FactoryManager(),
int  startLevel = 0,
int  numDesiredLevels = GetDefaultMaxLevels() 
)

Definition at line 495 of file MueLu_Hierarchy_def.hpp.

◆ SetupRe()

template<class Scalar , class LocalOrdinal , class GlobalOrdinal , class Node >
void MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::SetupRe ( )

Definition at line 459 of file MueLu_Hierarchy_def.hpp.

◆ Clear()

template<class Scalar , class LocalOrdinal , class GlobalOrdinal , class Node >
void MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::Clear ( int  startLevel = 0)

Clear impermanent data from previous setup.

Definition at line 567 of file MueLu_Hierarchy_def.hpp.

◆ ExpertClear()

template<class Scalar , class LocalOrdinal , class GlobalOrdinal , class Node >
void MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::ExpertClear ( )

Definition at line 576 of file MueLu_Hierarchy_def.hpp.

◆ GetCycle()

template<class Scalar = Xpetra::Operator<>::scalar_type, class LocalOrdinal = typename Xpetra::Operator<Scalar>::local_ordinal_type, class GlobalOrdinal = typename Xpetra::Operator<Scalar, LocalOrdinal>::global_ordinal_type, class Node = typename Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
CycleType MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::GetCycle ( ) const
inline

Returns multigrid cycle type (supports VCYCLE and WCYCLE)

Definition at line 242 of file MueLu_Hierarchy_decl.hpp.

◆ SetCycle()

template<class Scalar = Xpetra::Operator<>::scalar_type, class LocalOrdinal = typename Xpetra::Operator<Scalar>::local_ordinal_type, class GlobalOrdinal = typename Xpetra::Operator<Scalar, LocalOrdinal>::global_ordinal_type, class Node = typename Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
void MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::SetCycle ( CycleType  Cycle)
inline

Supports VCYCLE and WCYCLE types.

Definition at line 245 of file MueLu_Hierarchy_decl.hpp.

◆ SetProlongatorScalingFactor()

template<class Scalar = Xpetra::Operator<>::scalar_type, class LocalOrdinal = typename Xpetra::Operator<Scalar>::local_ordinal_type, class GlobalOrdinal = typename Xpetra::Operator<Scalar, LocalOrdinal>::global_ordinal_type, class Node = typename Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
void MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::SetProlongatorScalingFactor ( double  scalingFactor)
inline

Specify damping factor alpha such that x = x + alpha*P*c, where c is the coarse grid correction.

Definition at line 248 of file MueLu_Hierarchy_decl.hpp.

◆ Iterate()

template<class Scalar , class LocalOrdinal , class GlobalOrdinal , class Node >
ReturnType MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::Iterate ( const MultiVector &  B,
MultiVector &  X,
ConvData  conv = ConvData(),
bool  InitialGuessIsZero = false,
LO  startLevel = 0 
)

Apply the multigrid preconditioner.

In theory, more general cycle types than just V- and W-cycles are possible. However, the enumerated type CycleType would have to be extended.

Parameters
Bright-hand side of linear problem
Xinitial and final (approximate) solution of linear problem
ConvDatastruct which stores convergence criteria (maximum number of multigrid iterations or stopping tolerance)
InitialGuessIsZeroIndicates whether the initial guess is zero
startLevelindex of starting level to build multigrid hierarchy (default = 0)

Definition at line 787 of file MueLu_Hierarchy_def.hpp.

◆ Write()

template<class Scalar , class LocalOrdinal , class GlobalOrdinal , class Node >
void MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::Write ( const LO &  start = -1,
const LO &  end = -1,
const std::string &  suffix = "" 
)

Print matrices in the multigrid hierarchy to file.

Parameters
[in]startstart level
[in]endend level

Default behavior is to print system and transfer matrices from the entire hierarchy. Files are named "A_0.m", "P_1.m", "R_1.m", etc, and are in matrix market coordinate format.

Definition at line 1067 of file MueLu_Hierarchy_def.hpp.

◆ Keep()

template<class Scalar , class LocalOrdinal , class GlobalOrdinal , class Node >
void MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::Keep ( const std::string &  ename,
const FactoryBase factory = NoFactory::get() 
)

Call Level::Keep(ename, factory) for each level of the Hierarchy.

Definition at line 1096 of file MueLu_Hierarchy_def.hpp.

◆ Delete()

template<class Scalar , class LocalOrdinal , class GlobalOrdinal , class Node >
void MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::Delete ( const std::string &  ename,
const FactoryBase factory = NoFactory::get() 
)

Call Level::Delete(ename, factory) for each level of the Hierarchy.

Definition at line 1102 of file MueLu_Hierarchy_def.hpp.

◆ AddKeepFlag()

template<class Scalar , class LocalOrdinal , class GlobalOrdinal , class Node >
void MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::AddKeepFlag ( const std::string &  ename,
const FactoryBase factory = NoFactory::get(),
KeepType  keep = MueLu::Keep 
)

Call Level::AddKeepFlag for each level of the Hierarchy.

Definition at line 1108 of file MueLu_Hierarchy_def.hpp.

◆ RemoveKeepFlag()

template<class Scalar , class LocalOrdinal , class GlobalOrdinal , class Node >
void MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::RemoveKeepFlag ( const std::string &  ename,
const FactoryBase factory,
KeepType  keep = MueLu::All 
)

Call Level::RemoveKeepFlag for each level of the Hierarchy.

Definition at line 1114 of file MueLu_Hierarchy_def.hpp.

◆ description()

template<class Scalar , class LocalOrdinal , class GlobalOrdinal , class Node >
std::string MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::description ( ) const
virtual

Return a simple one-line description of this object.

Reimplemented from MueLu::Describable.

Definition at line 1120 of file MueLu_Hierarchy_def.hpp.

◆ describe() [1/2]

template<class Scalar , class LocalOrdinal , class GlobalOrdinal , class Node >
void MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::describe ( Teuchos::FancyOStream &  out,
const VerbLevel  verbLevel = Default 
) const
virtual

Print the Hierarchy with some verbosity level to a FancyOStream object.

Parameters
[in]outThe Teuchos::FancyOstream.
[in]verbLevelControls amount of output.

Reimplemented from MueLu::Describable.

Definition at line 1137 of file MueLu_Hierarchy_def.hpp.

◆ describe() [2/2]

template<class Scalar , class LocalOrdinal , class GlobalOrdinal , class Node >
void MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::describe ( Teuchos::FancyOStream &  out,
const Teuchos::EVerbosityLevel  verbLevel = Teuchos::VERB_HIGH 
) const

Definition at line 1132 of file MueLu_Hierarchy_def.hpp.

◆ print()

template<class Scalar , class LocalOrdinal , class GlobalOrdinal , class Node >
void MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::print ( std::ostream &  out = std::cout,
const VerbLevel  verbLevel = (MueLu::Parameters | MueLu::Statistics0) 
) const

Definition at line 1272 of file MueLu_Hierarchy_def.hpp.

◆ IsPreconditioner()

template<class Scalar , class LocalOrdinal , class GlobalOrdinal , class Node >
void MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::IsPreconditioner ( const bool  flag)

Indicate whether the multigrid method is a preconditioner or a solver.

This is used in conjunction with the verbosity level to determine whether the residuals can be printed.

Definition at line 1279 of file MueLu_Hierarchy_def.hpp.

◆ EnableGraphDumping()

template<class Scalar = Xpetra::Operator<>::scalar_type, class LocalOrdinal = typename Xpetra::Operator<Scalar>::local_ordinal_type, class GlobalOrdinal = typename Xpetra::Operator<Scalar, LocalOrdinal>::global_ordinal_type, class Node = typename Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
void MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::EnableGraphDumping ( const std::string &  filename,
int  levelID = 1 
)
inline

Definition at line 320 of file MueLu_Hierarchy_decl.hpp.

◆ clone() [1/2]

template<class Scalar = Xpetra::Operator<>::scalar_type, class LocalOrdinal = typename Xpetra::Operator<Scalar>::local_ordinal_type, class GlobalOrdinal = typename Xpetra::Operator<Scalar, LocalOrdinal>::global_ordinal_type, class Node = typename Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
template<class Node2 >
Teuchos::RCP< Hierarchy<Scalar, LocalOrdinal, GlobalOrdinal, Node2> > MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::clone ( const RCP< Node2 > &  node2) const

◆ setlib()

template<class Scalar = Xpetra::Operator<>::scalar_type, class LocalOrdinal = typename Xpetra::Operator<Scalar>::local_ordinal_type, class GlobalOrdinal = typename Xpetra::Operator<Scalar, LocalOrdinal>::global_ordinal_type, class Node = typename Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
void MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::setlib ( Xpetra::UnderlyingLib  inlib)
inline

Definition at line 330 of file MueLu_Hierarchy_decl.hpp.

◆ lib()

template<class Scalar = Xpetra::Operator<>::scalar_type, class LocalOrdinal = typename Xpetra::Operator<Scalar>::local_ordinal_type, class GlobalOrdinal = typename Xpetra::Operator<Scalar, LocalOrdinal>::global_ordinal_type, class Node = typename Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
Xpetra::UnderlyingLib MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::lib ( )
inline

Definition at line 331 of file MueLu_Hierarchy_decl.hpp.

◆ ResetDescription()

template<class Scalar = Xpetra::Operator<>::scalar_type, class LocalOrdinal = typename Xpetra::Operator<Scalar>::local_ordinal_type, class GlobalOrdinal = typename Xpetra::Operator<Scalar, LocalOrdinal>::global_ordinal_type, class Node = typename Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
void MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::ResetDescription ( )
inline

Definition at line 334 of file MueLu_Hierarchy_decl.hpp.

◆ GetLevelManager()

template<class Scalar = Xpetra::Operator<>::scalar_type, class LocalOrdinal = typename Xpetra::Operator<Scalar>::local_ordinal_type, class GlobalOrdinal = typename Xpetra::Operator<Scalar, LocalOrdinal>::global_ordinal_type, class Node = typename Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
const RCP<const FactoryManagerBase>& MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::GetLevelManager ( const int  levelID) const
inlineprotected

Definition at line 338 of file MueLu_Hierarchy_decl.hpp.

◆ ReplaceCoordinateMap()

template<class Scalar , class LocalOrdinal , class GlobalOrdinal , class Node >
void MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::ReplaceCoordinateMap ( Level level)
private

Definition at line 1332 of file MueLu_Hierarchy_def.hpp.

◆ clone() [2/2]

template<class Scalar = Xpetra::Operator<>::scalar_type, class LocalOrdinal = typename Xpetra::Operator<Scalar>::local_ordinal_type, class GlobalOrdinal = typename Xpetra::Operator<Scalar, LocalOrdinal>::global_ordinal_type, class Node = typename Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
template<typename Node2 >
Teuchos::RCP<Hierarchy<Scalar, LocalOrdinal, GlobalOrdinal, Node2> > MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::clone ( const Teuchos::RCP< Node2 > &  node2) const

Definition at line 400 of file MueLu_Hierarchy_decl.hpp.

Friends And Related Function Documentation

◆ Hierarchy

template<class Scalar = Xpetra::Operator<>::scalar_type, class LocalOrdinal = typename Xpetra::Operator<Scalar>::local_ordinal_type, class GlobalOrdinal = typename Xpetra::Operator<Scalar, LocalOrdinal>::global_ordinal_type, class Node = typename Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
template<class S2 , class LO2 , class GO2 , class N2 >
friend class Hierarchy
friend

Definition at line 160 of file MueLu_Hierarchy_decl.hpp.

Member Data Documentation

◆ Levels_

template<class Scalar = Xpetra::Operator<>::scalar_type, class LocalOrdinal = typename Xpetra::Operator<Scalar>::local_ordinal_type, class GlobalOrdinal = typename Xpetra::Operator<Scalar, LocalOrdinal>::global_ordinal_type, class Node = typename Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
Array<RCP<Level> > MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::Levels_
private

Container for Level objects.

Definition at line 347 of file MueLu_Hierarchy_decl.hpp.

◆ maxCoarseSize_

template<class Scalar = Xpetra::Operator<>::scalar_type, class LocalOrdinal = typename Xpetra::Operator<Scalar>::local_ordinal_type, class GlobalOrdinal = typename Xpetra::Operator<Scalar, LocalOrdinal>::global_ordinal_type, class Node = typename Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
Xpetra::global_size_t MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::maxCoarseSize_
private

Definition at line 357 of file MueLu_Hierarchy_decl.hpp.

◆ implicitTranspose_

template<class Scalar = Xpetra::Operator<>::scalar_type, class LocalOrdinal = typename Xpetra::Operator<Scalar>::local_ordinal_type, class GlobalOrdinal = typename Xpetra::Operator<Scalar, LocalOrdinal>::global_ordinal_type, class Node = typename Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
bool MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::implicitTranspose_
private

Definition at line 361 of file MueLu_Hierarchy_decl.hpp.

◆ doPRrebalance_

template<class Scalar = Xpetra::Operator<>::scalar_type, class LocalOrdinal = typename Xpetra::Operator<Scalar>::local_ordinal_type, class GlobalOrdinal = typename Xpetra::Operator<Scalar, LocalOrdinal>::global_ordinal_type, class Node = typename Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
bool MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::doPRrebalance_
private

Definition at line 365 of file MueLu_Hierarchy_decl.hpp.

◆ isPreconditioner_

template<class Scalar = Xpetra::Operator<>::scalar_type, class LocalOrdinal = typename Xpetra::Operator<Scalar>::local_ordinal_type, class GlobalOrdinal = typename Xpetra::Operator<Scalar, LocalOrdinal>::global_ordinal_type, class Node = typename Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
bool MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::isPreconditioner_
private

Definition at line 368 of file MueLu_Hierarchy_decl.hpp.

◆ Cycle_

template<class Scalar = Xpetra::Operator<>::scalar_type, class LocalOrdinal = typename Xpetra::Operator<Scalar>::local_ordinal_type, class GlobalOrdinal = typename Xpetra::Operator<Scalar, LocalOrdinal>::global_ordinal_type, class Node = typename Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
CycleType MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::Cycle_
private

Definition at line 371 of file MueLu_Hierarchy_decl.hpp.

◆ scalingFactor_

template<class Scalar = Xpetra::Operator<>::scalar_type, class LocalOrdinal = typename Xpetra::Operator<Scalar>::local_ordinal_type, class GlobalOrdinal = typename Xpetra::Operator<Scalar, LocalOrdinal>::global_ordinal_type, class Node = typename Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
double MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::scalingFactor_
private

Definition at line 374 of file MueLu_Hierarchy_decl.hpp.

◆ lib_

template<class Scalar = Xpetra::Operator<>::scalar_type, class LocalOrdinal = typename Xpetra::Operator<Scalar>::local_ordinal_type, class GlobalOrdinal = typename Xpetra::Operator<Scalar, LocalOrdinal>::global_ordinal_type, class Node = typename Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
Xpetra::UnderlyingLib MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::lib_
private

Definition at line 377 of file MueLu_Hierarchy_decl.hpp.

◆ description_

template<class Scalar = Xpetra::Operator<>::scalar_type, class LocalOrdinal = typename Xpetra::Operator<Scalar>::local_ordinal_type, class GlobalOrdinal = typename Xpetra::Operator<Scalar, LocalOrdinal>::global_ordinal_type, class Node = typename Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
std::string MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::description_ = ""
mutableprivate

Definition at line 380 of file MueLu_Hierarchy_decl.hpp.

◆ isDumpingEnabled_

template<class Scalar = Xpetra::Operator<>::scalar_type, class LocalOrdinal = typename Xpetra::Operator<Scalar>::local_ordinal_type, class GlobalOrdinal = typename Xpetra::Operator<Scalar, LocalOrdinal>::global_ordinal_type, class Node = typename Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
bool MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::isDumpingEnabled_
private

Graph dumping.

Definition at line 384 of file MueLu_Hierarchy_decl.hpp.

◆ dumpLevel_

template<class Scalar = Xpetra::Operator<>::scalar_type, class LocalOrdinal = typename Xpetra::Operator<Scalar>::local_ordinal_type, class GlobalOrdinal = typename Xpetra::Operator<Scalar, LocalOrdinal>::global_ordinal_type, class Node = typename Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
int MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::dumpLevel_
private

Definition at line 385 of file MueLu_Hierarchy_decl.hpp.

◆ dumpFile_

template<class Scalar = Xpetra::Operator<>::scalar_type, class LocalOrdinal = typename Xpetra::Operator<Scalar>::local_ordinal_type, class GlobalOrdinal = typename Xpetra::Operator<Scalar, LocalOrdinal>::global_ordinal_type, class Node = typename Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
std::string MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::dumpFile_
private

Definition at line 386 of file MueLu_Hierarchy_decl.hpp.

◆ rate_

template<class Scalar = Xpetra::Operator<>::scalar_type, class LocalOrdinal = typename Xpetra::Operator<Scalar>::local_ordinal_type, class GlobalOrdinal = typename Xpetra::Operator<Scalar, LocalOrdinal>::global_ordinal_type, class Node = typename Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
MagnitudeType MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::rate_
private

Convergece rate.

Definition at line 389 of file MueLu_Hierarchy_decl.hpp.

◆ levelManagers_

template<class Scalar = Xpetra::Operator<>::scalar_type, class LocalOrdinal = typename Xpetra::Operator<Scalar>::local_ordinal_type, class GlobalOrdinal = typename Xpetra::Operator<Scalar, LocalOrdinal>::global_ordinal_type, class Node = typename Xpetra::Operator<Scalar, LocalOrdinal, GlobalOrdinal>::node_type>
Array<RCP<const FactoryManagerBase> > MueLu::Hierarchy< Scalar, LocalOrdinal, GlobalOrdinal, Node >::levelManagers_
private

Definition at line 392 of file MueLu_Hierarchy_decl.hpp.


The documentation for this class was generated from the following files: