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_RepartitionFactory.hpp" 66 #include "MueLu_SaPFactory.hpp" 67 #include "MueLu_SmootherFactory.hpp" 68 #include "MueLu_TentativePFactory.hpp" 69 #include "MueLu_TransPFactory.hpp" 70 #include "MueLu_TrilinosSmoother.hpp" 71 #include "MueLu_UncoupledAggregationFactory.hpp" 72 #include "MueLu_ZoltanInterface.hpp" 77 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
79 factoryTable_[varName] = factory;
82 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
84 if (factoryTable_.count(varName)) {
86 return factoryTable_.find(varName)->second;
90 return GetDefaultFactory(varName);
93 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
95 if (defaultFactoryTable_.count(varName)) {
97 return defaultFactoryTable_.find(varName)->second;
101 if (varName ==
"A")
return SetAndReturnDefaultFactory(varName, rcp(
new RAPFactory()));
102 if (varName ==
"RAP Pattern")
return GetFactory(
"A");
103 if (varName ==
"AP Pattern")
return GetFactory(
"A");
104 if (varName ==
"Ptent")
return SetAndReturnDefaultFactory(varName, rcp(
new TentativePFactory()));
105 if (varName ==
"P") {
108 factory->SetFactory(
"P", GetFactory(
"Ptent"));
109 return SetAndReturnDefaultFactory(varName, factory);
111 if (varName ==
"Nullspace") {
114 factory->SetFactory(
"Nullspace", GetFactory(
"Ptent"));
115 return SetAndReturnDefaultFactory(varName, factory);
118 if (varName ==
"R")
return SetAndReturnDefaultFactory(varName, rcp(
new TransPFactory()));
119 #if defined(HAVE_MUELU_ZOLTAN) && defined(HAVE_MPI) 120 if (varName ==
"Partition")
return SetAndReturnDefaultFactory(varName, rcp(
new ZoltanInterface()));
121 #endif //ifdef HAVE_MPI 123 if (varName ==
"Importer") {
131 if (varName ==
"Graph")
return SetAndReturnDefaultFactory(varName, rcp(
new CoalesceDropFactory()));
132 if (varName ==
"UnAmalgamationInfo")
return SetAndReturnDefaultFactory(varName, rcp(
new AmalgamationFactory()));
134 if (varName ==
"CoarseMap")
return SetAndReturnDefaultFactory(varName, rcp(
new CoarseMapFactory()));
135 if (varName ==
"DofsPerNode")
return GetFactory(
"Graph");
136 if (varName ==
"Filtering")
return GetFactory(
"Graph");
137 if (varName ==
"LineDetection_VertLineIds")
return SetAndReturnDefaultFactory(varName, rcp(
new LineDetectionFactory()));
138 if (varName ==
"LineDetection_Layers")
return GetFactory(
"LineDetection_VertLineIds");
139 if (varName ==
"CoarseNumZLayers")
return GetFactory(
"LineDetection_VertLineIds");
142 if (varName ==
"PreSmoother")
return GetFactory(
"Smoother");
143 if (varName ==
"PostSmoother")
return GetFactory(
"Smoother");
145 if (varName ==
"Ppattern") {
147 PpFact->SetFactory(
"P", GetFactory(
"Ptent"));
148 return SetAndReturnDefaultFactory(varName, PpFact);
150 if (varName ==
"Constraint")
return SetAndReturnDefaultFactory(varName, rcp(
new ConstraintFactory()));
152 if (varName ==
"Smoother") {
153 Teuchos::ParameterList smootherParamList;
154 smootherParamList.set(
"relaxation: type",
"Symmetric Gauss-Seidel");
155 smootherParamList.set(
"relaxation: sweeps", Teuchos::OrdinalTraits<LO>::one());
156 smootherParamList.set(
"relaxation: damping factor", Teuchos::ScalarTraits<Scalar>::one());
159 if (varName ==
"CoarseSolver")
return SetAndReturnDefaultFactory(varName, rcp(
new SmootherFactory(rcp(
new DirectSolver()), Teuchos::null)));
161 TEUCHOS_TEST_FOR_EXCEPTION(
true,
MueLu::Exceptions::RuntimeError,
"MueLu::FactoryManager::GetDefaultFactory(): No default factory available for building '" + varName +
"'.");
165 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
167 TEUCHOS_TEST_FOR_EXCEPTION(factory.is_null(),
Exceptions::RuntimeError,
"The default factory for building '" << varName <<
"' is null");
169 GetOStream(
Runtime1) <<
"Using default factory (" << factory->description() <<
") for building '" << varName <<
"'." << std::endl;
171 defaultFactoryTable_[varName] = factory;
173 return defaultFactoryTable_[varName];
176 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
178 std::map<std::string, RCP<const FactoryBase> >::const_iterator it;
180 Teuchos::FancyOStream& fancy = GetOStream(
Debug);
182 fancy <<
"Users factory table (factoryTable_):" << std::endl;
183 for (it = factoryTable_.begin(); it != factoryTable_.end(); it++)
184 fancy <<
" " << it->first <<
" -> " <<
Teuchos::toString(it->second.get()) << std::endl;
186 fancy <<
"Default factory table (defaultFactoryTable_):" << std::endl;
187 for (it = defaultFactoryTable_.begin(); it != defaultFactoryTable_.end(); it++)
188 fancy <<
" " << it->first <<
" -> " <<
Teuchos::toString(it->second.get()) << std::endl;
191 #ifdef HAVE_MUELU_DEBUG 192 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
194 std::map<std::string, RCP<const FactoryBase> >::const_iterator it;
196 for (it = factoryTable_.begin(); it != factoryTable_.end(); it++)
197 if (!it->second.is_null())
198 it->second->ResetDebugData();
200 for (it = defaultFactoryTable_.begin(); it != defaultFactoryTable_.end(); it++)
201 if (!it->second.is_null())
202 it->second->ResetDebugData();
213 #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 generating coarse level map. Used by TentativePFactory.
std::string toString(const T &what)
Little helper function to convert non-string types to strings.
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.
const RCP< const FactoryBase > GetDefaultFactory(const std::string &varName) const
Namespace for MueLu classes and methods.
Interface to Zoltan library.
const RCP< const FactoryBase > GetFactory(const std::string &varName) const
Get factory associated with a particular data name.
Factory for building tentative prolongator.
Class that encapsulates direct solvers. Autoselection of AmesosSmoother or Amesos2Smoother according ...
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.
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.Input/output of SaPFactory
Factory for building uncoupled aggregates.
Factory for generating nullspace.
static const RCP< const NoFactory > getRCP()
Static Get() functions.