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> CloneView( 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 MvTransMv( const ScalarType alpha, const MV& A, const MV& mv, Teuchos::SerialDenseMatrix<int,ScalarType>& B
00144 #ifdef HAVE_ANASAZI_EXPERIMENTAL
00145 , ConjType conj = Anasazi::CONJ
00146 #endif
00147 )
00148 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00149
00152 static void MvDot ( const MV& mv, const MV& A, std::vector<ScalarType> &b
00153 #ifdef HAVE_ANASAZI_EXPERIMENTAL
00154 , ConjType conj = Anasazi::CONJ
00155 #endif
00156 )
00157 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00158
00161 static void MvScale ( MV& mv, const ScalarType alpha )
00162 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00163
00166 static void MvScale ( MV& mv, const std::vector<ScalarType>& alpha )
00167 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00168
00170
00171
00172
00176 static void MvNorm( const MV& mv, std::vector<typename Teuchos::ScalarTraits<ScalarType>::magnitudeType> &normvec )
00177 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00178
00180
00182
00183
00188 static void SetBlock( const MV& A, const std::vector<int>& index, MV& mv )
00189 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00190
00193 static void MvRandom( MV& mv )
00194 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00195
00198 static void MvInit( MV& mv, const ScalarType alpha = Teuchos::ScalarTraits<ScalarType>::zero() )
00199 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00200
00202
00204
00205
00208 static void MvPrint( const MV& mv, std::ostream& os )
00209 { UndefinedMultiVecTraits<ScalarType, MV>::notDefined(); }
00210
00212 };
00213
00214 }
00215
00216 #endif // ANASAZI_MULTI_VEC_TRAITS_HPP