33 #ifndef ANASAZI_EPETRA_ADAPTER_HPP 34 #define ANASAZI_EPETRA_ADAPTER_HPP 37 #include "Anasaziepetra_DLLExportMacro.h" 42 #include "Teuchos_Assert.hpp" 44 #include "Epetra_MultiVector.h" 45 #include "Epetra_Vector.h" 46 #include "Epetra_Operator.h" 47 #include "Epetra_Map.h" 48 #include "Epetra_LocalMap.h" 50 #if defined(HAVE_ANASAZI_TPETRA) && defined(HAVE_ANASAZI_TSQR) 51 # include <Tpetra_ConfigDefs.hpp> 52 # if defined(HAVE_TPETRA_EPETRA) 53 # include <Epetra_TsqrAdaptor.hpp> 54 # endif // defined(HAVE_TPETRA_EPETRA) 55 #endif // defined(HAVE_ANASAZI_TPETRA) && defined(HAVE_ANASAZI_TSQR) 200 if ( Map().GlobalIndicesLongLong() )
201 return static_cast<ptrdiff_t
>( GlobalLength64() );
203 return static_cast<ptrdiff_t
>( GlobalLength() );
228 #ifdef HAVE_ANASAZI_EXPERIMENTAL
236 #ifdef HAVE_ANASAZI_EXPERIMENTAL
245 "Anasazi::EpetraMultiVec::MvScale call to Epetra_MultiVector::Scale() returned a nonzero value.");
250 void MvScale (
const std::vector<double>& alpha );
259 void MvNorm ( std::vector<double> & normvec )
const {
260 if (((
int)normvec.size() >= GetNumberVecs()) ) {
262 "Anasazi::EpetraMultiVec::MvNorm call to Epetra_MultiVector::Norm2() returned a nonzero value.");
280 "Anasazi::EpetraMultiVec::MvRandom call to Epetra_MultiVector::Random() returned a nonzero value.");
287 "Anasazi::EpetraMultiVec::MvInit call to Epetra_MultiVector::PutScalar() returned a nonzero value.");
306 void MvPrint( std::ostream& os )
const { os << *
this << std::endl; };
350 #pragma warning(push) 351 #pragma warning(disable:4251) 387 bool isAInverse =
true );
408 const char*
Label()
const {
return "Epetra_Operator applying A^{-1}M"; };
437 #pragma warning(push) 438 #pragma warning(disable:4251) 492 const char*
Label()
const {
return "Epetra_Operator applying A^TA or AA^T"; };
519 #pragma warning(push) 520 #pragma warning(disable:4251) 555 bool isTrans =
false );
570 #pragma warning(push) 571 #pragma warning(disable:4251) 619 #pragma warning(push) 620 #pragma warning(disable:4251) 668 #pragma warning(push) 669 #pragma warning(disable:4251) 714 "Belos::MultiVecTraits<double, Epetra_MultiVector>::" 715 "Clone(mv, outNumVecs = " << outNumVecs <<
"): " 716 "outNumVecs must be positive.");
743 const int outNumVecs = index.size();
747 "Anasazi::MultiVecTraits<double,Epetra_MultiVector>::" 748 "CloneCopy(mv, index = {}): At least one vector must be" 750 if (outNumVecs > inNumVecs)
752 std::ostringstream os;
753 os <<
"Anasazi::MultiVecTraits<double,Epetra_MultiVector>::" 754 "CloneCopy(mv, index = {";
755 for (
int k = 0; k < outNumVecs - 1; ++k)
756 os << index[k] <<
", ";
757 os << index[outNumVecs-1] <<
"}): There are " << outNumVecs
758 <<
" indices to copy, but only " << inNumVecs <<
" columns of mv.";
766 const int minIndex = *std::min_element (index.begin(), index.end());
767 const int maxIndex = *std::max_element (index.begin(), index.end());
771 std::ostringstream os;
772 os <<
"Anasazi::MultiVecTraits<double,Epetra_MultiVector>::" 773 "CloneCopy(mv, index = {";
774 for (
int k = 0; k < outNumVecs - 1; ++k)
775 os << index[k] <<
", ";
776 os << index[outNumVecs-1] <<
"}): Indices must be nonnegative, but " 777 "the smallest index " << minIndex <<
" is negative.";
780 if (maxIndex >= inNumVecs)
782 std::ostringstream os;
783 os <<
"Anasazi::MultiVecTraits<double,Epetra_MultiVector>::" 784 "CloneCopy(mv, index = {";
785 for (
int k = 0; k < outNumVecs - 1; ++k)
786 os << index[k] <<
", ";
787 os << index[outNumVecs-1] <<
"}): Indices must be strictly less than " 788 "the number of vectors " << inNumVecs <<
" in mv; the largest index " 789 << maxIndex <<
" is out of bounds.";
792 #endif // TEUCHOS_DEBUG 796 std::vector<int>& tmpind =
const_cast< std::vector<int>&
> (index);
804 const int outNumVecs = index.
size();
805 const bool validRange = outNumVecs > 0 && index.
lbound() >= 0 &&
806 index.
ubound() < inNumVecs;
809 std::ostringstream os;
810 os <<
"Anasazi::MultiVecTraits<double,Epetra_MultiVector>::Clone(mv," 811 "index=[" << index.
lbound() <<
", " << index.
ubound() <<
"]): ";
813 os.str() <<
"Column index range must be nonempty.");
815 os.str() <<
"Column index range must be nonnegative.");
817 os.str() <<
"Column index range must not exceed " 818 "number of vectors " << inNumVecs <<
" in the " 819 "input multivector.");
833 const int outNumVecs = index.size();
837 "Anasazi::MultiVecTraits<double,Epetra_MultiVector>::" 838 "CloneViewNonConst(mv, index = {}): The output view " 839 "must have at least one column.");
840 if (outNumVecs > inNumVecs)
842 std::ostringstream os;
843 os <<
"Anasazi::MultiVecTraits<double,Epetra_MultiVector>::" 844 "CloneViewNonConst(mv, index = {";
845 for (
int k = 0; k < outNumVecs - 1; ++k)
846 os << index[k] <<
", ";
847 os << index[outNumVecs-1] <<
"}): There are " << outNumVecs
848 <<
" indices to view, but only " << inNumVecs <<
" columns of mv.";
856 const int minIndex = *std::min_element (index.begin(), index.end());
857 const int maxIndex = *std::max_element (index.begin(), index.end());
861 std::ostringstream os;
862 os <<
"Anasazi::MultiVecTraits<double,Epetra_MultiVector>::" 863 "CloneViewNonConst(mv, index = {";
864 for (
int k = 0; k < outNumVecs - 1; ++k)
865 os << index[k] <<
", ";
866 os << index[outNumVecs-1] <<
"}): Indices must be nonnegative, but " 867 "the smallest index " << minIndex <<
" is negative.";
870 if (maxIndex >= inNumVecs)
872 std::ostringstream os;
873 os <<
"Anasazi::MultiVecTraits<double,Epetra_MultiVector>::" 874 "CloneViewNonConst(mv, index = {";
875 for (
int k = 0; k < outNumVecs - 1; ++k)
876 os << index[k] <<
", ";
877 os << index[outNumVecs-1] <<
"}): Indices must be strictly less than " 878 "the number of vectors " << inNumVecs <<
" in mv; the largest index " 879 << maxIndex <<
" is out of bounds.";
882 #endif // TEUCHOS_DEBUG 886 std::vector<int>& tmpind =
const_cast< std::vector<int>&
> (index);
893 const bool validRange = index.
size() > 0 &&
898 std::ostringstream os;
899 os <<
"Anasazi::MultiVecTraits<double,Epetra_MultiVector>::CloneView" 900 "NonConst(mv,index=[" << index.
lbound() <<
", " << index.
ubound()
903 os.str() <<
"Column index range must be nonempty.");
905 os.str() <<
"Column index range must be nonnegative.");
907 std::invalid_argument,
908 os.str() <<
"Column index range must not exceed " 909 "number of vectors " << mv.
NumVectors() <<
" in " 910 "the input multivector.");
924 const int outNumVecs = index.size();
928 "Belos::MultiVecTraits<double,Epetra_MultiVector>::" 929 "CloneView(mv, index = {}): The output view " 930 "must have at least one column.");
931 if (outNumVecs > inNumVecs)
933 std::ostringstream os;
934 os <<
"Belos::MultiVecTraits<double,Epetra_MultiVector>::" 935 "CloneView(mv, index = {";
936 for (
int k = 0; k < outNumVecs - 1; ++k)
937 os << index[k] <<
", ";
938 os << index[outNumVecs-1] <<
"}): There are " << outNumVecs
939 <<
" indices to view, but only " << inNumVecs <<
" columns of mv.";
947 const int minIndex = *std::min_element (index.begin(), index.end());
948 const int maxIndex = *std::max_element (index.begin(), index.end());
952 std::ostringstream os;
953 os <<
"Belos::MultiVecTraits<double,Epetra_MultiVector>::" 954 "CloneView(mv, index = {";
955 for (
int k = 0; k < outNumVecs - 1; ++k)
956 os << index[k] <<
", ";
957 os << index[outNumVecs-1] <<
"}): Indices must be nonnegative, but " 958 "the smallest index " << minIndex <<
" is negative.";
961 if (maxIndex >= inNumVecs)
963 std::ostringstream os;
964 os <<
"Belos::MultiVecTraits<double,Epetra_MultiVector>::" 965 "CloneView(mv, index = {";
966 for (
int k = 0; k < outNumVecs - 1; ++k)
967 os << index[k] <<
", ";
968 os << index[outNumVecs-1] <<
"}): Indices must be strictly less than " 969 "the number of vectors " << inNumVecs <<
" in mv; the largest index " 970 << maxIndex <<
" is out of bounds.";
973 #endif // TEUCHOS_DEBUG 977 std::vector<int>& tmpind =
const_cast< std::vector<int>&
> (index);
984 const bool validRange = index.
size() > 0 &&
989 std::ostringstream os;
990 os <<
"Anasazi::MultiVecTraits<double,Epetra_MultiVector>::CloneView" 991 "(mv,index=[" << index.
lbound() <<
", " << index.
ubound()
994 os.str() <<
"Column index range must be nonempty.");
996 os.str() <<
"Column index range must be nonnegative.");
998 std::invalid_argument,
999 os.str() <<
"Column index range must not exceed " 1000 "number of vectors " << mv.
NumVectors() <<
" in " 1001 "the input multivector.");
1015 return static_cast<ptrdiff_t>( mv.GlobalLength64() );
1041 "Anasazi::MultiVecTraits<double, Epetra_MultiVector>::MvTimesMatAddMv call to Epetra_MultiVector::Multiply() returned a nonzero value.");
1080 "Anasazi::MultiVecTraits<double, Epetra_MultiVector>::MvAddMv call to Epetra_MultiVector::Update(alpha,A,0.0) returned a nonzero value.");
1083 else if (alpha == 0.0) {
1091 "Anasazi::MultiVecTraits<double, Epetra_MultiVector>::MvAddMv call to Epetra_MultiVector::Update(beta,B,0.0) returned a nonzero value.");
1097 "Anasazi::MultiVecTraits<double, Epetra_MultiVector>::MvAddMv call to Epetra_MultiVector::Update(alpha,A,beta,B,0.0) returned a nonzero value.");
1104 #ifdef HAVE_ANASAZI_EXPERIMENTAL
1110 Epetra_MultiVector B_Pvec(Epetra_DataAccess::View, LocalMap, B.values(), B.stride(), B.numCols());
1113 "Anasazi::MultiVecTraits<double, Epetra_MultiVector>::MvTransMv call to Epetra_MultiVector::Multiply() returned a nonzero value.");
1119 #ifdef HAVE_ANASAZI_EXPERIMENTAL
1124 #ifdef TEUCHOS_DEBUG 1126 "Anasazi::MultiVecTraits<double,Epetra_MultiVector>::MvDot(A,B,b): A and B must have the same number of vectors.");
1128 "Anasazi::MultiVecTraits<double,Epetra_MultiVector>::MvDot(A,B,b): b must have room for all dot products.");
1131 "Anasazi::MultiVecTraits<double, Epetra_MultiVector>::MvDot(A,B,b) call to Epetra_MultiVector::Dot() returned a nonzero value.");
1143 #ifdef TEUCHOS_DEBUG 1145 "Anasazi::MultiVecTraits<double,Epetra_MultiVector>::MvNorm(mv,normvec): normvec must be the same size of mv.");
1148 "Anasazi::MultiVecTraits<double, Epetra_MultiVector>::MvNorm call to Epetra_MultiVector::Norm2() returned a nonzero value.");
1159 const std::vector<int>& index,
1163 const int outNumVecs = index.size();
1171 if (inNumVecs != outNumVecs)
1173 std::ostringstream os;
1174 os <<
"Belos::MultiVecTraits<double,Epetra_MultiVector>::" 1175 "SetBlock(A, mv, index = {";
1178 for (
int k = 0; k < outNumVecs - 1; ++k)
1179 os << index[k] <<
", ";
1180 os << index[outNumVecs-1];
1182 os <<
"}): A has only " << inNumVecs <<
" columns, but there are " 1183 << outNumVecs <<
" indices in the index vector.";
1193 if (outNumVecs == inNumVecs)
1194 A_view = Teuchos::rcpFromRef (A);
1216 const bool validIndex = index.
lbound() >= 0 && index.
ubound() < numColsMv;
1218 const bool validSource = index.
size() <= numColsA;
1220 if (! validIndex || ! validSource)
1222 std::ostringstream os;
1223 os <<
"Anasazi::MultiVecTraits<double, Epetra_MultiVector>::SetBlock" 1224 "(A, index=[" << index.
lbound() <<
", " << index.
ubound() <<
"], " 1227 os.str() <<
"Range lower bound must be nonnegative.");
1229 os.str() <<
"Range upper bound must be less than " 1230 "the number of columns " << numColsA <<
" in the " 1231 "'mv' output argument.");
1233 os.str() <<
"Range must have no more elements than" 1234 " the number of columns " << numColsA <<
" in the " 1235 "'A' input argument.");
1244 if (index.
lbound() == 0 && index.
ubound()+1 == numColsMv)
1245 mv_view = Teuchos::rcpFromRef (mv);
1253 if (index.
size() == numColsA)
1254 A_view = Teuchos::rcpFromRef (A);
1274 if (numColsA > numColsMv)
1276 std::ostringstream os;
1277 os <<
"Anasazi::MultiVecTraits<double, Epetra_MultiVector>::Assign" 1280 os.str() <<
"Input multivector 'A' has " 1281 << numColsA <<
" columns, but output multivector " 1282 "'mv' has only " << numColsMv <<
" columns.");
1287 if (numColsMv == numColsA)
1288 mv_view = Teuchos::rcpFromRef (mv);
1307 "Anasazi::MultiVecTraits<double, Epetra_MultiVector>::MvScale call to Epetra_MultiVector::Scale(mv,double alpha) returned a nonzero value.");
1316 #ifdef TEUCHOS_DEBUG 1318 "Anasazi::MultiVecTraits<double, Epetra_MultiVector>::MvScale(mv,vector alpha): size of alpha inconsistent with number of vectors in mv.")
1320 for (
int i=0; i<numvecs; i++) {
1322 "Anasazi::MultiVecTraits<double, Epetra_MultiVector>::MvScale call to Epetra_MultiVector::Scale() returned a nonzero value.");
1331 "Anasazi::MultiVecTraits<double, Epetra_MultiVector>::MvRandom call to Epetra_MultiVector::Random() returned a nonzero value.");
1339 "Anasazi::MultiVecTraits<double, Epetra_MultiVector>::MvInit call to Epetra_MultiVector::PutScalar() returned a nonzero value.");
1350 { os << mv << std::endl; }
1354 #if defined(HAVE_ANASAZI_TPETRA) && defined(HAVE_ANASAZI_TSQR) 1355 # if defined(HAVE_TPETRA_EPETRA) 1356 typedef Epetra::TsqrAdaptor tsqr_adaptor_type;
1362 # endif // defined(HAVE_TPETRA_EPETRA) 1363 #endif // defined(HAVE_ANASAZI_TPETRA) && defined(HAVE_ANASAZI_TSQR) 1395 #ifdef TEUCHOS_DEBUG 1397 "Anasazi::OperatorTraits<double,Epetra_MultiVector,Epetra_Operator>::Apply(Op,x,y): x and y must have the same number of columns.");
1399 int ret = Op.
Apply(x,y);
1401 "Anasazi::OperatorTraits<double,Epetra_Multivector,Epetra_Operator>::Apply(): Error in Epetra_Operator::Apply(). Code " << ret);
int Norm2(double *Result) const
void MvRandom()
Fill the vectors in *this with random numbers.
const Epetra_BlockMap & Map() const
int Dot(const Epetra_MultiVector &A, double *Result) const
Adapter class for creating an operators often used in solving generalized eigenproblems.
EpetraMultiVecAccessor is an interfaceto allow any Anasazi::MultiVec implementation that is based on ...
const Epetra_Comm & Comm() const
Returns the Epetra_Comm communicator associated with this operator.
ScalarType * values() const
bool ConstantStride() const
static void MvAddMv(double alpha, const Epetra_MultiVector &A, double beta, const Epetra_MultiVector &B, Epetra_MultiVector &mv)
Replace mv with .
void MvInit(double alpha)
Replace each element of the vectors in *this with alpha.
static void SetBlock(const Epetra_MultiVector &A, const std::vector< int > &index, Epetra_MultiVector &mv)
Copy the vectors in A to a set of vectors in mv indicated by the indices given in index...
virtual ~EpetraMultiVecAccessor()
Destructor.
~EpetraSymMVOp()
Destructor.
Adapter class for creating a weighted symmetric operator from an Epetra_MultiVector and Epetra_Operat...
ptrdiff_t GetGlobalLength() const
The number of rows in the multivector.
static void MvInit(Epetra_MultiVector &mv, double alpha=Teuchos::ScalarTraits< double >::zero())
Replace each element of the vectors in mv with alpha.
int PutScalar(double ScalarConstant)
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
~EpetraWSymMVOp()
Destructor.
Virtual base class which defines basic traits for the operator type.
const char * Label() const
Returns a character string describing the operator.
virtual Epetra_MultiVector * GetEpetraMultiVec()
Return the pointer to the Epetra_MultiVector object.
static void MvPrint(const Epetra_MultiVector &mv, std::ostream &os)
Print the mv multi-vector to the os output stream.
static void MvRandom(Epetra_MultiVector &mv)
Replace the vectors in mv with random vectors.
static void MvTransMv(double alpha, const Epetra_MultiVector &A, const Epetra_MultiVector &mv, Teuchos::SerialDenseMatrix< int, double > &B)
Compute a dense matrix B through the matrix-matrix multiply .
static void Assign(const MV &A, MV &mv)
mv := A
bool UseTranspose() const
Returns the current UseTranspose setting [always false for this operator].
An exception class parent to all Anasazi exceptions.
double NormInf() const
Returns the infinity norm of the global matrix [not functional for this operator].
Interface for multivectors used by Anasazi' linear solvers.
Namespace Anasazi contains the classes, structs, enums and utilities used by the Anasazi package...
Basic adapter class for Anasazi::Operator that uses Epetra_Operator.
static void MvDot(const Epetra_MultiVector &A, const Epetra_MultiVector &B, std::vector< double > &b)
Compute a vector b where the components are the individual dot-products of the i-th columns of A and ...
bool HasNormInf() const
Returns true if this object can provide an approximate inf-norm [always false for this operator]...
const Epetra_Map & OperatorRangeMap() const
Returns the Epetra_Map object associated with the range of this operator.
virtual int Apply(const Epetra_MultiVector &X, Epetra_MultiVector &Y) const=0
double NormInf() const
Returns the infinity norm of the global matrix [not functional for this operator].
int Scale(double ScalarValue)
const Epetra_Comm & Comm() const
Returns the Epetra_Comm communicator associated with this operator.
ConjType
Enumerated types used to specify conjugation arguments.
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
OrdinalType numRows() const
bool UseTranspose() const
Returns the current UseTranspose setting [always false for this operator].
static Teuchos::RCP< Epetra_MultiVector > CloneCopy(const Epetra_MultiVector &mv, const std::vector< int > &index)
Creates a new Epetra_MultiVector and copies the selected contents of mv into the new vector (deep cop...
Epetra_MultiVector * GetEpetraMultiVec()
Return the pointer to the Epetra_MultiVector object.
int GetNumberVecs() const
The number of vectors (i.e., columns) in the multivector.
const char * Label() const
Returns a character string describing the operator.
const Epetra_Map & OperatorRangeMap() const
Returns the Epetra_Map object associated with the range of this operator.
static void MvScale(Epetra_MultiVector &mv, const std::vector< double > &alpha)
Scale each element of the i-th vector in mv with alpha[i].
static void MvTimesMatAddMv(double alpha, const Epetra_MultiVector &A, const Teuchos::SerialDenseMatrix< int, double > &B, double beta, Epetra_MultiVector &mv)
Update mv with .
Traits class which defines basic operations on multivectors.
static Teuchos::RCP< MV > CloneCopy(const MV &mv)
Creates a new MV and copies contents of mv into the new vector (deep copy).
static Teuchos::RCP< const Epetra_MultiVector > CloneView(const Epetra_MultiVector &mv, const std::vector< int > &index)
Creates a new const Epetra_MultiVector that shares the selected contents of mv (shallow copy)...
Adapter class for creating a weighted operator from an Epetra_MultiVector and Epetra_Operator.
virtual const Epetra_MultiVector * GetEpetraMultiVec() const
Return the pointer to the Epetra_MultiVector object.
const Epetra_Map & OperatorDomainMap() const
Returns the Epetra_Map object associated with the domain of this operator.
const Epetra_Comm & Comm() const
static Teuchos::RCP< Epetra_MultiVector > Clone(const Epetra_MultiVector &mv, const int outNumVecs)
Creates a new empty Epetra_MultiVector containing numVecs columns.
Anasazi header file which uses auto-configuration information to include necessary C++ headers...
void MvPrint(std::ostream &os) const
Print *this EpetraMultiVec.
static Teuchos::RCP< MV > CloneViewNonConst(MV &mv, const std::vector< int > &index)
Creates a new MV that shares the selected contents of mv (shallow copy).
static ptrdiff_t GetGlobalLength(const Epetra_MultiVector &mv)
Obtain the vector length of mv.
int SetUseTranspose(bool)
If set true, the transpose of this operator will be applied [not functional for this operator]...
Adapter class for creating a symmetric operator from an Epetra_Operator.
static Teuchos::RCP< const MV > CloneView(const MV &mv, const std::vector< int > &index)
Creates a new const MV that shares the selected contents of mv (shallow copy).
const Epetra_MultiVector * GetEpetraMultiVec() const
Return the pointer to the Epetra_MultiVector object.
void MvScale(double alpha)
Scale each element of the vectors in *this with alpha.
static void MvScale(Epetra_MultiVector &mv, double alpha)
Scale each element of the vectors in mv with alpha.
static void SetBlock(const MV &A, const std::vector< int > &index, MV &mv)
Copy the vectors in A to a set of vectors in mv indicated by the indices given in index...
static void Apply(const Epetra_Operator &Op, const Epetra_MultiVector &x, Epetra_MultiVector &y)
This method takes the Epetra_MultiVector x and applies the Epetra_Operator Op to it resulting in the ...
~EpetraW2SymMVOp()
Destructor.
static int GetNumberVecs(const MV &mv)
Obtain the number of vectors in mv.
int Update(double ScalarA, const Epetra_MultiVector &A, double ScalarThis)
Templated virtual class for creating operators that can interface with the Anasazi::OperatorTraits cl...
int Multiply(char TransA, char TransB, double ScalarAB, const Epetra_MultiVector &A, const Epetra_MultiVector &B, double ScalarThis)
static Teuchos::RCP< Epetra_MultiVector > CloneViewNonConst(Epetra_MultiVector &mv, const std::vector< int > &index)
Creates a new Epetra_MultiVector that shares the selected contents of mv (shallow copy)...
void MvNorm(std::vector< double > &normvec) const
Compute the 2-norm of each individual vector of *this. Upon return, normvec[i] holds the 2-norm of t...
EpetraMultiVecFailure is thrown when a return value from an Epetra call on an Epetra_MultiVector is n...
Types and exceptions used within Anasazi solvers and interfaces.
OrdinalType stride() const
OrdinalType numCols() const
bool GlobalIndicesLongLong() const
Interface for multivectors used by Anasazi's linear solvers.
Adapter class for creating a symmetric operator from an Epetra_MultiVector.
static void MvNorm(const Epetra_MultiVector &mv, std::vector< double > &normvec)
Compute the 2-norm of each individual vector of mv. Upon return, normvec[i] holds the value of ...
static int GetNumberVecs(const Epetra_MultiVector &mv)
Obtain the number of vectors in mv.
static Teuchos::RCP< Epetra_MultiVector > CloneCopy(const Epetra_MultiVector &mv)
Creates a new Epetra_MultiVector and copies contents of mv into the new vector (deep copy)...
Anasazi's templated virtual class for constructing an operator that can interface with the OperatorTr...
virtual ~EpetraMultiVec()
Destructor.
int SetUseTranspose(bool)
If set true, the transpose of this operator will be applied [not functional for this operator]...
EpetraOpFailure is thrown when a return value from an Epetra call on an Epetra_Operator is non-zero...
Exceptions thrown to signal error in operator application.
const Epetra_Map & OperatorDomainMap() const
Returns the Epetra_Map object associated with the domain of this operator.
Basic adapter class for Anasazi::MultiVec that uses Epetra_MultiVector.
bool HasNormInf() const
Returns true if this object can provide an approximate inf-norm [always false for this operator]...