46#ifndef MUELU_FACTORYMANAGER_DEF_HPP
47#define MUELU_FACTORYMANAGER_DEF_HPP
49#include <Teuchos_ParameterList.hpp>
52#include "MueLu_AmalgamationFactory.hpp"
53#include "MueLu_CoalesceDropFactory.hpp"
54#include "MueLu_CoarseMapFactory.hpp"
55#include "MueLu_ConstraintFactory.hpp"
56#include "MueLu_AggregateQualityEstimateFactory.hpp"
57#include "MueLu_DirectSolver.hpp"
58#include "MueLu_InitialBlockNumberFactory.hpp"
59#include "MueLu_LineDetectionFactory.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_ScaledNullspaceFactory.hpp"
69#include "MueLu_SmootherFactory.hpp"
70#include "MueLu_TentativePFactory.hpp"
71#include "MueLu_TransPFactory.hpp"
72#include "MueLu_TrilinosSmoother.hpp"
73#include "MueLu_UncoupledAggregationFactory.hpp"
74#include "MueLu_StructuredAggregationFactory.hpp"
75#include "MueLu_ZoltanInterface.hpp"
76#include "MueLu_InterfaceMappingTransferFactory.hpp"
77#include "MueLu_InterfaceAggregationFactory.hpp"
78#include "MueLu_InverseApproximationFactory.hpp"
80#include "MueLu_CoalesceDropFactory_kokkos.hpp"
81#include "MueLu_NullspaceFactory_kokkos.hpp"
82#include "MueLu_SaPFactory_kokkos.hpp"
83#include "MueLu_TentativePFactory_kokkos.hpp"
84#include "MueLu_UncoupledAggregationFactory_kokkos.hpp"
91#define MUELU_KOKKOS_FACTORY(varName, oldFactory, newFactory) \
92 (!useKokkos_) ? SetAndReturnDefaultFactory(varName, rcp(new oldFactory())) : \
93 SetAndReturnDefaultFactory(varName, rcp(new newFactory()));
95 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
100 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
111 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
113 return Teuchos::rcp_const_cast<FactoryBase>(
GetFactory(varName));
116 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
122 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
132 if (varName ==
"RAP Pattern")
return GetFactory(
"A");
133 if (varName ==
"AP Pattern")
return GetFactory(
"A");
135 if (varName ==
"P") {
137 RCP<Factory> factory;
142 factory->SetFactory(
"P",
GetFactory(
"Ptent"));
145 if (varName ==
"Nullspace") {
147 RCP<Factory> factory;
152 factory->SetFactory(
"Nullspace",
GetFactory(
"Ptent"));
157 if (varName ==
"Coordinates")
return GetFactory(
"Ptent");
158 if (varName ==
"Node Comm")
return GetFactory(
"Ptent");
161 if (varName ==
"RfromPfactory")
return GetFactory(
"P");
162#if defined(HAVE_MUELU_ZOLTAN) && defined(HAVE_MPI)
166 if (varName ==
"Importer") {
173 if (varName ==
"number of partitions") {
180 if (varName ==
"repartition: heuristic target rows per process")
return GetFactory(
"number of partitions");
187 if (varName ==
"DofsPerNode")
return GetFactory(
"Graph");
188 if (varName ==
"Filtering")
return GetFactory(
"Graph");
191 if (varName ==
"LineDetection_Layers")
return GetFactory(
"LineDetection_VertLineIds");
192 if (varName ==
"CoarseNumZLayers")
return GetFactory(
"LineDetection_VertLineIds");
200 if (varName ==
"Mdiag")
return GetFactory(
"A");
201 if (varName ==
"cfl-based shift array")
return GetFactory(
"A");
204 if (varName ==
"PreSmoother")
return GetFactory(
"Smoother");
205 if (varName ==
"PostSmoother")
return GetFactory(
"Smoother");
207 if (varName ==
"Ppattern") {
214 if (varName ==
"Smoother") {
215 Teuchos::ParameterList smootherParamList;
216 smootherParamList.set(
"relaxation: type",
"Symmetric Gauss-Seidel");
217 smootherParamList.set(
"relaxation: sweeps", Teuchos::OrdinalTraits<LO>::one());
218 smootherParamList.set(
"relaxation: damping factor", Teuchos::ScalarTraits<Scalar>::one());
225#ifdef HAVE_MUELU_INTREPID2
227 if (varName ==
"pcoarsen: element to node map")
return GetFactory(
"P");
236 TEUCHOS_TEST_FOR_EXCEPTION(
true,
MueLu::Exceptions::RuntimeError,
"MueLu::FactoryManager::GetDefaultFactory(): No default factory available for building '" + varName +
"'.");
240 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
242 TEUCHOS_TEST_FOR_EXCEPTION(factory.is_null(),
Exceptions::RuntimeError,
"The default factory for building '" << varName <<
"' is null");
244 GetOStream(
Runtime1) <<
"Using default factory (" << factory->ShortClassName() <<
"["<<factory->GetID()<<
"]) for building '" << varName <<
"'." << std::endl;
251 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
253 std::map<std::string, RCP<const FactoryBase> >::const_iterator it;
258 fancy <<
"Users factory table (factoryTable_):" << std::endl;
260 fancy <<
" " << it->first <<
" -> ";
262 else if (!it->second.get()) fancy<<
"NULL";
264 fancy << it->second.get()->ShortClassName()<<
"["<<it->second.get()->GetID()<<
"]";
265#ifdef HAVE_MUELU_DEBUG
266 fancy<<
"("<<Teuchos::toString(it->second.get()) <<
")";
272 fancy <<
"Default factory table (defaultFactoryTable_):" << std::endl;
274 fancy <<
" " << it->first <<
" -> ";
276 else if (!it->second.get()) fancy<<
"NULL";
278 fancy << it->second.get()->ShortClassName()<<
"["<<it->second.get()->GetID()<<
"]";
279#ifdef HAVE_MUELU_DEBUG
280 fancy<<
"("<<Teuchos::toString(it->second.get()) <<
")";
288#ifdef HAVE_MUELU_DEBUG
289 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
291 std::map<std::string, RCP<const FactoryBase> >::const_iterator it;
293 for (it = factoryTable_.begin(); it != factoryTable_.end(); it++)
294 if (!it->second.is_null())
295 it->second->ResetDebugData();
297 for (it = defaultFactoryTable_.begin(); it != defaultFactoryTable_.end(); it++)
298 if (!it->second.is_null())
299 it->second->ResetDebugData();
304#undef MUELU_KOKKOS_FACTORY
#define MUELU_KOKKOS_FACTORY(varName, oldFactory, newFactory)
An factory which assigns each aggregate a quality estimate. Originally developed by Napov and Notay i...
AmalgamationFactory for subblocks of strided map based amalgamation data.
Factory for creating a graph based on a given matrix.
Factory for creating a graph based on a given matrix.
Factory for generating coarse level map. Used by TentativePFactory.
Factory for building the constraint operator.
Class that encapsulates direct solvers. Autoselection of AmesosSmoother or Amesos2Smoother according ...
Exception throws to report errors in the internal logical of the program.
This class specifies the default factory that should generate some data on a Level if the data does n...
MueLu::InterfaceAggregationFactory< Scalar, LocalOrdinal, GlobalOrdinal, Node > InterfaceAggregationFactory
const RCP< const FactoryBase > GetDefaultFactory(const std::string &varName) const
const RCP< const FactoryBase > SetAndReturnDefaultFactory(const std::string &varName, const RCP< const FactoryBase > &factory) const
bool useKokkos_
Whether or not to use kokkos factories.
std::map< std::string, RCP< const FactoryBase > > defaultFactoryTable_
Table that holds default factories.
void SetFactory(const std::string &varName, const RCP< const FactoryBase > &factory)
Set Factory.
bool hasFactory(const std::string &varName) const
Check.
MueLu::ScaledNullspaceFactory< Scalar, LocalOrdinal, GlobalOrdinal, Node > ScaledNullspaceFactory
std::map< std::string, RCP< const FactoryBase > > factoryTable_
User-defined factories.
MueLu::InterfaceMappingTransferFactory< LocalOrdinal, GlobalOrdinal, Node > InterfaceMappingTransferFactory
const RCP< const FactoryBase > GetFactory(const std::string &varName) const
Get factory associated with a particular data name.
const RCP< FactoryBase > GetFactoryNonConst(const std::string &varName)
Get factory associated with a particular data name (NONCONST version).
Class for generating an initial LocalOrdinal-type BlockNumber vector, based on an input paraemter for...
Factory for building the approximate inverse of a matrix.
Factory for building line detection information.
static const RCP< const NoFactory > getRCP()
Static Get() functions.
static const NoFactory * get()
Factory for generating nullspace.
Factory for building nonzero patterns for energy minimization.
Factory for building coarse matrices.
Factory for building permutation matrix that can be be used to shuffle data (matrices,...
Factory for determing the number of partitions for rebalancing.
Factory for building Smoothed Aggregation prolongators.
Factory for building Smoothed Aggregation prolongators.
Generic Smoother Factory for generating the smoothers of the MG hierarchy.
Factory for building aggregates on structured grids.
Factory for building tentative prolongator.
Factory for building restriction operators.
Class that encapsulates external library smoothers.
Factory for building uncoupled aggregates.
Teuchos::FancyOStream & GetOStream(MsgType type, int thisProcRankOnly=0) const
Get an output stream for outputting the input message type.
Interface to Zoltan library.
Namespace for MueLu classes and methods.
@ Debug
Print additional debugging information.
@ Runtime1
Description of what is happening (more verbose).