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 ANASAZI_MULTI_VEC_TRAITS_HPP
00030 #define ANASAZI_MULTI_VEC_TRAITS_HPP
00031
00036 #include "AnasaziConfigDefs.hpp"
00037 #include "AnasaziTypes.hpp"
00038 #include "Teuchos_RCP.hpp"
00039 #include "Teuchos_SerialDenseMatrix.hpp"
00040
00041 namespace Anasazi {
00042
00046 template< class ScalarType, class MV >
00047 struct UndefinedMultiVecTraits
00048 {
00050
00054 static inline ScalarType notDefined() { return MV::this_type_is_missing_a_specialization(); };
00055 };
00056
00057
00065 template<class ScalarType, class MV>
00066 class MultiVecTraits
00067 {
00068 public:
00069
00071
00072
00077 static Teuchos::RCP<MV> Clone( const MV& mv, const int numvecs )
00078 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); return Teuchos::null; }
00079
00084 static Teuchos::RCP<MV> CloneCopy( const MV& mv )
00085 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); return Teuchos::null; }
00086
00092 static Teuchos::RCP<MV> CloneCopy( const MV& mv, const std::vector<int>& index )
00093 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); return Teuchos::null; }
00094
00100 static Teuchos::RCP<MV> CloneViewNonConst( MV& mv, const std::vector<int>& index )
00101 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); return Teuchos::null; }
00102
00108 static Teuchos::RCP<const MV> CloneView( const MV& mv, const std::vector<int>& index )
00109 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); return Teuchos::null; }
00110
00112
00114
00115
00117 static int GetVecLength( const MV& mv )
00118 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); return 0; }
00119
00121 static int GetNumberVecs( const MV& mv )
00122 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); return 0; }
00123
00125
00127
00128
00131 static void MvTimesMatAddMv( const ScalarType alpha, const MV& A,
00132 const Teuchos::SerialDenseMatrix<int,ScalarType>& B,
00133 const ScalarType beta, MV& mv )
00134 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00135
00138 static void MvAddMv( const ScalarType alpha, const MV& A, const ScalarType beta, const MV& B, MV& mv )
00139 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00140
00143 static void MvScale ( MV& mv, const ScalarType alpha )
00144 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00145
00148 static void MvScale ( MV& mv, const std::vector<ScalarType>& alpha )
00149 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00150
00153 static void MvTransMv( const ScalarType alpha, const MV& A, const MV& mv, Teuchos::SerialDenseMatrix<int,ScalarType>& B)
00154 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00155
00158 static void MvDot ( const MV& mv, const MV& A, std::vector<ScalarType> &b)
00159 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00160
00162
00163
00164
00168 static void MvNorm( const MV& mv, std::vector<typename Teuchos::ScalarTraits<ScalarType>::magnitudeType> &normvec )
00169 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00170
00172
00174
00175
00180 static void SetBlock( const MV& A, const std::vector<int>& index, MV& mv )
00181 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00182
00185 static void MvRandom( MV& mv )
00186 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00187
00190 static void MvInit( MV& mv, const ScalarType alpha = Teuchos::ScalarTraits<ScalarType>::zero() )
00191 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00192
00194
00196
00197
00200 static void MvPrint( const MV& mv, std::ostream& os )
00201 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00202
00204 };
00205
00206 }
00207
00208 #endif // ANASAZI_MULTI_VEC_TRAITS_HPP