53 #ifndef MUELU_COARSEMAPFACTORY_DEF_HPP_
54 #define MUELU_COARSEMAPFACTORY_DEF_HPP_
63 #include "MueLu_Aggregates.hpp"
68 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
71 stridingInfo_.clear();
74 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
77 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
84 validParamList->
set< std::string >(
"Striding info",
"{}",
"Striding information");
85 validParamList->
set< LocalOrdinal >(
"Strided block id", -1,
"Strided block id");
95 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.");
97 return validParamList;
100 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
102 Input(currentLevel,
"Aggregates");
103 Input(currentLevel,
"Nullspace");
106 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
109 stridingInfo_ = stridingInfo;
113 std::string strStridingInfo; strStridingInfo.clear();
117 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
121 RCP<Aggregates> aggregates = Get< RCP<Aggregates> >(currentLevel,
"Aggregates");
122 RCP<MultiVector> nullspace = Get< RCP<MultiVector> >(currentLevel,
"Nullspace");
125 const size_t NSDim = nullspace->getNumVectors();
129 GlobalOrdinal domainGidOffset = 0;
130 std::vector<GlobalOrdinal> domainGidOffsets;
131 domainGidOffsets.clear();
134 std::string strDomainGIDs = pL.
get<std::string>(
"Domain GID offsets");
135 if(strDomainGIDs.empty() ==
false) {
137 domainGidOffsets = Teuchos::createVector(arrayVal);
138 if(currentLevel.GetLevelID() < Teuchos::as<int>(domainGidOffsets.size()) ) {
139 domainGidOffset = domainGidOffsets[currentLevel.GetLevelID()];
144 LocalOrdinal stridedBlockId = pL.
get<LocalOrdinal>(
"Strided block id");
150 std::string strStridingInfo = pL.
get<std::string>(
"Striding info");
151 if(strStridingInfo.empty() ==
false) {
153 stridingInfo_ = Teuchos::createVector(arrayVal);
159 if (stridedBlockId== -1) {
162 stridingInfo_.clear();
163 stridingInfo_.push_back(NSDim);
169 size_t stridedBlockSize = stridingInfo_[stridedBlockId];
173 GetOStream(
Statistics2) <<
"domainGIDOffset: " << domainGidOffset <<
" block size: " << getFixedBlockSize() <<
" stridedBlockId: " << stridedBlockId << std::endl;
176 GlobalOrdinal nCoarseDofs = numAggs * getFixedBlockSize();
177 GlobalOrdinal indexBase = aggregates->
GetMap()->getIndexBase();
188 Set(currentLevel,
"CoarseMap", coarseMap);