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_VECTOR_SPACE_BASE_DEF_HPP
00030 #define THYRA_SCALAR_PROD_VECTOR_SPACE_BASE_DEF_HPP
00031
00032 #include "Thyra_ScalarProdVectorSpaceBase_decl.hpp"
00033 #include "Thyra_VectorSpaceDefaultBase.hpp"
00034 #include "Thyra_EuclideanScalarProd.hpp"
00035 #include "Thyra_AssertOp.hpp"
00036
00037
00038 namespace Thyra {
00039
00040
00041
00042
00043
00044 template<class Scalar>
00045 ScalarProdVectorSpaceBase<Scalar>::ScalarProdVectorSpaceBase()
00046 :scalarProd_(Teuchos::rcp(new EuclideanScalarProd<Scalar>()))
00047 {}
00048
00049
00050 template<class Scalar>
00051 ScalarProdVectorSpaceBase<Scalar>::ScalarProdVectorSpaceBase(
00052 const Teuchos::RCP<const ScalarProdBase<Scalar> > &scalarProd_in
00053 )
00054 :scalarProd_(scalarProd_in.assert_not_null())
00055 {}
00056
00057
00058 template<class Scalar>
00059 void ScalarProdVectorSpaceBase<Scalar>::setScalarProd(
00060 const Teuchos::RCP<const ScalarProdBase<Scalar> > &scalarProd_in
00061 )
00062 {
00063 scalarProd_ = scalarProd_in.assert_not_null();
00064 }
00065
00066
00067 template<class Scalar>
00068 Teuchos::RCP<const ScalarProdBase<Scalar> >
00069 ScalarProdVectorSpaceBase<Scalar>::getScalarProd() const
00070 {
00071 return scalarProd_;
00072 }
00073
00074
00075
00076
00077
00078 template<class Scalar>
00079 bool ScalarProdVectorSpaceBase<Scalar>::isEuclidean() const
00080 {
00081 return scalarProd_->isEuclidean();
00082 }
00083
00084
00085 template<class Scalar>
00086 Scalar ScalarProdVectorSpaceBase<Scalar>::scalarProd(
00087 const VectorBase<Scalar>& x, const VectorBase<Scalar>& y ) const
00088 {
00089 #ifdef TEUCHOS_DEBUG
00090 THYRA_ASSERT_VEC_SPACES("ScalarProdVectorSpaceBase<Scalar>::scalarProd(...)",
00091 *x.space(), *this);
00092 THYRA_ASSERT_VEC_SPACES("ScalarProdVectorSpaceBase<Scalar>::scalarProd(...)",
00093 *y.space(), *this);
00094 #endif
00095 return scalarProd_->scalarProd(x,y);
00096 }
00097
00098
00099 template<class Scalar>
00100 void ScalarProdVectorSpaceBase<Scalar>::scalarProdsImpl(
00101 const MultiVectorBase<Scalar>& X, const MultiVectorBase<Scalar>& Y,
00102 const ArrayView<Scalar> &scalarProds_out ) const
00103 {
00104 #ifdef TEUCHOS_DEBUG
00105 THYRA_ASSERT_VEC_SPACES("ScalarProdVectorSpaceBase<Scalar>::scalarProds(...)",
00106 *X.range(), *this);
00107 THYRA_ASSERT_VEC_SPACES("ScalarProdVectorSpaceBase<Scalar>::scalarProds(...)",
00108 *Y.range(), *this);
00109 THYRA_ASSERT_VEC_SPACES("ScalarProdVectorSpaceBase<Scalar>::scalarProds(...)",
00110 *X.domain(), *Y.domain());
00111 #endif
00112 scalarProd_->scalarProds(X, Y, scalarProds_out);
00113 }
00114
00115
00116 }
00117
00118
00119 #endif // THYRA_SCALAR_PROD_VECTOR_SPACE_BASE_DEF_HPP