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_VECTOR_SPACE_STD_BASE_HPP
00030 #define THYRA_VECTOR_SPACE_STD_BASE_HPP
00031
00032 #include "Thyra_ScalarProdVectorSpaceBaseDecl.hpp"
00033 #include "Thyra_VectorSpaceDefaultBase.hpp"
00034 #include "Thyra_EuclideanScalarProd.hpp"
00035 #include "Thyra_AssertOp.hpp"
00036
00037 namespace Thyra {
00038
00039
00040
00041 template<class Scalar>
00042 ScalarProdVectorSpaceBase<Scalar>::ScalarProdVectorSpaceBase()
00043 :scalarProd_(Teuchos::rcp(new EuclideanScalarProd<Scalar>()))
00044 {}
00045
00046 template<class Scalar>
00047 ScalarProdVectorSpaceBase<Scalar>::ScalarProdVectorSpaceBase( const Teuchos::RefCountPtr<const ScalarProdBase<Scalar> > &scalarProd )
00048 :scalarProd_(scalarProd)
00049 {
00050 TEST_FOR_EXCEPT( scalarProd.get()==NULL );
00051 }
00052
00053 template<class Scalar>
00054 void ScalarProdVectorSpaceBase<Scalar>::setScalarProd( const Teuchos::RefCountPtr<const ScalarProdBase<Scalar> > &scalarProd )
00055 {
00056 TEST_FOR_EXCEPT( scalarProd.get()==NULL );
00057 scalarProd_ = scalarProd;
00058 }
00059
00060 template<class Scalar>
00061 Teuchos::RefCountPtr<const ScalarProdBase<Scalar> >
00062 ScalarProdVectorSpaceBase<Scalar>::getScalarProd() const
00063 {
00064 return scalarProd_;
00065 }
00066
00067
00068
00069 template<class Scalar>
00070 bool ScalarProdVectorSpaceBase<Scalar>::isEuclidean() const
00071 {
00072 return scalarProd_->isEuclidean();
00073 }
00074
00075 template<class Scalar>
00076 Scalar ScalarProdVectorSpaceBase<Scalar>::scalarProd( const VectorBase<Scalar>& x, const VectorBase<Scalar>& y ) const
00077 {
00078 #ifdef TEUCHOS_DEBUG
00079 THYRA_ASSERT_VEC_SPACES("ScalarProdVectorSpaceBase<Scalar>::scalarProd(...)",*x.space(),*this);
00080 THYRA_ASSERT_VEC_SPACES("ScalarProdVectorSpaceBase<Scalar>::scalarProd(...)",*y.space(),*this);
00081 #endif
00082 return scalarProd_->scalarProd(x,y);
00083 }
00084
00085 template<class Scalar>
00086 void ScalarProdVectorSpaceBase<Scalar>::scalarProds( const MultiVectorBase<Scalar>& X, const MultiVectorBase<Scalar>& Y, Scalar scalar_prods[] ) const
00087 {
00088 #ifdef TEUCHOS_DEBUG
00089 THYRA_ASSERT_VEC_SPACES("ScalarProdVectorSpaceBase<Scalar>::scalarProds(...)",*X.range(),*this);
00090 THYRA_ASSERT_VEC_SPACES("ScalarProdVectorSpaceBase<Scalar>::scalarProds(...)",*Y.range(),*this);
00091 THYRA_ASSERT_VEC_SPACES("ScalarProdVectorSpaceBase<Scalar>::scalarProds(...)",*X.domain(),*Y.domain());
00092 #endif
00093 scalarProd_->scalarProds(X,Y,scalar_prods);
00094 }
00095
00096 }
00097
00098 #endif // THYRA_VECTOR_SPACE_STD_BASE_HPP