46 #ifndef MUELU_AMALGAMATIONFACTORY_DEF_HPP
47 #define MUELU_AMALGAMATIONFACTORY_DEF_HPP
49 #include <Xpetra_Matrix.hpp>
51 #include "MueLu_AmalgamationFactory.hpp"
54 #include "MueLu_AmalgamationInfo.hpp"
59 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
63 return validParamList;
66 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
68 Input(currentLevel,
"A");
71 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
76 RCP<Matrix> A = Get< RCP<Matrix> >(currentLevel,
"A");
81 LO nStridedOffset = 0;
82 LO stridedblocksize = fullblocksize;
87 if (A->IsView(
"stridedMaps") && Teuchos::rcp_dynamic_cast<
const StridedMap>(A->getRowMap(
"stridedMaps")) != Teuchos::null) {
88 Xpetra::viewLabel_t oldView = A->SwitchToView(
"stridedMaps");
91 fullblocksize = stridedRowMap->getFixedBlockSize();
92 offset = stridedRowMap->getOffset();
93 blockid = stridedRowMap->getStridedBlockId();
96 std::vector<size_t> stridingInfo = stridedRowMap->getStridingData();
97 for (
size_t j = 0; j < Teuchos::as<size_t>(blockid); j++)
98 nStridedOffset += stridingInfo[j];
99 stridedblocksize = Teuchos::as<LocalOrdinal>(stridingInfo[blockid]);
102 stridedblocksize = fullblocksize;
104 oldView = A->SwitchToView(oldView);
105 GetOStream(
Runtime1) <<
"AmalagamationFactory::Build():" <<
" found fullblocksize=" << fullblocksize <<
" and stridedblocksize=" << stridedblocksize <<
" from strided maps. offset=" << offset << std::endl;
108 GetOStream(
Warnings0) <<
"AmalagamationFactory::Build(): no striding information available. Use blockdim=1 with offset=0" << std::endl;
120 if (fullblocksize > 1) {
128 AmalgamateMap(*(A->getRowMap()), *A, uniqueMap, *theRowTranslation);
129 AmalgamateMap(*(A->getColMap()), *A, nonUniqueMap, *theColTranslation);
155 Set(currentLevel,
"UnAmalgamationInfo", amalgamationData);
158 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
161 typedef std::map<GO,size_type> container;
163 GO indexBase = sourceMap.getIndexBase();
165 size_type numElements = elementAList.
size();
169 LO blkSize = A.GetFixedBlockSize();
170 if (A.IsView(
"stridedMaps") ==
true) {
174 offset = strMap->getOffset();
175 blkSize = Teuchos::as<const LO>(strMap->getFixedBlockSize());
179 translation.
resize(numElements);
181 size_type numRows = 0;
182 for (size_type
id = 0;
id < numElements;
id++) {
183 GO dofID = elementAList[id];
186 typename container::iterator it = filter.find(nodeID);
187 if (it == filter.end()) {
188 filter[nodeID] = numRows;
190 translation[id] = numRows;
191 elementList[numRows] = nodeID;
196 translation[id] = it->second;
199 elementList.
resize(numRows);
205 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
209 return globalblockid;
Important warning messages (one line)
Exception indicating invalid cast attempted.
MueLu::DefaultLocalOrdinal LocalOrdinal
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)
static const GlobalOrdinal DOFGid2NodeId(GlobalOrdinal gid, LocalOrdinal blockSize, const GlobalOrdinal offset, const GlobalOrdinal indexBase)
translate global (row/column) id to global amalgamation block id
void Build(Level ¤tLevel) const
Build an object with this factory.
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
MueLu::DefaultGlobalOrdinal GlobalOrdinal
Class that holds all level-specific information.
static void AmalgamateMap(const Map &sourceMap, const Matrix &A, RCP< const Map > &amalgamatedMap, Array< LO > &translation)
Method to create merged map for systems of PDEs.
void resize(size_type new_size, const value_type &x=value_type())
RCP< const ParameterList > GetValidParameterList() const
Return a const parameter list of valid parameters that setParameterList() will accept.
Exception throws to report errors in the internal logical of the program.
Description of what is happening (more verbose)
void DeclareInput(Level ¤tLevel) const
Input.
minimal container class for storing amalgamation information