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
 
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...
 
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 ()
 
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_
 
Xpetra::UnderlyingLib lib_
 
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 103 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 107 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 108 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 79 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 88 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 133 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 141 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 142 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 143 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 144 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 145 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 147 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 148 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 150 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 151 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 152 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 162 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 1210 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 102 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 118 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 125 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 132 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 137 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 179 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 149 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 173 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 185 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 452 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 419 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 510 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 519 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 238 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 241 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 734 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 1012 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 1037 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 1043 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 1049 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 1055 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 1061 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 1074 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 1069 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 1198 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 1205 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 313 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 323 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 324 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 327 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 1258 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 383 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 159 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 336 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 346 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 350 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 354 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 357 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 360 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 363 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 367 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 368 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 369 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 372 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 375 of file MueLu_Hierarchy_decl.hpp.


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