MueLu  Version of the Day
MueLu_Hierarchy_decl.hpp
Go to the documentation of this file.
1 // @HEADER
2 //
3 // ***********************************************************************
4 //
5 // MueLu: A package for multigrid based preconditioning
6 // Copyright 2012 Sandia Corporation
7 //
8 // Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
9 // the U.S. Government retains certain rights in this software.
10 //
11 // Redistribution and use in source and binary forms, with or without
12 // modification, are permitted provided that the following conditions are
13 // met:
14 //
15 // 1. Redistributions of source code must retain the above copyright
16 // notice, this list of conditions and the following disclaimer.
17 //
18 // 2. Redistributions in binary form must reproduce the above copyright
19 // notice, this list of conditions and the following disclaimer in the
20 // documentation and/or other materials provided with the distribution.
21 //
22 // 3. Neither the name of the Corporation nor the names of the
23 // contributors may be used to endorse or promote products derived from
24 // this software without specific prior written permission.
25 //
26 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
27 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
30 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
34 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37 //
38 // Questions? Contact
39 // Jonathan Hu (jhu@sandia.gov)
40 // Andrey Prokopenko (aprokop@sandia.gov)
41 // Ray Tuminaro (rstumin@sandia.gov)
42 //
43 // ***********************************************************************
44 //
45 // @HEADER
46 #ifndef MUELU_HIERARCHY_DECL_HPP
47 #define MUELU_HIERARCHY_DECL_HPP
48 
49 #include <Teuchos_ParameterList.hpp>
50 #include <Teuchos_Ptr.hpp>
51 
52 #include <Xpetra_ConfigDefs.hpp> // global_size_t
53 #include <Xpetra_Matrix_fwd.hpp>
54 #include <Xpetra_MultiVector_fwd.hpp>
55 #include <Xpetra_MultiVectorFactory_fwd.hpp>
56 #include <Xpetra_Operator_fwd.hpp>
57 
58 #include <Xpetra_Cloner.hpp>
59 #include <MueLu_SmootherCloner.hpp>
60 #include "MueLu_ConfigDefs.hpp"
61 #include "MueLu_BaseClass.hpp"
62 #include "MueLu_Hierarchy_fwd.hpp"
63 
64 #include "MueLu_Types.hpp"
65 
67 #include "MueLu_FactoryManager.hpp" // no fwd declaration because constructor of FactoryManager is used as a default parameter of Setup()
69 #include "MueLu_KeepType.hpp"
70 #include "MueLu_Level_fwd.hpp"
71 #include "MueLu_MasterList.hpp"
72 #include "MueLu_NoFactory.hpp"
73 #include "MueLu_PerfUtils_fwd.hpp"
74 #include "MueLu_PFactory_fwd.hpp"
75 #include "MueLu_RFactory_fwd.hpp"
80 #include "MueLu_Utilities_fwd.hpp"
81 
82 namespace MueLu {
83 
84  enum ReturnType {
87  Undefined
88  };
89 
100  template <class Scalar = DefaultScalar,
103  class Node = DefaultNode>
104  class Hierarchy : public BaseClass {
105 #undef MUELU_HIERARCHY_SHORT
106 #include "MueLu_UseShortNames.hpp"
107 
108  typedef Teuchos::ScalarTraits<SC> STS;
109  typedef typename STS::magnitudeType MagnitudeType;
110 
112  struct ConvData {
113  ConvData() : maxIts_(1), tol_(-STS::magnitude(STS::one())) { }
114  ConvData(LO maxIts) : maxIts_(maxIts), tol_(-STS::magnitude(STS::one())) { }
115  ConvData(MagnitudeType tol) : maxIts_(10000), tol_(tol) { }
116  ConvData(std::pair<LO,MagnitudeType> p) : maxIts_(p.first), tol_(p.second) { }
117 
120  };
121 
122  public:
123 
125 
126 
128  Hierarchy();
130  Hierarchy(const std::string& label);
131 
133  Hierarchy(const RCP<Matrix> & A);
134 
136  Hierarchy(const RCP<Matrix> & A, const std::string& label);
137 
139  virtual ~Hierarchy() { }
140 
142 
144 
145 
147  static CycleType GetDefaultCycle() { return MasterList::getDefault<std::string>("cycle type") == "V" ? VCYCLE : WCYCLE; }
148  static bool GetDefaultImplicitTranspose() { return MasterList::getDefault<bool>("transpose: use implicit"); }
149  static bool GetDefaultFuseProlongationAndUpdate() { return MasterList::getDefault<bool>("fuse prolongation and update"); }
150  static Xpetra::global_size_t GetDefaultMaxCoarseSize() { return MasterList::getDefault<int>("coarse: max size"); }
151  static int GetDefaultMaxLevels() { return MasterList::getDefault<int>("max levels"); }
152  static bool GetDefaultPRrebalance() { return MasterList::getDefault<bool>("repartition: rebalance P and R"); }
153 
154  Xpetra::global_size_t GetMaxCoarseSize() const { return maxCoarseSize_; }
155  bool GetImplicitTranspose() const { return implicitTranspose_; }
157 
158  void SetMaxCoarseSize(Xpetra::global_size_t maxCoarseSize) { maxCoarseSize_ = maxCoarseSize; }
159  void SetPRrebalance(bool doPRrebalance) { doPRrebalance_ = doPRrebalance; }
160  void SetImplicitTranspose(const bool& implicit) { implicitTranspose_ = implicit; }
161  void SetFuseProlongationAndUpdate(const bool& fuse) { fuseProlongationAndUpdate_ = fuse; }
162 
164 
166 
167  template<class S2, class LO2, class GO2, class N2>
168  friend class Hierarchy;
169 
170  private:
171  int LastLevelID() const { return Levels_.size() - 1; }
172  void DumpCurrentGraph() const;
173 
174  public:
175 
177  void AddLevel(const RCP<Level> & level);
178 
180  void AddNewLevel();
181 
183  RCP<Level> & GetLevel(const int levelID = 0);
184 
185  int GetNumLevels() const;
186  int GetGlobalNumLevels() const;
187 
188  MagnitudeType GetRate() const { return rate_; }
189 
190  // This function is global
191  double GetOperatorComplexity() const;
192 
193  // This function is global
194  double GetSmootherComplexity() const;
195 
197  void CheckLevel(Level& level, int levelID);
198 
199  void SetMatvecParams(RCP<ParameterList> matvecParams);
200 
202 
239  bool Setup(int coarseLevelID, const RCP<const FactoryManagerBase> fineLevelManager /* = Teuchos::null */, const RCP<const FactoryManagerBase> coarseLevelManager,
240  const RCP<const FactoryManagerBase> nextLevelManager = Teuchos::null);
241 
243  void Setup(const FactoryManagerBase& manager = FactoryManager(), int startLevel = 0, int numDesiredLevels = GetDefaultMaxLevels());
244 
245  void SetupRe();
246 
248  void Clear(int startLevel = 0);
249  void ExpertClear();
250 
252  CycleType GetCycle() const { return Cycle_; }
253 
255  void SetCycle(CycleType Cycle) { Cycle_ = Cycle; }
256 
258  void SetProlongatorScalingFactor(double scalingFactor) { scalingFactor_ = scalingFactor; }
259 
272  ReturnType Iterate(const MultiVector& B, MultiVector& X, ConvData conv = ConvData(),
273  bool InitialGuessIsZero = false, LO startLevel = 0);
274 
284  void Write(const LO &start=-1, const LO &end=-1, const std::string &suffix="");
285 
287 
289 
290 
292  void Keep(const std::string & ename, const FactoryBase* factory = NoFactory::get());
293 
295  void Delete(const std::string& ename, const FactoryBase* factory = NoFactory::get());
296 
298  void AddKeepFlag(const std::string & ename, const FactoryBase* factory = NoFactory::get(), KeepType keep = MueLu::Keep);
299 
301  void RemoveKeepFlag(const std::string & ename, const FactoryBase* factory, KeepType keep = MueLu::All);
302 
304 
306 
307 
309  std::string description() const;
310 
316  void describe(Teuchos::FancyOStream& out, const VerbLevel verbLevel = Default) const;
317  void describe(Teuchos::FancyOStream& out, const Teuchos::EVerbosityLevel verbLevel = Teuchos::VERB_HIGH) const;
318 
319  // Hierarchy::print is local hierarchy function, thus the statistics can be different from global ones
320  void print(std::ostream& out = std::cout, const VerbLevel verbLevel = (MueLu::Parameters | MueLu::Statistics0)) const;
321 
326  void IsPreconditioner(const bool flag);
327 
329 
330  void EnableGraphDumping(const std::string& filename, int levelID = 1) {
331  isDumpingEnabled_ = true;
332  dumpLevel_ = levelID;
333  dumpFile_ = filename;
334  }
335 
336 #ifdef HAVE_MUELU_DEPRECATED_CODE
337  template<class Node2>
338  Teuchos::RCP< Hierarchy<Scalar, LocalOrdinal, GlobalOrdinal, Node2> >
339  MUELU_DEPRECATED
340  clone (const RCP<Node2> &node2) const;
341 #endif
342 
343  void setlib(Xpetra::UnderlyingLib inlib) { lib_ = inlib; }
344  Xpetra::UnderlyingLib lib() { return lib_; }
345 
346  // force recreation of cached description_ next time description() is called:
348  description_ = "";
349  }
350 
351  void AllocateLevelMultiVectors(int numvecs);
353 
354  protected:
355  const RCP<const FactoryManagerBase>& GetLevelManager(const int levelID) const {
356  return levelManagers_[levelID];
357  }
358 
359  private:
361  Hierarchy(const Hierarchy &h);
362 
364  Array<RCP<Level> > Levels_;
365 
366  // We replace coordinates GIDs to make them consistent with matrix GIDs,
367  // even if user does not do that. Ideally, though, we should completely
368  // remove any notion of coordinate GIDs, and deal only with LIDs, assuming
369  // that they are consistent with matrix block IDs
370  void ReplaceCoordinateMap(Level& level);
371 
372  // Minimum size of a matrix on any level. If we fall below that, we stop
373  // the coarsening
374  Xpetra::global_size_t maxCoarseSize_;
375 
376  // Potential speed up of the setup by skipping R construction, and using
377  // transpose matrix-matrix product for RAP
379 
380  // Potential speed up of the solve by fusing prolongation and update steps.
381  // This can lead to more iterations to round-off error accumulation.
383 
384  // Potential speed up of the setup by skipping rebalancing of P and R, and
385  // doing extra import during solve
387 
388  // Hierarchy may be used in a standalone mode, or as a preconditioner
390 
391  // V- or W-cycle
393 
394  // Scaling factor to be applied to coarse grid correction.
396 
397  // Epetra/Tpetra mode
398  Xpetra::UnderlyingLib lib_;
399 
400  // cache description to avoid recreating in each call to description() - use ResetDescription() to force recreation in Setup, SetupRe, etc.
401  mutable std::string description_ = ""; // mutable so that we can lazily initialize in description(), which is declared const
402 
404  // If enabled, we dump the graph on a specified level into a specified file
408 
411 
412  // Level managers used during the Setup
413  Array<RCP<const FactoryManagerBase> > levelManagers_;
414 
415  // Caching (Multi)Vectors used in Hierarchy::Iterate()
418 
419 
420  }; //class Hierarchy
421 
422 #ifdef HAVE_MUELU_DEPRECATED_CODE
423  template<class Scalar, class LocalOrdinal, class GlobalOrdinal, class Node>
424  template<typename Node2>
425  Teuchos::RCP<Hierarchy<Scalar, LocalOrdinal, GlobalOrdinal, Node2> >
426  MUELU_DEPRECATED
428  clone (const Teuchos::RCP<Node2> &node2) const {
430  typedef Xpetra::Matrix<Scalar, LocalOrdinal, GlobalOrdinal, Node2> CloneOperator;
432 
433  Teuchos::RCP<New_H_Type> new_h = Teuchos::rcp(new New_H_Type());
434  new_h->Levels_.resize(this->GetNumLevels());
435  new_h->maxCoarseSize_ = maxCoarseSize_;
436  new_h->implicitTranspose_ = implicitTranspose_;
437  new_h->fuseProlongationAndUpdate_ = fuseProlongationAndUpdate_;
438  new_h->isPreconditioner_ = isPreconditioner_;
439  new_h->isDumpingEnabled_ = isDumpingEnabled_;
440  new_h->dumpLevel_ = dumpLevel_;
441  new_h->dumpFile_ = dumpFile_;
442 
443  RCP<SmootherBase> Pre, Post;
444  RCP<CloneSmoother> clonePre, clonePost;
445  RCP<CloneOperator> cloneA, cloneR, cloneP;
446  RCP<Operator> A, R, P;
447  for (int i = 0; i < GetNumLevels(); i++) {
448  RCP<Level> level = this->Levels_[i];
449  RCP<Level> clonelevel = rcp(new Level());
450 
451  if (level->IsAvailable("A")) {
452  A = level->template Get<RCP<Operator> >("A");
453  cloneA = Xpetra::clone<Scalar, LocalOrdinal, GlobalOrdinal, Node, Node2>(*A, node2);
454  clonelevel->template Set<RCP<CloneOperator> >("A", cloneA);
455  }
456  if (level->IsAvailable("R")){
457  R = level->template Get<RCP<Operator> >("R");
458  cloneR = Xpetra::clone<Scalar, LocalOrdinal, GlobalOrdinal, Node, Node2>(*R, node2);
459  clonelevel->template Set<RCP<CloneOperator> >("R", cloneR);
460  }
461  if (level->IsAvailable("P")){
462  P = level->template Get<RCP<Operator> >("P");
463  cloneP = Xpetra::clone<Scalar, LocalOrdinal, GlobalOrdinal, Node, Node2>(*P, node2);
464  clonelevel->template Set<RCP<CloneOperator> >("P", cloneP);
465  }
466  if (level->IsAvailable("PreSmoother")){
467  Pre = level->template Get<RCP<SmootherBase> >("PreSmoother");
468  clonePre = MueLu::clone<Scalar, LocalOrdinal, GlobalOrdinal, Node, Node2> (Pre, cloneA, node2);
469  clonelevel->template Set<RCP<CloneSmoother> >("PreSmoother", clonePre);
470  }
471  if (level->IsAvailable("PostSmoother")){
472  Post = level->template Get<RCP<SmootherBase> >("PostSmoother");
473  clonePost = MueLu::clone<Scalar, LocalOrdinal, GlobalOrdinal, Node, Node2> (Post, cloneA, node2);
474  clonelevel-> template Set<RCP<CloneSmoother> >("PostSmoother", clonePost);
475  }
476  new_h->Levels_[i] = clonelevel;
477  }
478 
479  return new_h;
480  }
481 #endif
482 
483 } //namespace MueLu
484 
485 #define MUELU_HIERARCHY_SHORT
486 #endif // MUELU_HIERARCHY_DECL_HPP
MueLu::Hierarchy::isDumpingEnabled_
bool isDumpingEnabled_
Graph dumping.
Definition: MueLu_Hierarchy_decl.hpp:405
MueLu_ConfigDefs.hpp
MueLu::Hierarchy::EnableGraphDumping
void EnableGraphDumping(const std::string &filename, int levelID=1)
Definition: MueLu_Hierarchy_decl.hpp:330
MueLu::Undefined
@ Undefined
Definition: MueLu_Hierarchy_decl.hpp:87
MueLu_SmootherFactory_fwd.hpp
MueLu::DefaultScalar
double DefaultScalar
Definition: MueLu_Details_DefaultTypes.hpp:55
MueLu::ReturnType
ReturnType
Definition: MueLu_Hierarchy_decl.hpp:84
MueLu::Hierarchy::GetGlobalNumLevels
int GetGlobalNumLevels() const
Definition: MueLu_Hierarchy_def.hpp:161
MueLu::Hierarchy::GetDefaultImplicitTranspose
static bool GetDefaultImplicitTranspose()
Definition: MueLu_Hierarchy_decl.hpp:148
MueLu::Hierarchy::Hierarchy
friend class Hierarchy
Definition: MueLu_Hierarchy_decl.hpp:168
MueLu::Hierarchy::AddNewLevel
void AddNewLevel()
Add a new level at the end of the hierarchy.
Definition: MueLu_Hierarchy_def.hpp:142
MueLu::Hierarchy::CheckLevel
void CheckLevel(Level &level, int levelID)
Helper function.
Definition: MueLu_Hierarchy_def.hpp:236
MueLu::KeepType
short KeepType
Definition: MueLu_KeepType.hpp:63
MueLu::All
@ All
Definition: MueLu_KeepType.hpp:59
string
DASHPOS string(SUBSTRING ${CLASS} 0 ${DASHPOS} CLASS_NAME) set(CONDITION_NAME "") set(CONDITION_NAME_END "") string(SUBSTRING $
Definition: src/CMakeLists.txt:134
MueLu::Hierarchy::ConvData::ConvData
ConvData(std::pair< LO, MagnitudeType > p)
Definition: MueLu_Hierarchy_decl.hpp:116
MueLu::Hierarchy::GetNumLevels
int GetNumLevels() const
Definition: MueLu_Hierarchy_def.hpp:156
MueLu::Hierarchy::GetDefaultMaxCoarseSize
static Xpetra::global_size_t GetDefaultMaxCoarseSize()
Definition: MueLu_Hierarchy_decl.hpp:150
MueLu::Hierarchy::SetCycle
void SetCycle(CycleType Cycle)
Supports VCYCLE and WCYCLE types.
Definition: MueLu_Hierarchy_decl.hpp:255
MueLu_KeepType.hpp
MueLu::Hierarchy::coarseRhs_
Array< RCP< MultiVector > > coarseRhs_
Definition: MueLu_Hierarchy_decl.hpp:417
MueLu::Hierarchy::DumpCurrentGraph
void DumpCurrentGraph() const
Definition: MueLu_Hierarchy_def.hpp:1386
MueLu::Hierarchy::coarseExport_
Array< RCP< MultiVector > > coarseExport_
Definition: MueLu_Hierarchy_decl.hpp:417
MueLu::Hierarchy::ExpertClear
void ExpertClear()
Definition: MueLu_Hierarchy_def.hpp:647
MueLu::Hierarchy::GetLevel
RCP< Level > & GetLevel(const int levelID=0)
Retrieve a certain level from hierarchy.
Definition: MueLu_Hierarchy_def.hpp:149
MueLu::Hierarchy::SetupRe
void SetupRe()
Definition: MueLu_Hierarchy_def.hpp:526
MueLu::Hierarchy::ConvData::ConvData
ConvData(MagnitudeType tol)
Definition: MueLu_Hierarchy_decl.hpp:115
MueLu::Hierarchy::Keep
void Keep(const std::string &ename, const FactoryBase *factory=NoFactory::get())
Call Level::Keep(ename, factory) for each level of the Hierarchy.
Definition: MueLu_Hierarchy_def.hpp:1196
MueLu::Hierarchy::SetImplicitTranspose
void SetImplicitTranspose(const bool &implicit)
Definition: MueLu_Hierarchy_decl.hpp:160
MueLu::Hierarchy::SetProlongatorScalingFactor
void SetProlongatorScalingFactor(double scalingFactor)
Specify damping factor alpha such that x = x + alpha*P*c, where c is the coarse grid correction.
Definition: MueLu_Hierarchy_decl.hpp:258
MueLu::Hierarchy::sizeOfAllocatedLevelMultiVectors_
int sizeOfAllocatedLevelMultiVectors_
Definition: MueLu_Hierarchy_decl.hpp:416
MueLu::Hierarchy::lib
Xpetra::UnderlyingLib lib()
Definition: MueLu_Hierarchy_decl.hpp:344
MueLu::Hierarchy::Cycle_
CycleType Cycle_
Definition: MueLu_Hierarchy_decl.hpp:392
MueLu::Hierarchy::ConvData::ConvData
ConvData(LO maxIts)
Definition: MueLu_Hierarchy_decl.hpp:114
MueLu::Hierarchy::Levels_
Array< RCP< Level > > Levels_
Container for Level objects.
Definition: MueLu_Hierarchy_decl.hpp:364
Scalar
MueLu::DefaultScalar Scalar
Definition: MueLu_UseDefaultTypes.hpp:49
GlobalOrdinal
MueLu::DefaultGlobalOrdinal GlobalOrdinal
Definition: MueLu_UseDefaultTypes.hpp:51
MueLu::Hierarchy::scalingFactor_
double scalingFactor_
Definition: MueLu_Hierarchy_decl.hpp:395
MueLu::Hierarchy::DeleteLevelMultiVectors
void DeleteLevelMultiVectors()
Definition: MueLu_Hierarchy_def.hpp:1579
MueLu::Hierarchy::AddLevel
void AddLevel(const RCP< Level > &level)
Add a level at the end of the hierarchy.
Definition: MueLu_Hierarchy_def.hpp:125
MueLu::Hierarchy::description
std::string description() const
Return a simple one-line description of this object.
Definition: MueLu_Hierarchy_def.hpp:1220
MueLu_TwoLevelFactoryBase_fwd.hpp
MueLu_Level_fwd.hpp
MueLu_NoFactory.hpp
MueLu
Namespace for MueLu classes and methods.
Definition: MueLu_BrickAggregationFactory_decl.hpp:76
MueLu_SmootherFactoryBase_fwd.hpp
MueLu::DefaultLocalOrdinal
int DefaultLocalOrdinal
Definition: MueLu_Details_DefaultTypes.hpp:56
MueLu::Hierarchy::Write
void Write(const LO &start=-1, const LO &end=-1, const std::string &suffix="")
Print matrices in the multigrid hierarchy to file.
Definition: MueLu_Hierarchy_def.hpp:1167
MueLu::Hierarchy::Hierarchy
Hierarchy(const Hierarchy &h)
Copy constructor is not implemented.
MueLu::Hierarchy::residual_
Array< RCP< MultiVector > > residual_
Definition: MueLu_Hierarchy_decl.hpp:417
MueLu::Hierarchy::levelManagers_
Array< RCP< const FactoryManagerBase > > levelManagers_
Definition: MueLu_Hierarchy_decl.hpp:413
Node
MueLu::DefaultNode Node
Definition: MueLu_UseDefaultTypes.hpp:52
MueLu_PFactory_fwd.hpp
MueLu::Hierarchy::setlib
void setlib(Xpetra::UnderlyingLib inlib)
Definition: MueLu_Hierarchy_decl.hpp:343
MueLu::BaseClass
Base class for MueLu classes.
Definition: MueLu_BaseClass.hpp:63
MueLu::Hierarchy::GetLevelManager
const RCP< const FactoryManagerBase > & GetLevelManager(const int levelID) const
Definition: MueLu_Hierarchy_decl.hpp:355
MueLu::Parameters
@ Parameters
Print parameters.
Definition: MueLu_VerbosityLevel.hpp:87
MueLu::Hierarchy::description_
std::string description_
Definition: MueLu_Hierarchy_decl.hpp:401
MueLu::Statistics0
@ Statistics0
Print statistics that do not involve significant additional computation.
Definition: MueLu_VerbosityLevel.hpp:70
MueLu::Hierarchy::Iterate
ReturnType Iterate(const MultiVector &B, MultiVector &X, ConvData conv=ConvData(), bool InitialGuessIsZero=false, LO startLevel=0)
Apply the multigrid preconditioner.
Definition: MueLu_Hierarchy_def.hpp:859
MueLu_Types.hpp
MueLu::Hierarchy::lib_
Xpetra::UnderlyingLib lib_
Definition: MueLu_Hierarchy_decl.hpp:398
MueLu::Hierarchy::Clear
void Clear(int startLevel=0)
Clear impermanent data from previous setup.
Definition: MueLu_Hierarchy_def.hpp:638
MueLu::Hierarchy::Setup
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.
Definition: MueLu_Hierarchy_def.hpp:290
MueLu::Hierarchy::GetImplicitTranspose
bool GetImplicitTranspose() const
Definition: MueLu_Hierarchy_decl.hpp:155
MueLu::Hierarchy::print
void print(std::ostream &out=std::cout, const VerbLevel verbLevel=(MueLu::Parameters|MueLu::Statistics0)) const
Definition: MueLu_Hierarchy_def.hpp:1374
MueLu::Hierarchy::GetDefaultCycle
static CycleType GetDefaultCycle()
Definition: MueLu_Hierarchy_decl.hpp:147
MueLu::Hierarchy::RemoveKeepFlag
void RemoveKeepFlag(const std::string &ename, const FactoryBase *factory, KeepType keep=MueLu::All)
Call Level::RemoveKeepFlag for each level of the Hierarchy.
Definition: MueLu_Hierarchy_def.hpp:1214
MueLu::SmootherBase
Base class for smoothers.
Definition: MueLu_SmootherBase.hpp:68
MueLu::WCYCLE
@ WCYCLE
Definition: MueLu_Types.hpp:54
MueLu::Unconverged
@ Unconverged
Definition: MueLu_Hierarchy_decl.hpp:86
MueLu::Hierarchy::ConvData::tol_
MagnitudeType tol_
Definition: MueLu_Hierarchy_decl.hpp:119
MueLu_Hierarchy_fwd.hpp
MueLu::Hierarchy::GetDefaultMaxLevels
static int GetDefaultMaxLevels()
Definition: MueLu_Hierarchy_decl.hpp:151
MueLu::Hierarchy::Delete
void Delete(const std::string &ename, const FactoryBase *factory=NoFactory::get())
Call Level::Delete(ename, factory) for each level of the Hierarchy.
Definition: MueLu_Hierarchy_def.hpp:1202
MueLu_Utilities_fwd.hpp
MueLu::Hierarchy::fuseProlongationAndUpdate_
bool fuseProlongationAndUpdate_
Definition: MueLu_Hierarchy_decl.hpp:382
MueLu::Hierarchy::ResetDescription
void ResetDescription()
Definition: MueLu_Hierarchy_decl.hpp:347
MueLu_RFactory_fwd.hpp
MueLu::Hierarchy::MagnitudeType
STS::magnitudeType MagnitudeType
Definition: MueLu_Hierarchy_decl.hpp:109
MueLu::Hierarchy::coarseImport_
Array< RCP< MultiVector > > coarseImport_
Definition: MueLu_Hierarchy_decl.hpp:417
MueLu::Hierarchy::GetFuseProlongationAndUpdate
bool GetFuseProlongationAndUpdate() const
Definition: MueLu_Hierarchy_decl.hpp:156
MueLu::FactoryManagerBase
Class that provides default factories within Needs class.
Definition: MueLu_FactoryManagerBase.hpp:63
MueLu::Hierarchy::dumpLevel_
int dumpLevel_
Definition: MueLu_Hierarchy_decl.hpp:406
MueLu::FactoryBase
Base class for factories (e.g., R, P, and A_coarse).
Definition: MueLu_FactoryBase.hpp:60
MueLu::Hierarchy::SetFuseProlongationAndUpdate
void SetFuseProlongationAndUpdate(const bool &fuse)
Definition: MueLu_Hierarchy_decl.hpp:161
MueLu::Hierarchy::ConvData::ConvData
ConvData()
Definition: MueLu_Hierarchy_decl.hpp:113
MueLu::VerbLevel
int VerbLevel
Definition: MueLu_VerbosityLevel.hpp:108
MueLu::DefaultNode
KokkosClassic::DefaultNode::DefaultNodeType DefaultNode
Definition: MueLu_Details_DefaultTypes.hpp:66
MueLu::Hierarchy::STS
Teuchos::ScalarTraits< SC > STS
Definition: MueLu_Hierarchy_decl.hpp:108
MueLu::Hierarchy::GetRate
MagnitudeType GetRate() const
Definition: MueLu_Hierarchy_decl.hpp:188
MueLu_PerfUtils_fwd.hpp
MueLu::Hierarchy::SetPRrebalance
void SetPRrebalance(bool doPRrebalance)
Definition: MueLu_Hierarchy_decl.hpp:159
MueLu::Hierarchy::GetOperatorComplexity
double GetOperatorComplexity() const
Definition: MueLu_Hierarchy_def.hpp:173
MueLu_FactoryBase_fwd.hpp
MueLu::Hierarchy::~Hierarchy
virtual ~Hierarchy()
Destructor.
Definition: MueLu_Hierarchy_decl.hpp:139
MueLu::Hierarchy::GetDefaultFuseProlongationAndUpdate
static bool GetDefaultFuseProlongationAndUpdate()
Definition: MueLu_Hierarchy_decl.hpp:149
MueLu::Hierarchy::SetMaxCoarseSize
void SetMaxCoarseSize(Xpetra::global_size_t maxCoarseSize)
Definition: MueLu_Hierarchy_decl.hpp:158
MueLu::Hierarchy::coarseX_
Array< RCP< MultiVector > > coarseX_
Definition: MueLu_Hierarchy_decl.hpp:417
MueLu_SmootherCloner.hpp
MueLu::CycleType
CycleType
Definition: MueLu_Types.hpp:52
MueLu::Hierarchy::isPreconditioner_
bool isPreconditioner_
Definition: MueLu_Hierarchy_decl.hpp:389
MueLu::Hierarchy::describe
void describe(Teuchos::FancyOStream &out, const VerbLevel verbLevel=Default) const
Print the Hierarchy with some verbosity level to a FancyOStream object.
Definition: MueLu_Hierarchy_def.hpp:1237
MueLu::Hierarchy::ConvData::maxIts_
LO maxIts_
Definition: MueLu_Hierarchy_decl.hpp:118
MueLu_HierarchyUtils_fwd.hpp
MueLu::Hierarchy::SetMatvecParams
void SetMatvecParams(RCP< ParameterList > matvecParams)
Definition: MueLu_Hierarchy_def.hpp:246
MueLu::Default
@ Default
Definition: MueLu_VerbosityLevel.hpp:102
MueLu_UseShortNames.hpp
MueLu::Hierarchy::ConvData
Data struct for defining stopping criteria of multigrid iteration.
Definition: MueLu_Hierarchy_decl.hpp:112
MueLu::Hierarchy::LastLevelID
int LastLevelID() const
Definition: MueLu_Hierarchy_decl.hpp:171
MueLu::Hierarchy::GetDefaultPRrebalance
static bool GetDefaultPRrebalance()
Definition: MueLu_Hierarchy_decl.hpp:152
MueLu::Hierarchy::rate_
MagnitudeType rate_
Convergece rate.
Definition: MueLu_Hierarchy_decl.hpp:410
MueLu::Converged
@ Converged
Definition: MueLu_Hierarchy_decl.hpp:85
MueLu::Hierarchy::ReplaceCoordinateMap
void ReplaceCoordinateMap(Level &level)
Definition: MueLu_Hierarchy_def.hpp:1446
MueLu_MasterList.hpp
MueLu::Hierarchy::implicitTranspose_
bool implicitTranspose_
Definition: MueLu_Hierarchy_decl.hpp:378
MueLu::Hierarchy::correction_
Array< RCP< MultiVector > > correction_
Definition: MueLu_Hierarchy_decl.hpp:417
MueLu::NoFactory::get
static const NoFactory * get()
Definition: MueLu_NoFactory.cpp:59
MueLu::Keep
@ Keep
Always keep data, even accross run. This flag is set by Level::Keep(). This flag is propagated to coa...
Definition: MueLu_KeepType.hpp:55
MueLu::Hierarchy::AddKeepFlag
void AddKeepFlag(const std::string &ename, const FactoryBase *factory=NoFactory::get(), KeepType keep=MueLu::Keep)
Call Level::AddKeepFlag for each level of the Hierarchy.
Definition: MueLu_Hierarchy_def.hpp:1208
MueLu_SmootherBase_fwd.hpp
MueLu::Hierarchy::AllocateLevelMultiVectors
void AllocateLevelMultiVectors(int numvecs)
Definition: MueLu_Hierarchy_def.hpp:1519
MueLu::Hierarchy
Provides methods to build a multigrid hierarchy and apply multigrid cycles.
Definition: MueLu_Hierarchy_decl.hpp:104
MueLu::Hierarchy::GetMaxCoarseSize
Xpetra::global_size_t GetMaxCoarseSize() const
Definition: MueLu_Hierarchy_decl.hpp:154
MueLu::Hierarchy::GetCycle
CycleType GetCycle() const
Returns multigrid cycle type (supports VCYCLE and WCYCLE)
Definition: MueLu_Hierarchy_decl.hpp:252
MueLu::Hierarchy::doPRrebalance_
bool doPRrebalance_
Definition: MueLu_Hierarchy_decl.hpp:386
MueLu::FactoryManager
This class specifies the default factory that should generate some data on a Level if the data does n...
Definition: MueLu_FactoryManager_decl.hpp:108
MueLu::DefaultGlobalOrdinal
int DefaultGlobalOrdinal
Definition: MueLu_Details_DefaultTypes.hpp:63
MueLu::Level
Class that holds all level-specific information.
Definition: MueLu_Level.hpp:99
MueLu::Hierarchy::maxCoarseSize_
Xpetra::global_size_t maxCoarseSize_
Definition: MueLu_Hierarchy_decl.hpp:374
MueLu::Hierarchy::IsPreconditioner
void IsPreconditioner(const bool flag)
Definition: MueLu_Hierarchy_def.hpp:1381
MueLu::Hierarchy::dumpFile_
std::string dumpFile_
Definition: MueLu_Hierarchy_decl.hpp:407
MueLu_BaseClass.hpp
MueLu::Hierarchy::GetSmootherComplexity
double GetSmootherComplexity() const
Definition: MueLu_Hierarchy_def.hpp:196
LocalOrdinal
MueLu::DefaultLocalOrdinal LocalOrdinal
Definition: MueLu_UseDefaultTypes.hpp:50
MueLu::VCYCLE
@ VCYCLE
Definition: MueLu_Types.hpp:53