00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef THYRA_PRECONDITIONER_BASE_HPP
00030 #define THYRA_PRECONDITIONER_BASE_HPP
00031
00032 #include "Thyra_SolveSupportTypes.hpp"
00033 #include "Teuchos_Describable.hpp"
00034
00035 namespace Thyra {
00036
00071 template <class RangeScalar, class DomainScalar = RangeScalar>
00072 class PreconditionerBase : virtual public Teuchos::Describable
00073 {
00074 public:
00075
00078
00082 virtual bool isLeftPrecOpConst() const = 0;
00083
00091 virtual Teuchos::RefCountPtr<LinearOpBase<DomainScalar,RangeScalar> > getNonconstLeftPrecOp() = 0;
00092
00096 virtual Teuchos::RefCountPtr<const LinearOpBase<DomainScalar,RangeScalar> > getLeftPrecOp()const = 0;
00097
00101 virtual bool isRightPrecOpConst() const = 0;
00102
00110 virtual Teuchos::RefCountPtr<LinearOpBase<DomainScalar,RangeScalar> > getNonconstRightPrecOp() = 0;
00111
00115 virtual Teuchos::RefCountPtr<const LinearOpBase<DomainScalar,RangeScalar> > getRightPrecOp() const = 0;
00116
00120 virtual bool isUnspecifiedPrecOpConst() const = 0;
00121
00125 virtual Teuchos::RefCountPtr<LinearOpBase<DomainScalar,RangeScalar> > getNonconstUnspecifiedPrecOp() = 0;
00126
00134 virtual Teuchos::RefCountPtr<const LinearOpBase<DomainScalar,RangeScalar> > getUnspecifiedPrecOp() const = 0;
00135
00137
00138 };
00139
00140 }
00141
00142 #endif // THYRA_PRECONDITIONER_BASE_HPP