MueLu Version of the Day
Loading...
Searching...
No Matches
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
16#include <Teuchos_ParameterEntry.hpp>
17#include <Teuchos_Array.hpp>
18
19#include "MueLu_ConfigDefs.hpp"
21
23
24#include "MueLu_FactoryBase.hpp"
25#include "MueLu_FactoryManager.hpp"
30
31#include "MueLu_Monitor.hpp"
32#include "MueLu_Exceptions.hpp"
33
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
147namespace MueLu {
148
155template <class Scalar = DefaultScalar,
158 class Node = DefaultNode>
159class FactoryFactory : public BaseClass {
160#undef MUELU_FACTORYFACTORY_SHORT
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
224 // 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)
MueLu::DefaultLocalOrdinal LocalOrdinal
MueLu::DefaultScalar Scalar
MueLu::DefaultGlobalOrdinal GlobalOrdinal
MueLu::DefaultNode Node
Base class for MueLu classes.
Factory that can generate other factories from.
std::map< std::string, RCP< const FactoryBase > > FactoryMap
RCP< FactoryBase > BuildBlockedDirectSolver(const Teuchos::ParameterList &paramList, const FactoryMap &, const FactoryManagerMap &) const
std::map< std::string, RCP< FactoryManagerBase > > FactoryManagerMap
RCP< T > BuildBlockedFactory(const Teuchos::ParameterList &paramList, const FactoryMap &factoryMapIn, const FactoryManagerMap &factoryManagersIn) const
RCP< FactoryBase > BuildBlockedSmoother(const Teuchos::ParameterList &paramList, const FactoryMap &factoryMapIn, const FactoryManagerMap &factoryManagersIn) const
virtual RCP< const FactoryBase > BuildFactory(const Teuchos::ParameterEntry &param, const FactoryMap &factoryMapIn, const FactoryManagerMap &factoryManagersIn) const
: Interpret Factory parameter list and build new factory
RCP< FactoryBase > BuildTekoSmoother(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< ToggleCoordinatesTransferFactory > BuildToggleCoordinatesTransferFactory(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< T > BuildBlockedCoordFactory(const Teuchos::ParameterList &paramList, const FactoryMap &factoryMapIn, const FactoryManagerMap &factoryManagersIn) const
RCP< FactoryBase > BuildDirectSolver(const Teuchos::ParameterList &paramList, const FactoryMap &, const FactoryManagerMap &) const
RCP< T > Build(const Teuchos::ParameterList &paramList, const FactoryMap &factoryMapIn, const FactoryManagerMap &factoryManagersIn) const
RCP< T > Build2(const Teuchos::ParameterList &paramList, const FactoryMap &factoryMapIn, const FactoryManagerMap &factoryManagersIn) const
RCP< FactoryBase > BuildTrilinosSmoother(const Teuchos::ParameterList &paramList, const FactoryMap &factoryMapIn, const FactoryManagerMap &factoryManagersIn) const
TrilinosSmoother.
RCP< FactoryBase > BuildMatlabSmoother(const Teuchos::ParameterList &paramList, const FactoryMap &factoryMapIn, const FactoryManagerMap &factoryManagersIn) const
MatlabSmoother.
Namespace for MueLu classes and methods.
Tpetra::KokkosClassic::DefaultNode::DefaultNodeType DefaultNode
Tpetra::Details::DefaultTypes::scalar_type DefaultScalar