47 #ifndef __Teko_EpetraHelpers_hpp__
48 #define __Teko_EpetraHelpers_hpp__
54 #include "Epetra_Operator.h"
55 #include "Epetra_CrsMatrix.h"
56 #include "Epetra_MultiVector.h"
59 #include "Teuchos_RCP.hpp"
62 #include "Thyra_VectorBase.hpp"
63 #include "Thyra_DefaultSpmdMultiVector.hpp"
78 void fillDefaultSpmdMultiVector(Teuchos::RCP<Thyra::DefaultSpmdMultiVector<double> >& spmdMV,
79 Teuchos::RCP<Epetra_MultiVector>& epetraMV);
91 const Teuchos::RCP<const Thyra::LinearOpBase<double> > thyraDiagOp(
92 const Teuchos::RCP<const Epetra_Vector>& ev,
const Epetra_Map& map,
93 const std::string& lbl =
"ANYM");
105 const Teuchos::RCP<Thyra::LinearOpBase<double> > thyraDiagOp(
const Teuchos::RCP<Epetra_Vector>& ev,
106 const Epetra_Map& map,
107 const std::string& lbl =
"ANYM");
118 void identityRowIndices(
const Epetra_Map& rowMap,
const Epetra_CrsMatrix& mat,
119 std::vector<int>& outIndices);
131 void zeroMultiVectorRowIndices(Epetra_MultiVector& mv,
const std::vector<int>& zeroIndices);
148 const Teuchos::RCP<const Epetra_Operator>& op);
160 int Apply(
const Epetra_MultiVector& X, Epetra_MultiVector& Y)
const;
163 int ApplyInverse(
const Epetra_MultiVector& , Epetra_MultiVector& )
const {
168 double NormInf()
const {
return -1.0; }
171 const char* Label()
const {
return label_.c_str(); }
174 bool UseTranspose()
const {
return false; }
177 bool HasNormInf()
const {
return false; }
180 const Epetra_Comm& Comm()
const {
return epetraOp_->Comm(); }
183 const Epetra_Map& OperatorDomainMap()
const {
return epetraOp_->OperatorDomainMap(); }
186 const Epetra_Map& OperatorRangeMap()
const {
return epetraOp_->OperatorRangeMap(); }
191 std::vector<int> zeroIndices_;
192 const Teuchos::RCP<const Epetra_Operator> epetraOp_;
int SetUseTranspose(bool)
Can't transpose a ZeroedOperator.
int ApplyInverse(const Epetra_MultiVector &, Epetra_MultiVector &) const
Can't call ApplyInverse on a zeroed operator.
ZeroedOperator(const std::vector< int > &zeroIndices, const Teuchos::RCP< const Epetra_Operator > &op)
Constructor for a ZeroedOperator.
int Apply(const Epetra_MultiVector &X, Epetra_MultiVector &Y) const
Perform a matrix-vector product with certain rows zeroed out.
virtual ~ZeroedOperator()
Do nothing destructor.