47#ifndef MUELU_BLOCKEDCOARSEMAPFACTORY_DEF_HPP_
48#define MUELU_BLOCKEDCOARSEMAPFACTORY_DEF_HPP_
50#include <Xpetra_MultiVector.hpp>
51#include <Xpetra_StridedMapFactory.hpp>
52#include <Xpetra_Matrix.hpp>
56#include "MueLu_Aggregates.hpp"
63 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
66 RCP<ParameterList> validParamList = rcp(
new ParameterList());
68 validParamList->set< RCP<const FactoryBase> >(
"Aggregates", Teuchos::null,
"Generating factory for aggregates.");
69 validParamList->set< RCP<const FactoryBase> >(
"Nullspace", Teuchos::null,
"Generating factory for null space.");
70 validParamList->set< RCP<const FactoryBase> >(
"CoarseMap", Teuchos::null,
"Generating factory of previous coarse map. (must be set by user!).");
73 validParamList->set<std::string>(
"Striding info",
"{}",
"Striding information");
74 validParamList->set<
LocalOrdinal>(
"Strided block id", -1,
"Strided block id");
76 return validParamList;
79 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
82 this->Input(currentLevel,
"Aggregates");
83 this->Input(currentLevel,
"Nullspace");
86 RCP<const FactoryBase> prevCoarseMapFact = this->GetFactory(
"CoarseMap");
87 TEUCHOS_TEST_FOR_EXCEPTION(prevCoarseMapFact==Teuchos::null,
Exceptions::RuntimeError,
"MueLu::BlockedCoarseMapFactory::getDomainMapOffset: user did not specify CoarseMap of previous block. Do not forget to set the CoarseMap factory.");
88 currentLevel.
DeclareInput(
"CoarseMap", prevCoarseMapFact.get(),
this);
91 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
96 GlobalOrdinal domainGIDOffset = GetDomainGIDOffset(currentLevel);
100 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
102 Level& currentLevel)
const
104 RCP<const FactoryBase> prevCoarseMapFact = this->GetFactory(
"CoarseMap");
105 RCP<const Map> subPDomainMap = currentLevel.
Get<RCP<const Map>>(
"CoarseMap", prevCoarseMapFact.get());
106 GlobalOrdinal maxGlobalIndex = subPDomainMap->getMaxAllGlobalIndex();
108 return maxGlobalIndex + Teuchos::ScalarTraits<GlobalOrdinal>::one();
MueLu::DefaultLocalOrdinal LocalOrdinal
MueLu::DefaultGlobalOrdinal GlobalOrdinal
void Build(Level ¤tLevel) const final
Build an object with this factory.
void DeclareInput(Level ¤tLevel) const final
Specifies the data that this class needs, and the factories that generate that data.
virtual GlobalOrdinal GetDomainGIDOffset(Level ¤tLevel) const final
Compute domain GID offset from another CoarseMap.
RCP< const ParameterList > GetValidParameterList() const final
Return a const parameter list of valid parameters that setParameterList() will accept.
virtual void BuildCoarseMap(Level ¤tLevel, const GlobalOrdinal domainGIDOffset) const
Build the coarse map using the domain GID offset.
Exception throws to report errors in the internal logical of the program.
Timer to be used in factories. Similar to Monitor but with additional timers.
Class that holds all level-specific information.
void DeclareInput(const std::string &ename, const FactoryBase *factory, const FactoryBase *requestedBy=NoFactory::get())
Callback from FactoryBase::CallDeclareInput() and FactoryBase::DeclareInput()
T & Get(const std::string &ename, const FactoryBase *factory=NoFactory::get())
Get data without decrementing associated storage counter (i.e., read-only access)....
Namespace for MueLu classes and methods.