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" 55 template <
class Scalar>
60 template <
class Scalar>
67 TEUCHOS_TEST_FOR_EXCEPT( is_null(leftPrecOp) && is_null(rightPrecOp) );
69 if (!is_null(leftPrecOp))
70 leftPrecOp_.initialize(leftPrecOp);
71 if (!is_null(rightPrecOp))
72 rightPrecOp_.initialize(rightPrecOp);
76 template <
class Scalar>
83 TEUCHOS_TEST_FOR_EXCEPT( is_null(leftPrecOp) && is_null(rightPrecOp) );
85 if (!is_null(leftPrecOp))
86 leftPrecOp_.initialize(leftPrecOp);
87 if (!is_null(rightPrecOp))
88 rightPrecOp_.initialize(rightPrecOp);
92 template <
class Scalar>
97 unspecifiedPrecOp_.initialize(unspecifiedPrecOp);
101 template <
class Scalar>
106 unspecifiedPrecOp_.initialize(unspecifiedPrecOp);
110 template <
class Scalar>
116 leftPrecOp_.initialize(leftPrecOp);
120 template <
class Scalar>
126 leftPrecOp_.initialize(leftPrecOp);
130 template <
class Scalar>
136 rightPrecOp_.initialize(rightPrecOp);
140 template <
class Scalar>
146 rightPrecOp_.initialize(rightPrecOp);
150 template <
class Scalar>
157 rightPrecOp_.initialize(rightPrecOp);
158 leftPrecOp_.initialize(leftPrecOp);
162 template <
class Scalar>
169 rightPrecOp_.initialize(rightPrecOp);
170 leftPrecOp_.initialize(leftPrecOp);
174 template <
class Scalar>
180 unspecifiedPrecOp_.initialize(unspecifiedPrecOp);
184 template <
class Scalar>
190 unspecifiedPrecOp_.initialize(unspecifiedPrecOp);
194 template <
class Scalar>
197 leftPrecOp_.uninitialize();
198 rightPrecOp_.uninitialize();
199 unspecifiedPrecOp_.uninitialize();
206 template <
class Scalar>
209 return leftPrecOp_.isConst();
213 template <
class Scalar>
214 Teuchos::RCP<LinearOpBase<Scalar> >
217 return leftPrecOp_.getNonconstObj();
221 template <
class Scalar>
222 Teuchos::RCP<const LinearOpBase<Scalar> >
225 return leftPrecOp_.getConstObj();
229 template <
class Scalar>
232 return rightPrecOp_.isConst();
236 template <
class Scalar>
237 Teuchos::RCP<LinearOpBase<Scalar> >
240 return rightPrecOp_.getNonconstObj();
244 template <
class Scalar>
245 Teuchos::RCP<const LinearOpBase<Scalar> >
248 return rightPrecOp_.getConstObj();
252 template <
class Scalar>
255 return unspecifiedPrecOp_.isConst();
259 template <
class Scalar>
260 Teuchos::RCP<LinearOpBase<Scalar> >
263 return unspecifiedPrecOp_.getNonconstObj();
267 template <
class Scalar>
268 Teuchos::RCP<const LinearOpBase<Scalar> >
271 return unspecifiedPrecOp_.getConstObj();
278 template <
class Scalar>
281 std::ostringstream oss;
282 oss << Teuchos::Describable::description() <<
"{";
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();
304 template <
class Scalar>
306 Teuchos::FancyOStream &out,
307 const Teuchos::EVerbosityLevel verbLevel
310 using Teuchos::FancyOStream;
311 using Teuchos::OSTab;
312 using Teuchos::describe;
315 case Teuchos::VERB_DEFAULT:
316 case Teuchos::VERB_LOW:
317 out << Teuchos::Describable::description() << std::endl;
319 case Teuchos::VERB_MEDIUM:
320 case Teuchos::VERB_HIGH:
321 case Teuchos::VERB_EXTREME:
324 << Teuchos::typeName(*
this) <<
"\n";
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);
335 TEUCHOS_TEST_FOR_EXCEPT(
true);
343 #endif // THYRA_DEFUALT_PRECONDITIONER_DEF_HPP bool isUnspecifiedPrecOpConst() const
std::string description() const
void initializeUnspecified(const Teuchos::RCP< LinearOpBase< Scalar > > &unspecifiedPrecOp)
Initialize a single unspecified preconditioner operator.
Teuchos::RCP< const LinearOpBase< Scalar > > getLeftPrecOp() const
void uninitialize()
Uninitialize.
bool isRightPrecOpConst() const
void initializeRight(const Teuchos::RCP< LinearOpBase< Scalar > > &rightPrecOp)
Initialize a right preconditioner.
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
Teuchos::RCP< LinearOpBase< Scalar > > getNonconstUnspecifiedPrecOp()
bool isLeftPrecOpConst() const
Base class for all linear operators.
Teuchos::RCP< LinearOpBase< Scalar > > getNonconstLeftPrecOp()
Teuchos::RCP< const LinearOpBase< Scalar > > getRightPrecOp() const
Teuchos::RCP< LinearOpBase< Scalar > > getNonconstRightPrecOp()
void initializeLeftRight(const Teuchos::RCP< LinearOpBase< Scalar > > &leftPrecOp, const Teuchos::RCP< LinearOpBase< Scalar > > &rightPrecOp)
Initialize a split left/right preconditioner.
Teuchos::RCP< const LinearOpBase< Scalar > > getUnspecifiedPrecOp() const
DefaultPreconditioner()
Construct to uninitialized.
void initializeLeft(const Teuchos::RCP< LinearOpBase< Scalar > > &leftPrecOp)
Initialize a left preconditioner.