46 #ifndef MUELU_HIERARCHYUTILS_DEF_HPP
47 #define MUELU_HIERARCHYUTILS_DEF_HPP
57 #include "MueLu_SmootherFactory.hpp"
58 #include "MueLu_FactoryManager.hpp"
61 #ifdef HAVE_MUELU_INTREPID2
62 #include "Kokkos_DynRankView.hpp"
70 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
73 LocalOrdinal, GlobalOrdinal, Node> realvaluedmultivector_type;
76 const std::string& levelName = it->first;
78 if (paramList.
isSublist(levelName) && levelName.find(
"level ") == 0 && levelName.size() > 6) {
79 int levelID = strtol(levelName.substr(6).c_str(), 0, 0);
94 const std::string& name = it2->first;
96 name !=
"Nullspace" && name !=
"Coordinates" && name !=
"pcoarsen: element to node map" &&
98 "MueLu::Utils::AddNonSerializableDataToHierarchy: parameter list contains unknown data type");
106 else if(name ==
"P" || name ==
"R" || name ==
"K" || name ==
"M") {
110 else if (name ==
"Nullspace")
117 else if(name ==
"Coordinates")
123 #ifdef HAVE_MUELU_INTREPID2
124 else if (name ==
"pcoarsen: element to node map")
127 level->
Set(name, Teuchos::getValue<
RCP<Kokkos::DynRankView<LocalOrdinal,typename Node::device_type> > >(it2->second),
NoFactory::get());
131 #ifdef HAVE_MUELU_MATLAB
134 size_t typeNameStart = name.find_first_not_of(
' ');
135 size_t typeNameEnd = name.find(
' ', typeNameStart);
136 std::string
typeName = name.substr(typeNameStart, typeNameEnd - typeNameStart);
145 else if(
typeName ==
"ordinalvector")
152 level->
Set(name, Teuchos::getValue<std::complex<double> >(it2->second),
NoFactory::get());
160 throw std::runtime_error(
"Invalid non-serializable data on list");
164 }
else if (paramList.
isSublist(levelName) && levelName.find(
"user data") != std::string::npos) {
175 const std::string& name = it2->first;
177 name !=
"Nullspace" && name !=
"Coordinates" &&
179 "MueLu::Utils::AddNonSerializableDataToHierarchy: user data parameter list contains unknown data type!");
180 if( name ==
"P" || name ==
"R") {
183 }
else if (name ==
"Nullspace") {
188 }
else if(name ==
"Coordinates") {
195 size_t typeNameStart = name.find_first_not_of(
' ');
196 size_t typeNameEnd = name.find(
' ', typeNameStart);
197 std::string
typeName = name.substr(typeNameStart, typeNameEnd - typeNameStart);
198 size_t varNameStart = name.find_first_not_of(
' ', typeNameEnd);
199 std::string varName = name.substr(varNameStart, name.size());
208 else if(
typeName ==
"ordinalvector")
215 level->
Set(varName, Teuchos::getValue<std::complex<double> >(it2->second),
NoFactory::get());
219 level->
Set(varName, Teuchos::getValue<std::string>(it2->second),
NoFactory::get());
229 throw std::runtime_error(
"Invalid non-serializable data on list");
237 #define MUELU_HIERARCHY_UTILS_SHORT
238 #endif // MUELU_HIERARCHYHELPERS_DEF_HPP