47 #ifndef MUELU_MATLABSMOOTHER_DEF_HPP
48 #define MUELU_MATLABSMOOTHER_DEF_HPP
51 #if defined(HAVE_MUELU_MATLAB)
56 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
58 SetParameterList(paramList);
61 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
65 setupFunction_ = pL.
get(
"Setup Function",
"");
66 solveFunction_ = pL.
get(
"Solve Function",
"");
67 solveDataSize_ = pL.
get(
"Number of Solver Args", 0);
70 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
73 this->Input(currentLevel,
"A");
75 needsSetup_ = pL.
get<
string>(
"Needs");
77 for (
size_t i = 0; i < needsList.size(); i++) {
79 this->Input(currentLevel, needsList[i]);
83 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
87 if (this->IsSetup() ==
true)
88 this->GetOStream(
Warnings0) <<
"MueLu::MatlabSmoother::Setup(): Setup() has already been called";
89 vector<RCP<MuemexArg>> InputArgs = processNeeds<Scalar, LocalOrdinal, GlobalOrdinal, Node>(
this, needsSetup_, currentLevel);
90 A_ = Factory::Get<RCP<Matrix>>(currentLevel,
"A");
93 InputArgs.insert(InputArgs.begin(), AmatArg);
95 if (!setupFunction_.length())
96 throw runtime_error(
"Invalid matlab function name");
97 solveData_ =
callMatlab(setupFunction_, solveDataSize_, InputArgs);
98 this->GetOStream(
Statistics1) << description() << endl;
102 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
105 "MueLu::MatlabSmoother::Apply(): Setup() has not been called");
106 using namespace Teuchos;
108 if (InitialGuessIsZero)
111 vector<RCP<MuemexArg>> InputArgs;
115 MultiVector* BPtrNonConst = (MultiVector*)&B;
119 InputArgs.push_back(XData);
120 InputArgs.push_back(BData);
121 for (
size_t i = 0; i < solveData_.size(); i++)
122 InputArgs.push_back(solveData_[i]);
123 if (!solveFunction_.length())
throw std::runtime_error(
"Invalid matlab function name");
124 vector<Teuchos::RCP<MuemexArg>> mexOutput =
callMatlab(solveFunction_, 1, InputArgs);
126 X = *(mydata->getData());
129 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
132 smoother->SetParameterList(this->GetParameterList());
136 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
138 std::ostringstream out;
140 out <<
"Matlab Smoother(" << setupFunction_ <<
"/" << solveFunction_ <<
")";
147 template <
class Scalar,
class LocalOrdinal,
class GlobalOrdinal,
class Node>
152 out <<
"Matlab Smoother(" << setupFunction_ <<
"/" << solveFunction_ <<
")";
155 out0 <<
"Parameter list: " << std::endl;
157 out << this->GetParameterList();
160 if (verbLevel &
Debug) {
186 #endif // HAVE_MUELU_MATLAB
187 #endif // MUELU_MATLABSMOOTHER_DEF_HPP
Important warning messages (one line)
void SetParameterList(const Teuchos::ParameterList ¶mList)
Set parameters from a parameter list and return with default values.
void DeclareInput(Level ¤tLevel) const
Input.
std::vector< std::string > tokenizeList(const std::string ¶ms)
void Apply(MultiVector &X, const MultiVector &B, bool InitialGuessIsZero=false) const
Apply the preconditioner.
RCP< SmootherPrototype > Copy() const
std::vector< RCP< MuemexArg > > callMatlab(std::string function, int numOutputs, std::vector< RCP< MuemexArg > > args)
T & get(const std::string &name, T def_value)
Timer to be used in factories. Similar to Monitor but with additional timers.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
void Setup(Level ¤tLevel)
Set up the smoother.
Print additional debugging information.
bool IsParamMuemexVariable(const std::string &name)
virtual void SetParameterList(const Teuchos::ParameterList ¶mList)
Set parameters from a parameter list and return with default values.
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
Print the object with some verbosity level to an FancyOStream object.
bool IsSetup() const
Get the state of a smoother prototype.
#define MUELU_DESCRIBE
Helper macro for implementing Describable::describe() for BaseClass objects.
friend class MatlabSmoother
Constructor.
Class that encapsulates Matlab smoothers.
std::string description() const
Return a simple one-line description of this object.
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.
std::string toString(const T &t)