47 #ifndef __Teko_TpetraHelpers_hpp__
48 #define __Teko_TpetraHelpers_hpp__
53 #include "Teko_ConfigDefs.hpp"
55 #ifdef TEKO_HAVE_EPETRA
57 #include "Epetra_Operator.h"
58 #include "Epetra_CrsMatrix.h"
59 #include "Epetra_MultiVector.h"
63 #include "Teuchos_RCP.hpp"
66 #include "Thyra_VectorBase.hpp"
67 #include "Thyra_TpetraMultiVector.hpp"
68 #include "Thyra_DefaultSpmdMultiVector.hpp"
71 #include "Tpetra_Map.hpp"
72 #include "Tpetra_Vector.hpp"
73 #include "Tpetra_CrsMatrix.hpp"
77 typedef Teuchos::RCP<const Thyra::LinearOpBase<double> > LinearOp;
79 namespace TpetraHelpers {
90 void fillDefaultSpmdMultiVector(Teuchos::RCP<Thyra::TpetraMultiVector<ST, LO, GO, NT> >& spmdMV,
91 Teuchos::RCP<Tpetra::MultiVector<ST, LO, GO, NT> >& tpetraMV);
103 const Teuchos::RCP<const Thyra::LinearOpBase<ST> > thyraDiagOp(
104 const Teuchos::RCP<
const Tpetra::Vector<ST, LO, GO, NT> >& tv,
105 const Tpetra::Map<LO, GO, NT>& map,
const std::string& lbl =
"ANYM");
117 const Teuchos::RCP<Thyra::LinearOpBase<ST> > thyraDiagOp(
118 const Teuchos::RCP<Tpetra::Vector<ST, LO, GO, NT> >& tv,
const Tpetra::Map<LO, GO, NT>& map,
119 const std::string& lbl =
"ANYM");
130 void identityRowIndices(
const Tpetra::Map<LO, GO, NT>& rowMap,
131 const Tpetra::CrsMatrix<ST, LO, GO, NT>& mat, std::vector<GO>& outIndices);
143 void zeroMultiVectorRowIndices(Tpetra::MultiVector<ST, LO, GO, NT>& mv,
144 const std::vector<GO>& zeroIndices);
148 bool isTpetraLinearOp(
const Teko::LinearOp& op);
159 Teuchos::RCP<const Tpetra::CrsMatrix<ST, LO, GO, NT> > getTpetraCrsMatrix(
const Teko::LinearOp& op,
160 ST* scalar,
bool* transp);
162 #ifdef TEKO_HAVE_EPETRA
171 Teuchos::RCP<const Tpetra::CrsMatrix<ST, LO, GO, NT> > epetraCrsMatrixToTpetra(
172 const Teuchos::RCP<const Epetra_CrsMatrix> A_e,
173 const Teuchos::RCP<
const Teuchos::Comm<int> > comm);
175 Teuchos::RCP<Tpetra::CrsMatrix<ST, LO, GO, NT> > nonConstEpetraCrsMatrixToTpetra(
176 const Teuchos::RCP<Epetra_CrsMatrix> A_e,
const Teuchos::RCP<
const Teuchos::Comm<int> > comm);
178 Teuchos::RCP<const Tpetra::Map<LO, GO, NT> > epetraMapToTpetra(
179 const Epetra_Map eMap,
const Teuchos::RCP<
const Teuchos::Comm<int> > comm);
180 #endif // TEKO_HAVE_EPETRA
197 const Teuchos::RCP<
const Tpetra::Operator<ST, LO, GO, NT> >& op);
209 void apply(
const Tpetra::MultiVector<ST, LO, GO, NT>& X, Tpetra::MultiVector<ST, LO, GO, NT>& Y,
210 Teuchos::ETransp mode = Teuchos::NO_TRANS, ST alpha = Teuchos::ScalarTraits<ST>::one(),
211 ST beta = Teuchos::ScalarTraits<ST>::zero())
const;
215 Tpetra::MultiVector<ST, LO, GO, NT>& ,
216 Teuchos::ETransp = Teuchos::NO_TRANS,
217 ST = Teuchos::ScalarTraits<ST>::one(),
218 ST = Teuchos::ScalarTraits<ST>::zero())
const {
219 TEUCHOS_TEST_FOR_EXCEPTION(
true, std::runtime_error,
220 "Can't call applyInverse on a ZeroedOperator");
224 double NormInf()
const {
return -1.0; }
227 bool UseTranspose()
const {
return false; }
230 bool HasNormInf()
const {
return false; }
233 Teuchos::RCP<const Tpetra::Map<LO, GO, NT> > getDomainMap()
const {
234 return tpetraOp_->getDomainMap();
238 Teuchos::RCP<const Tpetra::Map<LO, GO, NT> > getRangeMap()
const {
239 return tpetraOp_->getRangeMap();
245 std::vector<GO> zeroIndices_;
246 const Teuchos::RCP<const Tpetra::Operator<ST, LO, GO, NT> > tpetraOp_;
void apply(const Tpetra::MultiVector< ST, LO, GO, NT > &X, Tpetra::MultiVector< ST, LO, GO, NT > &Y, Teuchos::ETransp mode=Teuchos::NO_TRANS, ST alpha=Teuchos::ScalarTraits< ST >::one(), ST beta=Teuchos::ScalarTraits< ST >::zero()) const
Perform a matrix-vector product with certain rows zeroed out.
int SetUseTranspose(bool)
Can't transpose a ZeroedOperator.
ZeroedOperator(const std::vector< GO > &zeroIndices, const Teuchos::RCP< const Tpetra::Operator< ST, LO, GO, NT > > &op)
Constructor for a ZeroedOperator.
void applyInverse(const Tpetra::MultiVector< ST, LO, GO, NT > &, Tpetra::MultiVector< ST, LO, GO, NT > &, Teuchos::ETransp=Teuchos::NO_TRANS, ST=Teuchos::ScalarTraits< ST >::one(), ST=Teuchos::ScalarTraits< ST >::zero()) const
Can't call ApplyInverse on a zeroed operator.
virtual ~ZeroedOperator()
Do nothing destructor.