10#ifndef THYRA_DEFUALT_PRECONDITIONER_DEF_HPP
11#define THYRA_DEFUALT_PRECONDITIONER_DEF_HPP
13#include "Thyra_DefaultPreconditioner_decl.hpp"
14#include "Thyra_LinearOpBase.hpp"
23template <
class Scalar>
28template <
class Scalar>
37 if (!is_null(leftPrecOp))
38 leftPrecOp_.initialize(leftPrecOp);
39 if (!is_null(rightPrecOp))
40 rightPrecOp_.initialize(rightPrecOp);
44template <
class Scalar>
53 if (!is_null(leftPrecOp))
54 leftPrecOp_.initialize(leftPrecOp);
55 if (!is_null(rightPrecOp))
56 rightPrecOp_.initialize(rightPrecOp);
60template <
class Scalar>
65 unspecifiedPrecOp_.initialize(unspecifiedPrecOp);
69template <
class Scalar>
74 unspecifiedPrecOp_.initialize(unspecifiedPrecOp);
78template <
class Scalar>
84 leftPrecOp_.initialize(leftPrecOp);
88template <
class Scalar>
94 leftPrecOp_.initialize(leftPrecOp);
98template <
class Scalar>
104 rightPrecOp_.initialize(rightPrecOp);
108template <
class Scalar>
114 rightPrecOp_.initialize(rightPrecOp);
118template <
class Scalar>
125 rightPrecOp_.initialize(rightPrecOp);
126 leftPrecOp_.initialize(leftPrecOp);
130template <
class Scalar>
137 rightPrecOp_.initialize(rightPrecOp);
138 leftPrecOp_.initialize(leftPrecOp);
142template <
class Scalar>
148 unspecifiedPrecOp_.initialize(unspecifiedPrecOp);
152template <
class Scalar>
158 unspecifiedPrecOp_.initialize(unspecifiedPrecOp);
162template <
class Scalar>
165 leftPrecOp_.uninitialize();
166 rightPrecOp_.uninitialize();
167 unspecifiedPrecOp_.uninitialize();
174template <
class Scalar>
177 return leftPrecOp_.isConst();
181template <
class Scalar>
185 return leftPrecOp_.getNonconstObj();
189template <
class Scalar>
193 return leftPrecOp_.getConstObj();
197template <
class Scalar>
200 return rightPrecOp_.isConst();
204template <
class Scalar>
208 return rightPrecOp_.getNonconstObj();
212template <
class Scalar>
216 return rightPrecOp_.getConstObj();
220template <
class Scalar>
223 return unspecifiedPrecOp_.isConst();
227template <
class Scalar>
231 return unspecifiedPrecOp_.getNonconstObj();
235template <
class Scalar>
239 return unspecifiedPrecOp_.getConstObj();
246template <
class Scalar>
249 std::ostringstream oss;
251 bool wroteOne =
false;
252 if(!is_null(leftPrecOp_.getConstObj())) {
253 if(wroteOne) oss <<
",";
254 oss <<
"leftPrecOp=" << leftPrecOp_.getConstObj()->description();
257 if(!is_null(rightPrecOp_.getConstObj())) {
258 if(wroteOne) oss <<
",";
259 oss <<
"rightPrecOp=" << rightPrecOp_.getConstObj()->description();
262 if(!is_null(unspecifiedPrecOp_.getConstObj())) {
263 if(wroteOne) oss <<
",";
264 oss <<
"unspecifiedPrecOp=" << unspecifiedPrecOp_.getConstObj()->description();
272template <
class Scalar>
280 using Teuchos::describe;
294 if(!is_null(leftPrecOp_.getConstObj()))
295 out <<
"leftPrecOp=" << describe(*leftPrecOp_.getConstObj(),verbLevel);
296 if(!is_null(rightPrecOp_.getConstObj()))
297 out <<
"rig htPrecOp=" << describe(*rightPrecOp_.getConstObj(),verbLevel);
298 if(!is_null(unspecifiedPrecOp_.getConstObj()))
299 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)