42#ifndef THYRA_DEFUALT_PRECONDITIONER_DEF_HPP
43#define THYRA_DEFUALT_PRECONDITIONER_DEF_HPP
45#include "Thyra_DefaultPreconditioner_decl.hpp"
46#include "Thyra_LinearOpBase.hpp"
55template <
class Scalar>
60template <
class Scalar>
69 if (!is_null(leftPrecOp))
70 leftPrecOp_.initialize(leftPrecOp);
71 if (!is_null(rightPrecOp))
72 rightPrecOp_.initialize(rightPrecOp);
76template <
class Scalar>
85 if (!is_null(leftPrecOp))
86 leftPrecOp_.initialize(leftPrecOp);
87 if (!is_null(rightPrecOp))
88 rightPrecOp_.initialize(rightPrecOp);
92template <
class Scalar>
97 unspecifiedPrecOp_.initialize(unspecifiedPrecOp);
101template <
class Scalar>
106 unspecifiedPrecOp_.initialize(unspecifiedPrecOp);
110template <
class Scalar>
116 leftPrecOp_.initialize(leftPrecOp);
120template <
class Scalar>
126 leftPrecOp_.initialize(leftPrecOp);
130template <
class Scalar>
136 rightPrecOp_.initialize(rightPrecOp);
140template <
class Scalar>
146 rightPrecOp_.initialize(rightPrecOp);
150template <
class Scalar>
157 rightPrecOp_.initialize(rightPrecOp);
158 leftPrecOp_.initialize(leftPrecOp);
162template <
class Scalar>
169 rightPrecOp_.initialize(rightPrecOp);
170 leftPrecOp_.initialize(leftPrecOp);
174template <
class Scalar>
180 unspecifiedPrecOp_.initialize(unspecifiedPrecOp);
184template <
class Scalar>
190 unspecifiedPrecOp_.initialize(unspecifiedPrecOp);
194template <
class Scalar>
197 leftPrecOp_.uninitialize();
198 rightPrecOp_.uninitialize();
199 unspecifiedPrecOp_.uninitialize();
206template <
class Scalar>
209 return leftPrecOp_.isConst();
213template <
class Scalar>
217 return leftPrecOp_.getNonconstObj();
221template <
class Scalar>
225 return leftPrecOp_.getConstObj();
229template <
class Scalar>
232 return rightPrecOp_.isConst();
236template <
class Scalar>
240 return rightPrecOp_.getNonconstObj();
244template <
class Scalar>
248 return rightPrecOp_.getConstObj();
252template <
class Scalar>
255 return unspecifiedPrecOp_.isConst();
259template <
class Scalar>
263 return unspecifiedPrecOp_.getNonconstObj();
267template <
class Scalar>
271 return unspecifiedPrecOp_.getConstObj();
278template <
class Scalar>
281 std::ostringstream oss;
283 bool wroteOne =
false;
284 if(!is_null(leftPrecOp_.getConstObj())) {
285 if(wroteOne) oss <<
",";
286 oss <<
"leftPrecOp=" << leftPrecOp_.getConstObj()->description();
289 if(!is_null(rightPrecOp_.getConstObj())) {
290 if(wroteOne) oss <<
",";
291 oss <<
"rightPrecOp=" << rightPrecOp_.getConstObj()->description();
294 if(!is_null(unspecifiedPrecOp_.getConstObj())) {
295 if(wroteOne) oss <<
",";
296 oss <<
"unspecifiedPrecOp=" << unspecifiedPrecOp_.getConstObj()->description();
304template <
class Scalar>
312 using Teuchos::describe;
326 if(!is_null(leftPrecOp_.getConstObj()))
327 out <<
"leftPrecOp=" << describe(*leftPrecOp_.getConstObj(),verbLevel);
328 if(!is_null(rightPrecOp_.getConstObj()))
329 out <<
"rig htPrecOp=" << describe(*rightPrecOp_.getConstObj(),verbLevel);
330 if(!is_null(unspecifiedPrecOp_.getConstObj()))
331 out <<
"unspecifiedPrecOp=" << describe(*unspecifiedPrecOp_.getConstObj(),verbLevel);
virtual std::string description() const
void initializeUnspecified(const Teuchos::RCP< LinearOpBase< Scalar > > &unspecifiedPrecOp)
Initialize a single unspecified preconditioner operator.
Teuchos::RCP< LinearOpBase< Scalar > > getNonconstRightPrecOp()
Teuchos::RCP< LinearOpBase< Scalar > > getNonconstLeftPrecOp()
Teuchos::RCP< const LinearOpBase< Scalar > > getRightPrecOp() const
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
bool isUnspecifiedPrecOpConst() const
Teuchos::RCP< const LinearOpBase< Scalar > > getUnspecifiedPrecOp() const
bool isLeftPrecOpConst() const
void initializeLeft(const Teuchos::RCP< LinearOpBase< Scalar > > &leftPrecOp)
Initialize a left preconditioner.
std::string description() const
DefaultPreconditioner()
Construct to uninitialized.
void initializeRight(const Teuchos::RCP< LinearOpBase< Scalar > > &rightPrecOp)
Initialize a right preconditioner.
Teuchos::RCP< LinearOpBase< Scalar > > getNonconstUnspecifiedPrecOp()
void uninitialize()
Uninitialize.
Teuchos::RCP< const LinearOpBase< Scalar > > getLeftPrecOp() const
bool isRightPrecOpConst() const
void initializeLeftRight(const Teuchos::RCP< LinearOpBase< Scalar > > &leftPrecOp, const Teuchos::RCP< LinearOpBase< Scalar > > &rightPrecOp)
Initialize a split left/right preconditioner.
Base class for all linear operators.
#define TEUCHOS_TEST_FOR_EXCEPT(throw_exception_test)
std::string typeName(const T &t)