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"
78void fillDefaultSpmdMultiVector(Teuchos::RCP<Thyra::DefaultSpmdMultiVector<double> > & spmdMV,
79 Teuchos::RCP<Epetra_MultiVector> & epetraMV);
91const Teuchos::RCP<const Thyra::LinearOpBase<double> > thyraDiagOp(
const Teuchos::RCP<const Epetra_Vector> & ev,
92 const Epetra_Map & map,
const std::string & lbl=
"ANYM");
104const Teuchos::RCP<Thyra::LinearOpBase<double> > thyraDiagOp(
const Teuchos::RCP<Epetra_Vector> & ev,
105 const Epetra_Map & map,
const std::string & lbl=
"ANYM");
116void identityRowIndices(
const Epetra_Map & rowMap,
const Epetra_CrsMatrix & mat,std::vector<int> & outIndices);
128void zeroMultiVectorRowIndices(Epetra_MultiVector & mv,
const std::vector<int> & zeroIndices);
144 ZeroedOperator(
const std::vector<int> & zeroIndices,
const Teuchos::RCP<const Epetra_Operator> & op);
156 int Apply(
const Epetra_MultiVector& X, Epetra_MultiVector& Y)
const;
159 int ApplyInverse(
const Epetra_MultiVector& , Epetra_MultiVector& )
const
163 double NormInf()
const {
return -1.0; }
166 const char* Label()
const {
return label_.c_str();}
169 bool UseTranspose()
const {
return false;}
172 bool HasNormInf()
const {
return false;}
175 const Epetra_Comm & Comm()
const {
return epetraOp_->Comm(); }
178 const Epetra_Map& OperatorDomainMap()
const {
return epetraOp_->OperatorDomainMap(); }
181 const Epetra_Map& OperatorRangeMap()
const {
return epetraOp_->OperatorRangeMap(); }
186 std::vector<int> zeroIndices_;
187 const Teuchos::RCP<const Epetra_Operator> epetraOp_;
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.
virtual ~ZeroedOperator()
Do nothing destructor.
int SetUseTranspose(bool)
Can't transpose a ZeroedOperator.
int Apply(const Epetra_MultiVector &X, Epetra_MultiVector &Y) const
Perform a matrix-vector product with certain rows zeroed out.