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 BELOS_MULTI_VEC_TRAITS_HPP
00030 #define BELOS_MULTI_VEC_TRAITS_HPP
00031
00036 #include "Teuchos_RCP.hpp"
00037 #include "Teuchos_SerialDenseMatrix.hpp"
00038 #include "BelosTypes.hpp"
00039
00040 namespace Belos {
00041
00042 template< class ScalarType, class MV >
00043 struct UndefinedMultiVecTraits
00044 {
00046 static inline ScalarType notDefined() { return MV::this_type_is_missing_a_specialization(); };
00047 };
00048
00049 template<class ScalarType, class MV>
00050 class MultiVecTraits
00051 {
00052 public:
00054 static Teuchos::RCP<MV> Clone( const MV& mv, const int numvecs )
00055 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); return Teuchos::null; }
00057 static Teuchos::RCP<MV> CloneCopy( const MV& mv )
00058 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); return Teuchos::null; }
00060 static Teuchos::RCP<MV> CloneCopy( const MV& mv, const std::vector<int>& index )
00061 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); return Teuchos::null; }
00063 static Teuchos::RCP<MV> CloneView( MV& mv, const std::vector<int>& index )
00064 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); return Teuchos::null; }
00066 static Teuchos::RCP<const MV> CloneView( const MV& mv, const std::vector<int>& index )
00067 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); return Teuchos::null; }
00069 static int GetVecLength( const MV& mv )
00070 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); return 0; }
00072 static int GetNumberVecs( const MV& mv )
00073 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); return 0; }
00075 static void MvTimesMatAddMv( const ScalarType alpha, const MV& A,
00076 const Teuchos::SerialDenseMatrix<int,ScalarType>& B,
00077 const ScalarType beta, MV& mv )
00078 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00080 static void MvAddMv( const ScalarType alpha, const MV& A, const ScalarType beta, const MV& B, MV& mv )
00081 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00083
00085 static void MvScale ( MV& mv, const ScalarType alpha )
00086 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00087
00090 static void MvScale ( MV& mv, const std::vector<ScalarType>& alpha )
00091 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00092
00093 static void MvTransMv( const ScalarType alpha, const MV& A, const MV& mv, Teuchos::SerialDenseMatrix<int,ScalarType>& B )
00094 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00096 static void MvDot ( const MV& mv, const MV& A, std::vector<ScalarType>& b )
00097 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00099 static void MvNorm( const MV& mv, std::vector<typename Teuchos::ScalarTraits<ScalarType>::magnitudeType>& normvec, NormType type = TwoNorm )
00100 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00102 static void SetBlock( const MV& A, const std::vector<int>& index, MV& mv )
00103 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00105 static void MvRandom( MV& mv )
00106 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00108 static void MvInit( MV& mv, const ScalarType alpha = Teuchos::ScalarTraits<ScalarType>::zero() )
00109 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00111 static void MvPrint( const MV& mv, std::ostream& os )
00112 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00113 };
00114
00115 }
00116
00117 #endif // BELOS_MULTI_VEC_TRAITS_HPP