46 #ifndef MUELU_MERGEDSMOOTHER_DEF_HPP
47 #define MUELU_MERGEDSMOOTHER_DEF_HPP
54 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
56 : smootherList_(smootherList)
57 , reverseOrder_(false)
64 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
66 : reverseOrder_(src.reverseOrder_)
67 , verbose_(src.verbose_) {
72 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
76 (*it)->SetFactory(varName, factory);
79 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
82 (*it)->DeclareInput(currentLevel);
85 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
88 this->GetOStream(
Warnings0) <<
"MueLu::MergedSmoother::Setup(): Setup() has already been called";
95 std::string msg =
"MueLu::MergedSmoother<>::Setup(): Runtime Error.\n One of the underlying smoother throwed the following exception: \n";
104 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
109 sz_t n = smootherList_.
size(), c = (reverseOrder_ ? n - 1 : 0);
110 char d = (reverseOrder_ ? -1 : 1);
112 for (sz_t i = 0; i < n; i++)
115 smootherList_[c + d * Teuchos::as<char>(i)]->Apply(X, B, InitialGuessIsZero);
118 InitialGuessIsZero =
false;
121 std::string msg =
"MueLu::MergedSmoother<>::Apply(): Runtime Error. One of the underlying smoothers throws the following exception: \n";
127 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
132 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
142 "MueLu::MergedSmoother<>:CopyParameters(): thisSmootherList == Teuchos::null");
153 reuse = reuse && (thisSmootherList.
size() == srcSmootherList.
size());
161 "MueLu::MergedSmoother<>:CopyParameters(): internal logic error");
176 if (srcSmootherList[i] != Teuchos::null) {
180 isSetup = isSetup && thisSmootherList[i]->IsSetup();
187 smootherList_ = Teuchos::null;
188 smootherList_ = SmootherListDeepCopy(srcSmootherList);
194 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
201 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
208 newSmootherList[i] = srcSmootherList[i]->
Copy();
210 return newSmootherList;
213 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
222 #endif // MUELU_MERGEDSMOOTHER_DEF_HPP
Important warning messages (one line)
RCP< SmootherPrototype > Copy() const
Copy method (performs a deep copy of input object)
ArrayRCP< RCP< SmootherPrototype > > smootherList_
bool GetReverseOrder() const
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
size_t getNodeSmootherComplexity() const
Get a rough estimate of cost per iteration.
void Apply(MultiVector &X, const MultiVector &B, bool InitialGuessIsZero=false) const
Apply.
void DeclareInput(Level ¤tLevel) const
Input.
void CopyParameters(RCP< SmootherPrototype > src)
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Class that holds all level-specific information.
void print(Teuchos::FancyOStream &out, const VerbLevel verbLevel=Default) const
Exception throws when you call an unimplemented method of MueLu.
ArrayRCP< RCP< SmootherPrototype > > SmootherListDeepCopy(const ArrayRCP< const RCP< SmootherPrototype > > &srcSmootherList)
bool IsSetup() const
Get the state of a smoother prototype.
const ArrayRCP< const RCP< SmootherPrototype > > GetSmootherList() const
void SetFactory(const std::string &varName, const RCP< const FactoryBase > &factory)
Custom SetFactory.
MergedSmoother(ArrayRCP< RCP< SmootherPrototype > > &smootherList, bool verbose=false)
Constructor.
Exception throws to report errors in the internal logical of the program.
void Setup(Level &level)
Set up.