46 #ifndef MUELU_FACTORYMANAGER_DEF_HPP 47 #define MUELU_FACTORYMANAGER_DEF_HPP 51 #include <Teuchos_ParameterList.hpp> 54 #include "MueLu_AmalgamationFactory.hpp" 55 #include "MueLu_CoalesceDropFactory.hpp" 56 #include "MueLu_CoarseMapFactory.hpp" 57 #include "MueLu_ConstraintFactory.hpp" 58 #include "MueLu_DirectSolver.hpp" 59 #include "MueLu_LineDetectionFactory.hpp" 60 #include "MueLu_MultiVectorTransferFactory.hpp" 62 #include "MueLu_NullspaceFactory.hpp" 63 #include "MueLu_PatternFactory.hpp" 64 #include "MueLu_RAPFactory.hpp" 65 #include "MueLu_RepartitionHeuristicFactory.hpp" 66 #include "MueLu_RepartitionFactory.hpp" 67 #include "MueLu_SaPFactory.hpp" 68 #include "MueLu_SmootherFactory.hpp" 69 #include "MueLu_TentativePFactory.hpp" 70 #include "MueLu_TransPFactory.hpp" 71 #include "MueLu_TrilinosSmoother.hpp" 72 #include "MueLu_UncoupledAggregationFactory.hpp" 73 #include "MueLu_ZoltanInterface.hpp" 78 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
80 factoryTable_[varName] = factory;
83 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
85 if (factoryTable_.count(varName)) {
87 return factoryTable_.find(varName)->second;
91 return GetDefaultFactory(varName);
94 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
96 return Teuchos::rcp_const_cast<
FactoryBase>(GetFactory(varName));
99 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
101 if (factoryTable_.count(varName))
return true;
105 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
107 if (defaultFactoryTable_.count(varName)) {
109 return defaultFactoryTable_.find(varName)->second;
113 if (varName ==
"A")
return SetAndReturnDefaultFactory(varName, rcp(
new RAPFactory()));
114 if (varName ==
"RAP Pattern")
return GetFactory(
"A");
115 if (varName ==
"AP Pattern")
return GetFactory(
"A");
116 if (varName ==
"Ptent")
return SetAndReturnDefaultFactory(varName, rcp(
new TentativePFactory()));
117 if (varName ==
"P") {
120 factory->SetFactory(
"P", GetFactory(
"Ptent"));
121 return SetAndReturnDefaultFactory(varName, factory);
123 if (varName ==
"Nullspace") {
126 factory->SetFactory(
"Nullspace", GetFactory(
"Ptent"));
127 return SetAndReturnDefaultFactory(varName, factory);
130 if (varName ==
"R")
return SetAndReturnDefaultFactory(varName, rcp(
new TransPFactory()));
131 #if defined(HAVE_MUELU_ZOLTAN) && defined(HAVE_MPI) 132 if (varName ==
"Partition")
return SetAndReturnDefaultFactory(varName, rcp(
new ZoltanInterface()));
133 #endif //ifdef HAVE_MPI 135 if (varName ==
"Importer") {
142 if (varName ==
"number of partitions") {
150 if (varName ==
"Graph")
return SetAndReturnDefaultFactory(varName, rcp(
new CoalesceDropFactory()));
151 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");
156 if (varName ==
"LineDetection_VertLineIds")
return SetAndReturnDefaultFactory(varName, rcp(
new LineDetectionFactory()));
157 if (varName ==
"LineDetection_Layers")
return GetFactory(
"LineDetection_VertLineIds");
158 if (varName ==
"CoarseNumZLayers")
return GetFactory(
"LineDetection_VertLineIds");
161 if (varName ==
"PreSmoother")
return GetFactory(
"Smoother");
162 if (varName ==
"PostSmoother")
return GetFactory(
"Smoother");
164 if (varName ==
"Ppattern") {
166 PpFact->SetFactory(
"P", GetFactory(
"Ptent"));
167 return SetAndReturnDefaultFactory(varName, PpFact);
169 if (varName ==
"Constraint")
return SetAndReturnDefaultFactory(varName, rcp(
new ConstraintFactory()));
171 if (varName ==
"Smoother") {
172 Teuchos::ParameterList smootherParamList;
173 smootherParamList.set(
"relaxation: type",
"Symmetric Gauss-Seidel");
174 smootherParamList.set(
"relaxation: sweeps", Teuchos::OrdinalTraits<LO>::one());
175 smootherParamList.set(
"relaxation: damping factor", Teuchos::ScalarTraits<Scalar>::one());
178 if (varName ==
"CoarseSolver")
return SetAndReturnDefaultFactory(varName, rcp(
new SmootherFactory(rcp(
new DirectSolver()), Teuchos::null)));
180 #ifdef HAVE_MUELU_INTREPID2 182 if (varName ==
"pcoarsen: element to node map")
return GetFactory(
"P");
185 TEUCHOS_TEST_FOR_EXCEPTION(
true,
MueLu::Exceptions::RuntimeError,
"MueLu::FactoryManager::GetDefaultFactory(): No default factory available for building '" + varName +
"'.");
189 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
191 TEUCHOS_TEST_FOR_EXCEPTION(factory.is_null(),
Exceptions::RuntimeError,
"The default factory for building '" << varName <<
"' is null");
193 GetOStream(
Runtime1) <<
"Using default factory (" << factory->description() <<
") for building '" << varName <<
"'." << std::endl;
195 defaultFactoryTable_[varName] = factory;
197 return defaultFactoryTable_[varName];
200 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
202 std::map<std::string, RCP<const FactoryBase> >::const_iterator it;
204 Teuchos::FancyOStream& fancy = GetOStream(
Debug);
206 fancy <<
"Users factory table (factoryTable_):" << std::endl;
207 for (it = factoryTable_.begin(); it != factoryTable_.end(); it++)
208 fancy <<
" " << it->first <<
" -> " <<
Teuchos::toString(it->second.get()) << std::endl;
210 fancy <<
"Default factory table (defaultFactoryTable_):" << std::endl;
211 for (it = defaultFactoryTable_.begin(); it != defaultFactoryTable_.end(); it++)
212 fancy <<
" " << it->first <<
" -> " <<
Teuchos::toString(it->second.get()) << std::endl;
215 #ifdef HAVE_MUELU_DEBUG 216 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
218 std::map<std::string, RCP<const FactoryBase> >::const_iterator it;
220 for (it = factoryTable_.begin(); it != factoryTable_.end(); it++)
221 if (!it->second.is_null())
222 it->second->ResetDebugData();
224 for (it = defaultFactoryTable_.begin(); it != defaultFactoryTable_.end(); it++)
225 if (!it->second.is_null())
226 it->second->ResetDebugData();
237 #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 determing the number of partitions for rebalancing.
Factory for generating coarse level map. Used by TentativePFactory.
std::string toString(const T &what)
Little helper function to convert non-string types to strings.
const bool hasFactory(const std::string &varName) const
Check.
Class that encapsulates external library smoothers.
Factory for building permutation matrix that can be be used to shuffle data (matrices, vectors) among processes.
Print additional debugging information.
Namespace for MueLu classes and methods.
Interface to Zoltan library.This interface provides access to partitioning methods in Zoltan...
Factory for building tentative prolongator.
Class that encapsulates direct solvers. Autoselection of AmesosSmoother or Amesos2Smoother according ...
Base class for factories (e.g., R, P, and A_coarse).
const RCP< const FactoryBase > SetAndReturnDefaultFactory(const std::string &varName, const RCP< const FactoryBase > &factory) const
Factory for building line detection information.
AmalgamationFactory for subblocks of strided map based amalgamation data.
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)
const RCP< const FactoryBase > GetFactory(const std::string &varName) const
Get factory associated with a particular data name.
Factory for creating a graph base on a given matrix.
Factory for building nonzero patterns for energy minimization.
Factory for building restriction operators.
Exception throws to report errors in the internal logical of the program.
Description of what is happening (more verbose)
Factory for building coarse matrices.
Factory for building Smoothed Aggregation prolongators.
const RCP< const FactoryBase > GetDefaultFactory(const std::string &varName) const
Factory for building uncoupled aggregates.
Factory for generating nullspace.
static const RCP< const NoFactory > getRCP()
Static Get() functions.