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