MueLu Version of the Day
Loading...
Searching...
No Matches
MueLu_HierarchyManager_decl.hpp
Go to the documentation of this file.
1// @HEADER
2// *****************************************************************************
3// MueLu: A package for multigrid based preconditioning
4//
5// Copyright 2012 NTESS and the MueLu contributors.
6// SPDX-License-Identifier: BSD-3-Clause
7// *****************************************************************************
8// @HEADER
9
10#ifndef MUELU_HIERARCHYMANAGER_DECL_HPP
11#define MUELU_HIERARCHYMANAGER_DECL_HPP
12
13#include <string>
14#include <map>
15
16#include <Teuchos_Array.hpp>
17
18#include <Xpetra_Operator.hpp>
19#include <Xpetra_IO.hpp>
20
21#include "MueLu_ConfigDefs.hpp"
22
23#include "MueLu_Exceptions.hpp"
24#include "MueLu_Aggregates.hpp"
25#include "MueLu_Hierarchy.hpp"
27#include "MueLu_Level.hpp"
28#include "MueLu_MasterList.hpp"
29#include "MueLu_PerfUtils.hpp"
30
31#ifdef HAVE_MUELU_INTREPID2
32#include "Kokkos_DynRankView.hpp"
33#endif
34
35namespace MueLu {
36
37// This class stores the configuration of a Hierarchy.
38// The class also provides an algorithm to build a Hierarchy from the configuration.
39//
40// See also: FactoryManager
41//
42template <class Scalar = DefaultScalar,
45 class Node = DefaultNode>
46class HierarchyManager : public HierarchyFactory<Scalar, LocalOrdinal, GlobalOrdinal, Node> {
47#undef MUELU_HIERARCHYMANAGER_SHORT
49 typedef std::pair<std::string, const FactoryBase*> keep_pair;
50
51 public:
53 HierarchyManager(int numDesiredLevel = MasterList::getDefault<int>("max levels"));
54
56 virtual ~HierarchyManager() = default;
57
59 void AddFactoryManager(int startLevel, int numDesiredLevel, RCP<FactoryManagerBase> manager);
60
62 RCP<FactoryManagerBase> GetFactoryManager(int levelID) const;
63
65 size_t getNumFactoryManagers() const;
66
69
71
72 virtual RCP<Hierarchy> CreateHierarchy() const;
73
74 virtual RCP<Hierarchy> CreateHierarchy(const std::string& label) const;
75
77 virtual void SetupHierarchy(Hierarchy& H) const;
78
80
81 typedef std::map<std::string, RCP<const FactoryBase>> FactoryMap;
82
83 protected: // TODO: access function
85 virtual void SetupOperator(Operator& /* Op */) const {}
86
88 // TODO: merge with SetupMatrix ?
89 virtual void SetupExtra(Hierarchy& /* H */) const {}
90
91 // TODO this was private
92 // Used in SetupHierarchy() to access levelManagers_
93 // Inputs i=-1 and i=size() are allowed to simplify calls to hierarchy->Setup()
94 Teuchos::RCP<FactoryManagerBase> LvlMngr(int levelID, int lastLevelID) const;
95
98
99 mutable int numDesiredLevel_;
100 Xpetra::global_size_t maxCoarseSize_;
102
103 bool doPRrebalance_;
107
115
117
120
122 // Items here get handled manually
123 Teuchos::Array<int> nullspaceToPrint_;
124 Teuchos::Array<int> coordinatesToPrint_;
125 Teuchos::Array<int> materialToPrint_;
126 Teuchos::Array<int> aggregatesToPrint_;
127 Teuchos::Array<int> elementToNodeMapsToPrint_;
128
129 // Data we'll need to save, not necessarily print
130 Teuchos::Array<std::string> dataToSave_;
131
132 // Matrices we'll need to print
133 std::map<std::string, Teuchos::Array<int>> matricesToPrint_;
134
135 Teuchos::RCP<Teuchos::ParameterList> matvecParams_;
136
137 std::map<int, std::vector<keep_pair>> keep_;
139
140 private:
141 // Set the keep flags for Export Data
142 void ExportDataSetKeepFlags(Hierarchy& H, const Teuchos::Array<int>& data, const std::string& name) const;
143
144 void ExportDataSetKeepFlagsNextLevel(Hierarchy& H, const Teuchos::Array<int>& data, const std::string& name) const;
145
146 // Set the keep flags for Export Data
147 void ExportDataSetKeepFlagsAll(Hierarchy& H, const std::string& name) const;
148
149 template <class T>
150 void WriteData(Hierarchy& H, const Teuchos::Array<int>& data, const std::string& name) const;
151
152 void WriteDataAggregates(Hierarchy& H, const Teuchos::Array<int>& data, const std::string& name) const;
153
154 template <class T>
155 void WriteDataFC(Hierarchy& H, const Teuchos::Array<int>& data, const std::string& name, const std::string& ofname) const;
156
157 // For dumping an IntrepidPCoarsening element-to-node map to disk
158 template <class T>
159 void WriteFieldContainer(const std::string& fileName, T& fcont, const Map& colMap) const;
160
161 // Levels
162 Array<RCP<FactoryManagerBase>> levelManagers_; // one FactoryManager per level (the last levelManager is used for all the remaining levels)
163
164}; // class HierarchyManager
165
166} // namespace MueLu
167
168#define MUELU_HIERARCHYMANAGER_SHORT
169#endif // MUELU_HIERARCHYMANAGER_HPP
170
171// TODO: split into _decl/_def
172// TODO: default value for first param (FactoryManager()) should not be duplicated (code maintainability)
MueLu::DefaultLocalOrdinal LocalOrdinal
MueLu::DefaultScalar Scalar
MueLu::DefaultGlobalOrdinal GlobalOrdinal
MueLu::DefaultNode Node
Teuchos::Array< int > elementToNodeMapsToPrint_
void WriteFieldContainer(const std::string &fileName, T &fcont, const Map &colMap) const
void ExportDataSetKeepFlagsNextLevel(Hierarchy &H, const Teuchos::Array< int > &data, const std::string &name) const
virtual void SetupHierarchy(Hierarchy &H) const
Setup Hierarchy object.
Teuchos::Array< int > coordinatesToPrint_
Teuchos::RCP< Teuchos::ParameterList > matvecParams_
virtual void SetupExtra(Hierarchy &) const
Setup extra data.
Teuchos::Array< int > aggregatesToPrint_
std::map< std::string, RCP< const FactoryBase > > FactoryMap
void ExportDataSetKeepFlags(Hierarchy &H, const Teuchos::Array< int > &data, const std::string &name) const
void WriteDataFC(Hierarchy &H, const Teuchos::Array< int > &data, const std::string &name, const std::string &ofname) const
void WriteData(Hierarchy &H, const Teuchos::Array< int > &data, const std::string &name) const
std::map< int, std::vector< keep_pair > > keep_
bool suppressNullspaceDimensionCheck_
Flag to indicate whether the check of the nullspace dimension is suppressed.
virtual void SetupOperator(Operator &) const
Setup Matrix object.
RCP< FactoryManagerBase > GetFactoryManager(int levelID) const
std::pair< std::string, const FactoryBase * > keep_pair
void WriteDataAggregates(Hierarchy &H, const Teuchos::Array< int > &data, const std::string &name) const
int graphOutputLevel_
-2 = no output, -1 = all levels
void AddFactoryManager(int startLevel, int numDesiredLevel, RCP< FactoryManagerBase > manager)
virtual RCP< Hierarchy > CreateHierarchy(const std::string &label) const
std::map< std::string, Teuchos::Array< int > > matricesToPrint_
Xpetra::global_size_t maxCoarseSize_
void ExportDataSetKeepFlagsAll(Hierarchy &H, const std::string &name) const
Teuchos::Array< int > nullspaceToPrint_
Lists of entities to be exported (or saved).
virtual ~HierarchyManager()=default
Destructor.
virtual RCP< Hierarchy > CreateHierarchy() const
Create an empty Hierarchy object.
Array< RCP< FactoryManagerBase > > levelManagers_
HierarchyManager(int numDesiredLevel=MasterList::getDefault< int >("max levels"))
Constructor.
Teuchos::Array< int > materialToPrint_
Teuchos::Array< std::string > dataToSave_
Teuchos::RCP< FactoryManagerBase > LvlMngr(int levelID, int lastLevelID) const
size_t getNumFactoryManagers() const
returns number of factory managers stored in levelManagers_ vector.
Provides methods to build a multigrid hierarchy and apply multigrid cycles.
static const T & getDefault(const std::string &name)
Returns default value on the "master" list for a parameter with the specified name and type.
Namespace for MueLu classes and methods.
Tpetra::KokkosClassic::DefaultNode::DefaultNodeType DefaultNode
Tpetra::Details::DefaultTypes::scalar_type DefaultScalar