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
00045 template< class ScalarType, class MV >
00046 struct UndefinedMultiVecTraits
00047 {
00049
00053 static inline ScalarType notDefined() { return MV::this_type_is_missing_a_specialization(); };
00054 };
00055
00063 template<class ScalarType, class MV>
00064 class MultiVecTraits
00065 {
00066 public:
00069
00070
00075 static Teuchos::RCP<MV> Clone( const MV& mv, const int numvecs )
00076 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); return Teuchos::null; }
00077
00082 static Teuchos::RCP<MV> CloneCopy( const MV& mv )
00083 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); return Teuchos::null; }
00084
00090 static Teuchos::RCP<MV> CloneCopy( const MV& mv, const std::vector<int>& index )
00091 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); return Teuchos::null; }
00092
00098 static Teuchos::RCP<MV> CloneView( MV& mv, const std::vector<int>& index )
00099 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); return Teuchos::null; }
00100
00106 static Teuchos::RCP<const MV> CloneView( const MV& mv, const std::vector<int>& index )
00107 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); return Teuchos::null; }
00108
00110
00112
00113
00115 static int GetVecLength( const MV& mv )
00116 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); return 0; }
00117
00119 static int GetNumberVecs( const MV& mv )
00120 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); return 0; }
00121
00123
00125
00126
00129 static void MvTimesMatAddMv( const ScalarType alpha, const MV& A,
00130 const Teuchos::SerialDenseMatrix<int,ScalarType>& B,
00131 const ScalarType beta, MV& mv )
00132 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00133
00136 static void MvAddMv( const ScalarType alpha, const MV& A, const ScalarType beta, const MV& B, MV& mv )
00137 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00138
00141 static void MvScale ( MV& mv, const ScalarType alpha )
00142 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00143
00146 static void MvScale ( MV& mv, const std::vector<ScalarType>& alpha )
00147 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00148
00151 static void MvTransMv( const ScalarType alpha, const MV& A, const MV& mv, Teuchos::SerialDenseMatrix<int,ScalarType>& B )
00152 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00153
00156 static void MvDot ( const MV& mv, const MV& A, std::vector<ScalarType>& b )
00157 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00158
00160
00161
00162
00166 static void MvNorm( const MV& mv, std::vector<typename Teuchos::ScalarTraits<ScalarType>::magnitudeType>& normvec, NormType type = TwoNorm )
00167 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00168
00170
00172
00173
00178 static void SetBlock( const MV& A, const std::vector<int>& index, MV& mv )
00179 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00180
00183 static void MvRandom( MV& mv )
00184 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00185
00188 static void MvInit( MV& mv, const ScalarType alpha = Teuchos::ScalarTraits<ScalarType>::zero() )
00189 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00190
00192
00194
00195
00198 static void MvPrint( const MV& mv, std::ostream& os )
00199 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00200
00202 };
00203
00204 }
00205
00206 #endif // BELOS_MULTI_VEC_TRAITS_HPP