53 #ifndef MUELU_COARSEMAPFACTORY_DEF_HPP_
54 #define MUELU_COARSEMAPFACTORY_DEF_HPP_
59 #include <Xpetra_StridedMapFactory.hpp>
63 #include "MueLu_Aggregates.hpp"
68 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
75 validParamList->
set<std::string>(
"Striding info",
"{}",
"Striding information");
76 validParamList->
set<
LocalOrdinal>(
"Strided block id", -1,
"Strided block id");
86 validParamList->
set<std::string>(
"Domain GID offsets",
"{0}",
"vector with offsets for GIDs for each level. If no offset GID value is given for the level we use 0 as default.");
88 return validParamList;
91 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
93 Input(currentLevel,
"Aggregates");
94 Input(currentLevel,
"Nullspace");
97 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
100 stridingInfo_ = stridingInfo;
104 std::string strStridingInfo;
105 strStridingInfo.clear();
109 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
113 GlobalOrdinal domainGIDOffset = GetDomainGIDOffset(currentLevel);
114 BuildCoarseMap(currentLevel, domainGIDOffset);
117 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
120 RCP<Aggregates> aggregates = Get<RCP<Aggregates> >(currentLevel,
"Aggregates");
124 RCP<MultiVector> nullspace = Get<RCP<MultiVector> >(currentLevel,
"Nullspace");
126 const size_t NSDim = nullspace->getNumVectors();
135 std::string strStridingInfo = pL.
get<std::string>(
"Striding info");
136 if (strStridingInfo.empty() ==
false) {
138 stridingInfo_ = Teuchos::createVector(arrayVal);
142 CheckForConsistentStridingInformation(stridedBlockId, NSDim);
144 GetOStream(
Statistics2) <<
"domainGIDOffset: " << domainGIDOffset <<
" block size: " << getFixedBlockSize() <<
" stridedBlockId: " << stridedBlockId << std::endl;
150 RCP<const Map> coarseMap = StridedMapFactory::Build(aggMap->lib(),
159 Set(currentLevel,
"CoarseMap", coarseMap);
162 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
164 Level& currentLevel)
const {
167 std::vector<GlobalOrdinal> domainGidOffsets;
168 domainGidOffsets.clear();
171 std::string strDomainGIDs = pL.
get<std::string>(
"Domain GID offsets");
172 if (strDomainGIDs.empty() ==
false) {
174 domainGidOffsets = Teuchos::createVector(arrayVal);
175 if (currentLevel.
GetLevelID() < Teuchos::as<int>(domainGidOffsets.size())) {
176 domainGidOffset = domainGidOffsets[currentLevel.
GetLevelID()];
181 return domainGidOffset;
184 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
186 const LocalOrdinal stridedBlockId,
const size_t nullspaceDimension)
const {
188 if (stridedBlockId == -1) {
191 stridingInfo_.clear();
192 stridingInfo_.push_back(nullspaceDimension);
198 size_t stridedBlockSize = stridingInfo_[stridedBlockId];
MueLu::DefaultLocalOrdinal LocalOrdinal
KOKKOS_INLINE_FUNCTION LO GetNumAggregates() const
T & get(const std::string &name, T def_value)
ParameterList & set(std::string const &name, T const &value, std::string const &docString="", RCP< const ParameterEntryValidator > const &validator=null)
Timer to be used in factories. Similar to Monitor but with additional timers.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
const RCP< const Map > GetMap() const
returns (overlapping) map of aggregate/node distribution
virtual void BuildCoarseMap(Level ¤tLevel, const GlobalOrdinal domainGIDOffset) const
Build the coarse map using the domain GID offset.
RCP< const ParameterList > GetValidParameterList() const override
Return a const parameter list of valid parameters that setParameterList() will accept.
Print even more statistics.
bool isParameter(const std::string &name) const
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
MueLu::DefaultGlobalOrdinal GlobalOrdinal
Class that holds all level-specific information.
virtual GlobalOrdinal GetDomainGIDOffset(Level ¤tLevel) const
Extract domain GID offset from user data.
virtual void CheckForConsistentStridingInformation(LocalOrdinal stridedBlockId, const size_t nullspaceDimension) const
void Build(Level ¤tLevel) const override
Build an object with this factory.
virtual void setStridingData(std::vector< size_t > stridingInfo)
setStridingData set striding vector for the domain DOF map (= coarse map), e.g. (2,1) for 2 velocity dofs and 1 pressure dof
int GetLevelID() const
Return level number.
Exception throws to report errors in the internal logical of the program.
void DeclareInput(Level ¤tLevel) const override
Specifies the data that this class needs, and the factories that generate that data.