46 #ifndef MUELU_DIRECTSOLVER_DEF_HPP 47 #define MUELU_DIRECTSOLVER_DEF_HPP 49 #include <Xpetra_Utils.hpp> 50 #include <Xpetra_Matrix.hpp> 57 #include "MueLu_Amesos2Smoother.hpp" 62 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
75 ParameterList paramList = paramListIn;
80 #if defined(HAVE_MUELU_TPETRA) && defined(HAVE_MUELU_AMESOS2) 91 #if defined(HAVE_MUELU_EPETRA) && defined(HAVE_MUELU_AMESOS) 106 "Plase enable (TPETRA and AMESOS2) or (EPETRA and AMESOS)");
109 "Could not enable any direct solver:\n" 110 << (
triedEpetra_ ?
"Epetra mode was disabled due to an error:\n" :
"")
112 << (
triedTpetra_ ?
"Tpetra mode was disabled due to an error:\n" :
"")
118 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
125 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
132 bool useTpetra = (currentLevel.
lib() == Xpetra::UseTpetra);
136 #if not defined(HAVE_MUELU_AMESOS2) 138 "Error: running in Tpetra mode, but MueLu with Amesos2 was disabled during the configure stage.\n" 139 "Please make sure that:\n" 140 " - Amesos2 is enabled (Trilinos_ENABLE_Amesos2=ON),\n" 141 " - Amesos2 is available for MueLu to use (MueLu_ENABLE_Amesos2=ON)\n");
148 #if not defined(HAVE_MUELU_AMESOS) 150 "Error: running in Epetra mode, but MueLu with Amesos was disabled during the configure stage.\n" 151 "Please make sure that:\n" 152 " - Amesos is enabled (you can do that with Trilinos_ENABLE_Amesos=ON),\n" 153 " - Amesos is available for MueLu to use (MueLu_ENABLE_Amesos=ON)\n");
160 "Direct solver for " << (useTpetra ?
"Tpetra" :
"Epetra") <<
" was not constructed");
163 s_->DeclareInput(currentLevel);
166 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
169 this->
GetOStream(
Warnings0) <<
"MueLu::DirectSolver::Setup(): Setup() has already been called";
173 s_->Setup(currentLevel);
175 s_->SetProcRankVerbose(oldRank);
182 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
186 s_->Apply(X, B, InitialGuessIsZero);
189 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
191 RCP<DirectSolver> newSmoo = rcp(
new DirectSolver(*
this));
196 newSmoo->sEpetra_ =
sEpetra_->Copy();
198 newSmoo->sTpetra_ =
sTpetra_->Copy();
201 newSmoo->s_ = (
s_.get() ==
sTpetra_.get() ? newSmoo->sTpetra_ : newSmoo->sEpetra_);
207 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
209 std::ostringstream out;
210 if (
s_ != Teuchos::null) {
211 out <<
s_->description();
214 out <<
"{type = " <<
type_ <<
"}";
219 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
224 out0 <<
"Prec. type: " <<
type_ << std::endl;
227 out0 <<
"Parameter list: " << std::endl;
228 Teuchos::OSTab tab3(out);
232 if (verbLevel &
Debug)
238 #endif // MUELU_DIRECTSOLVER_DEF_HPP Important warning messages (one line)
Exception indicating invalid cast attempted.
void Apply(MultiVector &X, const MultiVector &B, bool InitialGuessIsZero=false) const
DirectSolver cannot be applied. Apply() always returns a RuntimeError exception.
void Setup(Level ¤tLevel)
DirectSolver cannot be turned into a smoother using Setup(). Setup() always returns a RuntimeError ex...
std::string toString(const T &what)
Little helper function to convert non-string types to strings.
void DeclareInput(Level ¤tLevel) const
Input.
Print additional debugging information.
Namespace for MueLu classes and methods.
virtual const Teuchos::ParameterList & GetParameterList() const
std::string type_
amesos1/2-specific key phrase that denote smoother type
DirectSolver(const std::string &type="", const Teuchos::ParameterList ¶mList=Teuchos::ParameterList())
Constructor Note: only parameters shared by Amesos and Amesos2 should be used for type and paramList ...
RCP< SmootherPrototype > Copy() const
When this prototype is cloned using Copy(), the clone is an Amesos or an Amesos2 smoother.
void print(Teuchos::FancyOStream &out, const VerbLevel verbLevel=Default) const
std::string description() const
Return a simple one-line description of this object.
virtual void SetParameterList(const ParameterList ¶mList)
Set parameters from a parameter list and return with default values.
Class that holds all level-specific information.
Class that encapsulates Amesos2 direct solvers.
bool IsSetup() const
Get the state of a smoother prototype.
Xpetra::UnderlyingLib lib()
#define MUELU_DESCRIBE
Helper macro for implementing Describable::describe() for BaseClass objects.
RCP< SmootherPrototype > sTpetra_
Teuchos::FancyOStream & GetOStream(MsgType type, int thisProcRankOnly=0) const
Get an output stream for outputting the input message type.
void SetFactory(const std::string &varName, const RCP< const FactoryBase > &factory)
Custom SetFactory.
RCP< SmootherPrototype > sEpetra_
Smoother.
RCP< SmootherPrototype > s_
Print class parameters (more parameters, more verbose)
Exception throws to report errors in the internal logical of the program.
virtual std::string description() const
Return a simple one-line description of this object.
int GetProcRankVerbose() const
Get proc rank used for printing. Do not use this information for any other purpose.