MueLu  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
MueLu_FactoryFactory_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_FACTORYFACTORY_DECL_HPP
11 #define MUELU_FACTORYFACTORY_DECL_HPP
12 
13 #include <string>
14 #include <vector>
15 
17 #include <Teuchos_Array.hpp>
18 
19 #include "MueLu_ConfigDefs.hpp"
21 
23 
24 #include "MueLu_FactoryBase.hpp"
25 #include "MueLu_FactoryManager.hpp"
29 #include "MueLu_Hierarchy_fwd.hpp"
30 
31 #include "MueLu_Monitor.hpp"
32 #include "MueLu_Exceptions.hpp"
33 
83 #include "MueLu_PgPFactory_fwd.hpp"
91 #include "MueLu_RAPFactory_fwd.hpp"
95 #include "MueLu_SaPFactory_fwd.hpp"
105 #ifdef HAVE_MUELU_TEKO
107 #endif
125 
128 #ifdef HAVE_MUELU_DEPRECATED_CODE
130 #endif
136 
137 #ifdef HAVE_MUELU_MATLAB
141 #endif
142 
143 #ifdef HAVE_MUELU_INTREPID2
145 #endif
146 
147 namespace MueLu {
148 
155 template <class Scalar = DefaultScalar,
158  class Node = DefaultNode>
159 class FactoryFactory : public BaseClass {
160 #undef MUELU_FACTORYFACTORY_SHORT
161 #include "MueLu_UseShortNames.hpp"
162 
163  typedef std::map<std::string, RCP<const FactoryBase> > FactoryMap; // TODO: remove
164  typedef std::map<std::string, RCP<FactoryManagerBase> > FactoryManagerMap;
165 
166  public:
184  virtual RCP<const FactoryBase> BuildFactory(const Teuchos::ParameterEntry& param, const FactoryMap& factoryMapIn, const FactoryManagerMap& factoryManagersIn) const;
185 
186  //
187  //
188  //
189 
190  // FOLLOWING FUNCTIONS SHOULD LIVE WITH THE CORRESPONDING CLASS
191 
192  //
193  //
194  //
195 
196  template <class T> // T must implement the Factory interface
197  RCP<T> Build(const Teuchos::ParameterList& paramList, const FactoryMap& factoryMapIn, const FactoryManagerMap& factoryManagersIn) const;
198 
199  template <class T> // T must implement the Factory interface
200  RCP<T> Build2(const Teuchos::ParameterList& paramList, const FactoryMap& factoryMapIn, const FactoryManagerMap& factoryManagersIn) const;
201 
202  template <class T> // T must implement the Factory interface
203  RCP<T> BuildRAPFactory(const Teuchos::ParameterList& paramList, const FactoryMap& factoryMapIn, const FactoryManagerMap& factoryManagersIn) const;
204 
205  template <class T> // T must implement the Factory interface
206  RCP<T> BuildTogglePFactory(const Teuchos::ParameterList& paramList, const FactoryMap& factoryMapIn, const FactoryManagerMap& factoryManagersIn) const;
207 
208  RCP<ToggleCoordinatesTransferFactory> BuildToggleCoordinatesTransferFactory(const Teuchos::ParameterList& paramList, const FactoryMap& factoryMapIn, const FactoryManagerMap& factoryManagersIn) const;
209 
211  // Parameter List Parsing:
212  // <ParameterList name="smootherFact1">
213  // <Parameter name="factory" type="string" value="TrilinosSmoother"/>
214  // <Parameter name="verbose" type="string" value="Warnings"/>
215  // <Parameter name="type" type="string" value="RELAXATION"/>
216  // <ParameterList name="ParameterList">
217  // ...
218  // </ParameterList>
219  // </ParameterList>
220  RCP<FactoryBase> BuildTrilinosSmoother(const Teuchos::ParameterList& paramList, const FactoryMap& factoryMapIn, const FactoryManagerMap& factoryManagersIn) const;
221 
222 #ifdef HAVE_MUELU_MATLAB
223  // Parameter List Parsing:
225  // <ParameterList name="smootherFact1">
226  // <Parameter name="factory" type="string" value="MatlabSmoother"/>
227  // <Parameter name="Setup Function" type="string" value="mySmootherSetup.m"/>
228  // <Parameter name="Solve Function" type="string" value="mySmootherSolve.m"/>
229  // <!--A is implicitly included in this list and nothing else is needed to get diagonal-->
230  // <Parameter name="Needs" type="string" value=""/>
231  // <!--A,x,b are also assumed inputs to the solver: only one additional arg then (diag)-->
232  // <Parameter name="Number of Solver Args" type="int" value="1"/>
233  // </ParameterList>
234  RCP<FactoryBase> BuildMatlabSmoother(const Teuchos::ParameterList& paramList, const FactoryMap& factoryMapIn, const FactoryManagerMap& factoryManagersIn) const;
235 #endif
236 
237  RCP<FactoryBase> BuildDirectSolver(const Teuchos::ParameterList& paramList, const FactoryMap& /* factoryMapIn */, const FactoryManagerMap& /* factoryManagersIn */) const;
238 
239  template <class T> // T must implement the Factory interface
240  RCP<FactoryBase> BuildBlockedSmoother(const Teuchos::ParameterList& paramList, const FactoryMap& factoryMapIn, const FactoryManagerMap& factoryManagersIn) const;
241 
242 #ifdef HAVE_MUELU_TEKO
243  RCP<FactoryBase> BuildTekoSmoother(const Teuchos::ParameterList& paramList, const FactoryMap& factoryMapIn, const FactoryManagerMap& factoryManagersIn) const;
244 #endif
245 
246  RCP<FactoryBase> BuildBlockedDirectSolver(const Teuchos::ParameterList& paramList, const FactoryMap& /* factoryMapIn */, const FactoryManagerMap& /* factoryManagersIn */) const;
247 
248  // RCP<FactoryBase> BuildBlockedPFactory(const Teuchos::ParameterList& paramList, const FactoryMap& factoryMapIn, const FactoryManagerMap& factoryManagersIn) const {
249  // RCP<BlockedPFactory> pfac = rcp(new BlockedPFactory());
250 
251  template <class T> // T must implement the Factory interface
252  RCP<T> BuildBlockedFactory(const Teuchos::ParameterList& paramList, const FactoryMap& factoryMapIn, const FactoryManagerMap& factoryManagersIn) const;
253 
254  template <class T> // T must implement the Factory interface
255  RCP<T> BuildBlockedCoordFactory(const Teuchos::ParameterList& paramList, const FactoryMap& factoryMapIn, const FactoryManagerMap& factoryManagersIn) const;
256 
257 }; // class
258 } // namespace MueLu
259 
260 #define MUELU_FACTORYFACTORY_SHORT
261 #endif // MUELU_FACTORYFACTORY_DECL_HPP
262 
263 // TODO: handle factory parameters
264 // TODO: parameter validator
265 // TODO: static
266 // TODO: default parameters should not be duplicated here and on the Factory (ex: default for overlap (=0) is defined both here and on TrilinosSmoother constructors)
RCP< ToggleCoordinatesTransferFactory > BuildToggleCoordinatesTransferFactory(const Teuchos::ParameterList &paramList, const FactoryMap &factoryMapIn, const FactoryManagerMap &factoryManagersIn) const
MueLu::DefaultLocalOrdinal LocalOrdinal
Tpetra::KokkosClassic::DefaultNode::DefaultNodeType DefaultNode
virtual RCP< const FactoryBase > BuildFactory(const Teuchos::ParameterEntry &param, const FactoryMap &factoryMapIn, const FactoryManagerMap &factoryManagersIn) const
: Interpret Factory parameter list and build new factory
Factory that can generate other factories from.
RCP< T > Build2(const Teuchos::ParameterList &paramList, const FactoryMap &factoryMapIn, const FactoryManagerMap &factoryManagersIn) const
RCP< T > BuildTogglePFactory(const Teuchos::ParameterList &paramList, const FactoryMap &factoryMapIn, const FactoryManagerMap &factoryManagersIn) const
RCP< T > BuildBlockedFactory(const Teuchos::ParameterList &paramList, const FactoryMap &factoryMapIn, const FactoryManagerMap &factoryManagersIn) const
RCP< FactoryBase > BuildDirectSolver(const Teuchos::ParameterList &paramList, const FactoryMap &, const FactoryManagerMap &) const
MueLu::DefaultNode Node
std::map< std::string, RCP< FactoryManagerBase > > FactoryManagerMap
RCP< FactoryBase > BuildTrilinosSmoother(const Teuchos::ParameterList &paramList, const FactoryMap &factoryMapIn, const FactoryManagerMap &factoryManagersIn) const
TrilinosSmoother.
RCP< T > Build(const Teuchos::ParameterList &paramList, const FactoryMap &factoryMapIn, const FactoryManagerMap &factoryManagersIn) const
MueLu::DefaultScalar Scalar
Tpetra::Details::DefaultTypes::scalar_type DefaultScalar
MueLu::DefaultGlobalOrdinal GlobalOrdinal
std::map< std::string, RCP< const FactoryBase > > FactoryMap
RCP< FactoryBase > BuildBlockedDirectSolver(const Teuchos::ParameterList &paramList, const FactoryMap &, const FactoryManagerMap &) const
Base class for MueLu classes.
RCP< FactoryBase > BuildBlockedSmoother(const Teuchos::ParameterList &paramList, const FactoryMap &factoryMapIn, const FactoryManagerMap &factoryManagersIn) const
RCP< T > BuildRAPFactory(const Teuchos::ParameterList &paramList, const FactoryMap &factoryMapIn, const FactoryManagerMap &factoryManagersIn) const
RCP< FactoryBase > BuildTekoSmoother(const Teuchos::ParameterList &paramList, const FactoryMap &factoryMapIn, const FactoryManagerMap &factoryManagersIn) const
RCP< FactoryBase > BuildMatlabSmoother(const Teuchos::ParameterList &paramList, const FactoryMap &factoryMapIn, const FactoryManagerMap &factoryManagersIn) const
MatlabSmoother.
RCP< T > BuildBlockedCoordFactory(const Teuchos::ParameterList &paramList, const FactoryMap &factoryMapIn, const FactoryManagerMap &factoryManagersIn) const