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
133
134#ifdef HAVE_MUELU_MATLAB
138#endif
139
140#ifdef HAVE_MUELU_INTREPID2
142#endif
143
144namespace MueLu {
145
152template <class Scalar = DefaultScalar,
155 class Node = DefaultNode>
156class FactoryFactory : public BaseClass {
157#undef MUELU_FACTORYFACTORY_SHORT
159
160 typedef std::map<std::string, RCP<const FactoryBase> > FactoryMap; // TODO: remove
161 typedef std::map<std::string, RCP<FactoryManagerBase> > FactoryManagerMap;
162
163 public:
181 virtual RCP<const FactoryBase> BuildFactory(const Teuchos::ParameterEntry& param, const FactoryMap& factoryMapIn, const FactoryManagerMap& factoryManagersIn) const;
182
183 //
184 //
185 //
186
187 // FOLLOWING FUNCTIONS SHOULD LIVE WITH THE CORRESPONDING CLASS
188
189 //
190 //
191 //
192
193 template <class T> // T must implement the Factory interface
194 RCP<T> Build(const Teuchos::ParameterList& paramList, const FactoryMap& factoryMapIn, const FactoryManagerMap& factoryManagersIn) const;
195
196 template <class T> // T must implement the Factory interface
197 RCP<T> Build2(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> BuildRAPFactory(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> BuildTogglePFactory(const Teuchos::ParameterList& paramList, const FactoryMap& factoryMapIn, const FactoryManagerMap& factoryManagersIn) const;
204
205 RCP<ToggleCoordinatesTransferFactory> BuildToggleCoordinatesTransferFactory(const Teuchos::ParameterList& paramList, const FactoryMap& factoryMapIn, const FactoryManagerMap& factoryManagersIn) const;
206
208 // Parameter List Parsing:
209 // <ParameterList name="smootherFact1">
210 // <Parameter name="factory" type="string" value="TrilinosSmoother"/>
211 // <Parameter name="verbose" type="string" value="Warnings"/>
212 // <Parameter name="type" type="string" value="RELAXATION"/>
213 // <ParameterList name="ParameterList">
214 // ...
215 // </ParameterList>
216 // </ParameterList>
217 RCP<FactoryBase> BuildTrilinosSmoother(const Teuchos::ParameterList& paramList, const FactoryMap& factoryMapIn, const FactoryManagerMap& factoryManagersIn) const;
218
219#ifdef HAVE_MUELU_MATLAB
221 // Parameter List Parsing:
222 // <ParameterList name="smootherFact1">
223 // <Parameter name="factory" type="string" value="MatlabSmoother"/>
224 // <Parameter name="Setup Function" type="string" value="mySmootherSetup.m"/>
225 // <Parameter name="Solve Function" type="string" value="mySmootherSolve.m"/>
226 // <!--A is implicitly included in this list and nothing else is needed to get diagonal-->
227 // <Parameter name="Needs" type="string" value=""/>
228 // <!--A,x,b are also assumed inputs to the solver: only one additional arg then (diag)-->
229 // <Parameter name="Number of Solver Args" type="int" value="1"/>
230 // </ParameterList>
231 RCP<FactoryBase> BuildMatlabSmoother(const Teuchos::ParameterList& paramList, const FactoryMap& factoryMapIn, const FactoryManagerMap& factoryManagersIn) const;
232#endif
233
234 RCP<FactoryBase> BuildDirectSolver(const Teuchos::ParameterList& paramList, const FactoryMap& /* factoryMapIn */, const FactoryManagerMap& /* factoryManagersIn */) const;
235
236 template <class T> // T must implement the Factory interface
237 RCP<FactoryBase> BuildBlockedSmoother(const Teuchos::ParameterList& paramList, const FactoryMap& factoryMapIn, const FactoryManagerMap& factoryManagersIn) const;
238
239#ifdef HAVE_MUELU_TEKO
240 RCP<FactoryBase> BuildTekoSmoother(const Teuchos::ParameterList& paramList, const FactoryMap& factoryMapIn, const FactoryManagerMap& factoryManagersIn) const;
241#endif
242
243 RCP<FactoryBase> BuildBlockedDirectSolver(const Teuchos::ParameterList& paramList, const FactoryMap& /* factoryMapIn */, const FactoryManagerMap& /* factoryManagersIn */) const;
244
245 // RCP<FactoryBase> BuildBlockedPFactory(const Teuchos::ParameterList& paramList, const FactoryMap& factoryMapIn, const FactoryManagerMap& factoryManagersIn) const {
246 // RCP<BlockedPFactory> pfac = rcp(new BlockedPFactory());
247
248 template <class T> // T must implement the Factory interface
249 RCP<T> BuildBlockedFactory(const Teuchos::ParameterList& paramList, const FactoryMap& factoryMapIn, const FactoryManagerMap& factoryManagersIn) const;
250
251 template <class T> // T must implement the Factory interface
252 RCP<T> BuildBlockedCoordFactory(const Teuchos::ParameterList& paramList, const FactoryMap& factoryMapIn, const FactoryManagerMap& factoryManagersIn) const;
253
254}; // class
255} // namespace MueLu
256
257#define MUELU_FACTORYFACTORY_SHORT
258#endif // MUELU_FACTORYFACTORY_DECL_HPP
259
260// TODO: handle factory parameters
261// TODO: parameter validator
262// TODO: static
263// 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