10 #ifndef MUELU_FACTORYMANAGER_DEF_HPP
11 #define MUELU_FACTORYMANAGER_DEF_HPP
16 #include "MueLu_AmalgamationFactory.hpp"
17 #include "MueLu_CoalesceDropFactory.hpp"
18 #include "MueLu_CoarseMapFactory.hpp"
19 #include "MueLu_ConstraintFactory.hpp"
20 #include "MueLu_AggregateQualityEstimateFactory.hpp"
21 #include "MueLu_DirectSolver.hpp"
22 #include "MueLu_InitialBlockNumberFactory.hpp"
23 #include "MueLu_LineDetectionFactory.hpp"
26 #include "MueLu_NullspaceFactory.hpp"
27 #include "MueLu_PatternFactory.hpp"
28 #include "MueLu_RAPFactory.hpp"
29 #include "MueLu_RepartitionHeuristicFactory.hpp"
30 #include "MueLu_RepartitionFactory.hpp"
31 #include "MueLu_SaPFactory.hpp"
32 #include "MueLu_ScaledNullspaceFactory.hpp"
33 #include "MueLu_SmootherFactory.hpp"
34 #include "MueLu_TentativePFactory.hpp"
35 #include "MueLu_TransPFactory.hpp"
36 #include "MueLu_TrilinosSmoother.hpp"
37 #include "MueLu_UncoupledAggregationFactory.hpp"
38 #include "MueLu_StructuredAggregationFactory.hpp"
39 #include "MueLu_ZoltanInterface.hpp"
40 #include "MueLu_InterfaceMappingTransferFactory.hpp"
41 #include "MueLu_InterfaceAggregationFactory.hpp"
42 #include "MueLu_InverseApproximationFactory.hpp"
44 #include "MueLu_CoalesceDropFactory_kokkos.hpp"
45 #include "MueLu_TentativePFactory_kokkos.hpp"
51 #define MUELU_KOKKOS_FACTORY(varName, oldFactory, newFactory) \
52 (!useKokkos_) ? SetAndReturnDefaultFactory(varName, rcp(new oldFactory())) : SetAndReturnDefaultFactory(varName, rcp(new newFactory()));
54 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
56 SetIgnoreUserData(
false);
57 useKokkos_ = !Node::is_serial;
60 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
62 factoryTable_ = factoryTable;
63 SetIgnoreUserData(
false);
64 useKokkos_ = !Node::is_serial;
67 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
70 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
72 factoryTable_[varName] = factory;
75 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
77 if (factoryTable_.count(varName)) {
79 return factoryTable_.find(varName)->second;
83 return GetDefaultFactory(varName);
86 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
88 return Teuchos::rcp_const_cast<
FactoryBase>(GetFactory(varName));
91 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
93 if (factoryTable_.count(varName))
return true;
97 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
99 if (defaultFactoryTable_.count(varName)) {
101 return defaultFactoryTable_.find(varName)->second;
105 if (varName ==
"A")
return SetAndReturnDefaultFactory(varName,
rcp(
new RAPFactory()));
107 if (varName ==
"RAP Pattern")
return GetFactory(
"A");
108 if (varName ==
"AP Pattern")
return GetFactory(
"A");
110 if (varName ==
"P") {
113 factory->
SetFactory(
"P", GetFactory(
"Ptent"));
114 return SetAndReturnDefaultFactory(varName, factory);
116 if (varName ==
"Nullspace") {
119 factory->
SetFactory(
"Nullspace", GetFactory(
"Ptent"));
120 return SetAndReturnDefaultFactory(varName, factory);
124 if (varName ==
"Coordinates")
return GetFactory(
"Ptent");
125 if (varName ==
"Node Comm")
return GetFactory(
"Ptent");
127 if (varName ==
"R")
return SetAndReturnDefaultFactory(varName,
rcp(
new TransPFactory()));
128 if (varName ==
"RfromPfactory")
return GetFactory(
"P");
129 #if defined(HAVE_MUELU_ZOLTAN) && defined(HAVE_MPI)
130 if (varName ==
"Partition")
return SetAndReturnDefaultFactory(varName,
rcp(
new ZoltanInterface()));
131 #endif // ifdef HAVE_MPI
133 if (varName ==
"Importer") {
140 if (varName ==
"number of partitions") {
147 if (varName ==
"repartition: heuristic target rows per process")
return GetFactory(
"number of partitions");
150 if (varName ==
"UnAmalgamationInfo")
return SetAndReturnDefaultFactory(varName,
rcp(
new AmalgamationFactory()));
153 if (varName ==
"CoarseMap")
return SetAndReturnDefaultFactory(varName,
rcp(
new CoarseMapFactory()));
154 if (varName ==
"DofsPerNode")
return GetFactory(
"Graph");
155 if (varName ==
"Filtering")
return GetFactory(
"Graph");
157 if (varName ==
"LineDetection_VertLineIds")
return SetAndReturnDefaultFactory(varName,
rcp(
new LineDetectionFactory()));
158 if (varName ==
"LineDetection_Layers")
return GetFactory(
"LineDetection_VertLineIds");
159 if (varName ==
"CoarseNumZLayers")
return GetFactory(
"LineDetection_VertLineIds");
165 if (varName ==
"K")
return GetFactory(
"A");
166 if (varName ==
"M")
return GetFactory(
"A");
167 if (varName ==
"Mdiag")
return GetFactory(
"A");
168 if (varName ==
"cfl-based shift array")
return GetFactory(
"A");
171 if (varName ==
"PreSmoother")
return GetFactory(
"Smoother");
172 if (varName ==
"PostSmoother")
return GetFactory(
"Smoother");
174 if (varName ==
"Ppattern") {
177 return SetAndReturnDefaultFactory(varName, PpFact);
179 if (varName ==
"Constraint")
return SetAndReturnDefaultFactory(varName,
rcp(
new ConstraintFactory()));
181 if (varName ==
"Smoother") {
183 smootherParamList.
set(
"relaxation: type",
"Symmetric Gauss-Seidel");
192 #ifdef HAVE_MUELU_INTREPID2
194 if (varName ==
"pcoarsen: element to node map")
return GetFactory(
"P");
206 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
210 GetOStream(
Runtime1) <<
"Using default factory (" << factory->
ShortClassName() <<
"[" << factory->
GetID() <<
"]) for building '" << varName <<
"'." << std::endl;
212 defaultFactoryTable_[varName] = factory;
214 return defaultFactoryTable_[varName];
217 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
219 std::map<std::string, RCP<const FactoryBase> >::const_iterator it;
223 fancy <<
"Users factory table (factoryTable_):" << std::endl;
224 for (it = factoryTable_.begin(); it != factoryTable_.end(); it++) {
225 fancy <<
" " << it->first <<
" -> ";
227 fancy <<
"NoFactory";
228 else if (!it->second.get())
231 fancy << it->second.get()->ShortClassName() <<
"[" << it->second.get()->GetID() <<
"]";
232 #ifdef HAVE_MUELU_DEBUG
239 fancy <<
"Default factory table (defaultFactoryTable_):" << std::endl;
240 for (it = defaultFactoryTable_.begin(); it != defaultFactoryTable_.end(); it++) {
241 fancy <<
" " << it->first <<
" -> ";
243 fancy <<
"NoFactory";
244 else if (!it->second.get())
247 fancy << it->second.get()->ShortClassName() <<
"[" << it->second.get()->GetID() <<
"]";
248 #ifdef HAVE_MUELU_DEBUG
256 #ifdef HAVE_MUELU_DEBUG
257 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
259 std::map<std::string, RCP<const FactoryBase> >::const_iterator it;
261 for (it = factoryTable_.begin(); it != factoryTable_.end(); it++)
262 if (!it->second.is_null())
263 it->second->ResetDebugData();
265 for (it = defaultFactoryTable_.begin(); it != defaultFactoryTable_.end(); it++)
266 if (!it->second.is_null())
267 it->second->ResetDebugData();
271 #undef MUELU_KOKKOS_FACTORY
280 #endif // MUELU_FACTORYMANAGER_DEF_HPP
Generic Smoother Factory for generating the smoothers of the MG hierarchy.
This class specifies the default factory that should generate some data on a Level if the data does n...
Factory for building aggregates on structured grids.
Factory for determing the number of partitions for rebalancing.
Factory for generating coarse level map. Used by TentativePFactory.
virtual void SetFactory(const std::string &varName, const RCP< const FactoryBase > &factory)
Configuration.
Class for generating an initial LocalOrdinal-type BlockNumber vector, based on an input paraemter for...
Class that encapsulates external library smoothers.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Factory for building permutation matrix that can be be used to shuffle data (matrices, vectors) among processes.
FactoryManager()
Constructor.
Print additional debugging information.
const RCP< const FactoryBase > GetDefaultFactory(const std::string &varName) const
int GetID() const
return unique factory id
ParameterList & set(std::string const &name, T &&value, std::string const &docString="", RCP< const ParameterEntryValidator > const &validator=null)
bool hasFactory(const std::string &varName) const
Check.
Interface to Zoltan library.This interface provides access to partitioning methods in Zoltan...
const RCP< const FactoryBase > GetFactory(const std::string &varName) const
Get factory associated with a particular data name.
static const NoFactory * get()
Factory for building tentative prolongator.
Class that encapsulates direct solvers. Autoselection of AmesosSmoother or Amesos2Smoother according ...
virtual std::string ShortClassName() const
Return the class name of the object, without template parameters and without namespace.
const RCP< const FactoryBase > SetAndReturnDefaultFactory(const std::string &varName, const RCP< const FactoryBase > &factory) const
Base class for factories (e.g., R, P, and A_coarse).
Factory for building the approximate inverse of a matrix.
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Factory for building line detection information.
Transfer mapping data for interface aggregation to the coarse level.
AmalgamationFactory for subblocks of strided map based amalgamation data.
static const RCP< const NoFactory > getRCP()
Static Get() functions.
Factory for building the constraint operator.
void SetFactory(const std::string &varName, const RCP< const FactoryBase > &factory)
Set Factory.
const RCP< FactoryBase > GetFactoryNonConst(const std::string &varName)
Get factory associated with a particular data name (NONCONST version)
Factory for generating a very special nullspace.
virtual ~FactoryManager()
Destructor.
Factory for building aggregates for Lagrange multipliers in surface-coupled problems.
Factory for creating a graph based on a given matrix.
Factory for building nonzero patterns for energy minimization.
#define MUELU_KOKKOS_FACTORY(varName, oldFactory, newFactory)
Factory for building restriction operators.
Factory for creating a graph based on a given matrix.
Exception throws to report errors in the internal logical of the program.
Description of what is happening (more verbose)
Factory for building coarse matrices.
An factory which assigns each aggregate a quality estimate. Originally developed by Napov and Notay i...
Factory for building Smoothed Aggregation prolongators.Input/output of SaPFactory
Factory for building uncoupled aggregates.
std::string toString(const T &t)
Factory for generating nullspace.