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_SCALED_ADJOINT_LINEAR_OP_BASE_DECL_HPP
00030 #define THYRA_SCALED_ADJOINT_LINEAR_OP_BASE_DECL_HPP
00031
00032 #include "Thyra_LinearOpBaseDecl.hpp"
00033
00034 namespace Thyra {
00035
00057 template<class Scalar>
00058 class ScaledAdjointLinearOpBase : virtual public LinearOpBase<Scalar> {
00059 public:
00060
00062 using LinearOpBase<Scalar>::apply;
00063
00066
00069 virtual Scalar overallScalar() const = 0;
00070
00073 virtual ETransp overallTransp() const = 0;
00074
00080 virtual Teuchos::RefCountPtr<LinearOpBase<Scalar> > getNonconstOrigOp() = 0;
00081
00084 virtual Teuchos::RefCountPtr<const LinearOpBase<Scalar> > getOrigOp() const = 0;
00085
00087
00088 };
00089
00121 template<class Scalar>
00122 void unwrap(
00123 const LinearOpBase<Scalar> &Op
00124 ,Scalar *scalar
00125 ,ETransp *transp
00126 ,const LinearOpBase<Scalar>* *origOp
00127 );
00128
00161 template<class Scalar>
00162 void unwrap(
00163 const Teuchos::RefCountPtr<const LinearOpBase<Scalar> > &Op
00164 ,Scalar *scalar
00165 ,ETransp *transp
00166 ,Teuchos::RefCountPtr<const LinearOpBase<Scalar> > *origOp
00167 );
00168
00169 }
00170
00171 #endif // THYRA_SCALED_ADJOINT_LINEAR_OP_BASE_DECL_HPP