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
00032 #include "Teuchos_RefCountPtr.hpp"
00033 #include "Teuchos_SerialDenseMatrix.hpp"
00034 #include "BelosTypes.hpp"
00035
00036 namespace Belos {
00037
00038 template< class ScalarType, class MV >
00039 struct UndefinedMultiVecTraits
00040 {
00042 static inline ScalarType notDefined() { return MV::this_type_is_missing_a_specialization(); };
00043 };
00044
00045 template<class ScalarType, class MV>
00046 class MultiVecTraits
00047 {
00048 public:
00050 static Teuchos::RefCountPtr<MV> Clone( const MV& mv, const int numvecs )
00051 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); return Teuchos::null; }
00053 static Teuchos::RefCountPtr<MV> CloneCopy( const MV& mv )
00054 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); return Teuchos::null; }
00056 static Teuchos::RefCountPtr<MV> CloneCopy( const MV& mv, const std::vector<int>& index )
00057 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); return Teuchos::null; }
00059 static Teuchos::RefCountPtr<MV> CloneView( MV& mv, const std::vector<int>& index )
00060 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); return Teuchos::null; }
00062 static Teuchos::RefCountPtr<const MV> CloneView( const MV& mv, const std::vector<int>& index )
00063 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); return Teuchos::null; }
00065 static int GetVecLength( const MV& mv )
00066 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); return 0; }
00068 static int GetNumberVecs( const MV& mv )
00069 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); return 0; }
00071 static void MvTimesMatAddMv( const ScalarType alpha, const MV& A,
00072 const Teuchos::SerialDenseMatrix<int,ScalarType>& B,
00073 const ScalarType beta, MV& mv )
00074 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00076 static void MvAddMv( const ScalarType alpha, const MV& A, const ScalarType beta, const MV& B, MV& mv )
00077 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00079 static void MvTransMv( const ScalarType alpha, const MV& A, const MV& mv, Teuchos::SerialDenseMatrix<int,ScalarType>& B )
00080 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00082 static void MvDot ( const MV& mv, const MV& A, std::vector<ScalarType>* b )
00083 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00085 static void MvNorm( const MV& mv, std::vector<typename Teuchos::ScalarTraits<ScalarType>::magnitudeType>* normvec, NormType type = TwoNorm )
00086 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00088 static void SetBlock( const MV& A, const std::vector<int>& index, MV& mv )
00089 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00091 static void MvRandom( MV& mv )
00092 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00094 static void MvInit( MV& mv, const ScalarType alpha = Teuchos::ScalarTraits<ScalarType>::zero() )
00095 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00097 static void MvPrint( const MV& mv, ostream& os )
00098 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00099 };
00100
00101 }
00102
00103 #endif // BELOS_MULTI_VEC_TRAITS_HPP