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_SCALAR_PROD_BASE_DECL_HPP
00030 #define THYRA_SCALAR_PROD_BASE_DECL_HPP
00031
00032 #include "Thyra_OperatorVectorTypes.hpp"
00033 #include "Thyra_EuclideanLinearOpBaseDecl.hpp"
00034
00035
00036 namespace Thyra {
00037
00038
00076 template<class Scalar>
00077 class ScalarProdBase {
00078 public:
00079
00082
00084 virtual ~ScalarProdBase() {}
00085
00087
00090
00097 bool isEuclidean() const
00098 { return isEuclideanImpl(); }
00099
00121 Scalar scalarProd(
00122 const VectorBase<Scalar>& x, const VectorBase<Scalar>& y
00123 ) const
00124 { return scalarProdImpl(x, y); }
00125
00159 void scalarProds(
00160 const MultiVectorBase<Scalar>& X, const MultiVectorBase<Scalar>& Y,
00161 const ArrayView<Scalar> &scalarProds_out
00162 ) const
00163 { scalarProdsImpl(X, Y, scalarProds_out); }
00164
00189 void euclideanApply(
00190 const EuclideanLinearOpBase<Scalar> &M,
00191 const EOpTransp M_trans,
00192 const MultiVectorBase<Scalar> &X,
00193 const Ptr<MultiVectorBase<Scalar> > &Y,
00194 const Scalar alpha,
00195 const Scalar beta
00196 ) const
00197 { euclideanApplyImpl(M, M_trans, X, Y, alpha, beta); }
00198
00200
00201 protected:
00202
00205
00207 virtual bool isEuclideanImpl() const = 0;
00208
00210 virtual Scalar scalarProdImpl(
00211 const VectorBase<Scalar>& x, const VectorBase<Scalar>& y ) const;
00212
00214 virtual void scalarProdsImpl(
00215 const MultiVectorBase<Scalar>& X, const MultiVectorBase<Scalar>& Y,
00216 const ArrayView<Scalar> &scalarProds_out
00217 ) const = 0;
00218
00220 virtual void euclideanApplyImpl(
00221 const EuclideanLinearOpBase<Scalar> &M,
00222 const EOpTransp M_trans,
00223 const MultiVectorBase<Scalar> &X,
00224 const Ptr<MultiVectorBase<Scalar> > &Y,
00225 const Scalar alpha,
00226 const Scalar beta
00227 ) const = 0;
00228
00230
00231 };
00232
00233
00234 }
00235
00236
00237 #endif // THYRA_SCALAR_PROD_BASE_DECL_HPP