50 #if defined(HAVE_MUELU_EPETRA) && defined(HAVE_MUELU_AMESOS) 52 #include <Epetra_LinearProblem.h> 54 #include <Amesos_config.h> 61 #include "MueLu_Utilities.hpp" 74 std::transform(
type_.begin(), ++
type_.begin(),
type_.begin(), ::toupper);
78 if (
type_ ==
"Amesos_umfpack")
type_ =
"Umfpack";
79 if (
type_ ==
"Superlu_dist")
type_ =
"Superludist";
85 std::string oldtype =
type_;
87 #if defined(HAVE_AMESOS_SUPERLU) 89 #elif defined(HAVE_AMESOS_KLU) 91 #elif defined(HAVE_AMESOS_SUPERLUDIST) 92 type_ =
"Superludist";
93 #elif defined(HAVE_AMESOS_UMFPACK) 96 throw Exceptions::RuntimeError(
"Amesos has been compiled without SuperLU_DIST, SuperLU, Umfpack or Klu. By default, MueLu tries" 97 "to use one of these libraries. Amesos must be compiled with one of these solvers, " 98 "or a valid Amesos solver has to be specified explicitly.");
101 this->
GetOStream(
Warnings0) <<
"MueLu::AmesosSmoother: \"" << oldtype <<
"\" is not available. Using \"" <<
type_ <<
"\" instead" << std::endl;
107 template <
class Node>
109 this->
Input(currentLevel,
"A");
112 template <
class Node>
117 this->
GetOStream(
Warnings0) <<
"MueLu::AmesosSmoother::Setup(): Setup() has already been called" << std::endl;
119 A_ = Factory::Get< RCP<Matrix> >(currentLevel,
"A");
131 if (
A_->getRowMap()->isDistributed() ==
true &&
A_->getRowMap()->isContiguous() ==
false)
137 prec_->SetParameters(*precList);
139 const_cast<ParameterList&
>(paramList).setParameters(*precList);
141 int r =
prec_->NumericFactorization();
142 TEUCHOS_TEST_FOR_EXCEPTION(r != 0,
Exceptions::RuntimeError,
"MueLu::AmesosSmoother::Setup(): Amesos solver returns value of " +
148 template <
class Node>
156 Epetra_MultiVector &nonconstB =
const_cast<Epetra_MultiVector&
>(epB);
168 template <
class Node>
173 template <
class Node>
175 std::ostringstream out;
177 out <<
"{type = " <<
type_ <<
"}";
182 template <
class Node>
187 out0 <<
"Prec. type: " <<
type_ << std::endl;
190 out0 <<
"Parameter list: " << std::endl;
191 Teuchos::OSTab tab2(out);
196 if (
prec_ != Teuchos::null) {
197 prec_->PrintStatus();
198 prec_->PrintTiming();
201 if (verbLevel &
Debug) {
204 <<
"RCP<A_>: " <<
A_ << std::endl
206 <<
"RCP<prec_>: " <<
prec_ << std::endl;
215 #if defined(HAVE_MUELU_EPETRA) 220 #endif // HAVE_MUELU_EPETRA && HAVE_MUELU_AMESOS Important warning messages (one line)
std::string toString(const T &what)
Little helper function to convert non-string types to strings.
static RCP< Epetra_CrsMatrix > Op2NonConstEpetraCrs(RCP< Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Op)
Print external lib objects.
RCP< Epetra_LinearProblem > linearProblem_
Problem that Amesos uses internally.
static RCP< const Epetra_MultiVector > MV2EpetraMV(RCP< Xpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > const vec)
Helper utility to pull out the underlying Epetra objects from an Xpetra object.
Timer to be used in factories. Similar to Monitor but with additional timers.
AmesosSmoother(const std::string &type="", const Teuchos::ParameterList ¶mList=Teuchos::ParameterList())
Constructor.
std::string description() const
Return a simple one-line description of this object.
RCP< Matrix > A_
Matrix. Not used directly, but held inside of linearProblem_. So we have to keep an RCP pointer to it...
Print additional debugging information.
Namespace for MueLu classes and methods.
virtual const Teuchos::ParameterList & GetParameterList() const
void Setup(Level ¤tLevel)
Set up the direct solver. This creates the underlying Amesos solver object according to the parameter...
RCP< ParameterList > RemoveFactoriesFromList(const ParameterList &list) const
std::string type_
amesos-specific key phrase that denote smoother type
virtual void SetParameterList(const ParameterList ¶mList)
Set parameters from a parameter list and return with default values.
static RCP< Epetra_MultiVector > MV2NonConstEpetraMV(RCP< Xpetra::MultiVector< Scalar, LocalOrdinal, GlobalOrdinal, Node > > vec)
Class that holds all level-specific information.
RCP< SmootherPrototype > Copy() const
bool IsSetup() const
Get the state of a smoother prototype.
#define MUELU_DESCRIBE
Helper macro for implementing Describable::describe() for BaseClass objects.
void Apply(MultiVector &X, const MultiVector &B, bool InitialGuessIsZero=false) const
Apply the direct solver.
Teuchos::FancyOStream & GetOStream(MsgType type, int thisProcRankOnly=0) const
Get an output stream for outputting the input message type.
Amesos_BaseSolver * Create(const char *ClassType, const Epetra_LinearProblem &LinearProblem)
RCP< Amesos_BaseSolver > prec_
pointer to Amesos solver object
Print class parameters (more parameters, more verbose)
Exception throws to report errors in the internal logical of the program.
Description of what is happening (more verbose)
void print(Teuchos::FancyOStream &out, const VerbLevel verbLevel=Default) const
Print the object with some verbosity level to an FancyOStream object.
void Input(Level &level, const std::string &varName) const
virtual std::string description() const
Return a simple one-line description of this object.
bool Query(const char *ClassType)
void DeclareInput(Level ¤tLevel) const
Input.
Class that encapsulates Amesos direct solvers.