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)