47 #ifndef __Teko_StridedTpetraOperator_hpp__
48 #define __Teko_StridedTpetraOperator_hpp__
51 #include "Tpetra_Operator.hpp"
54 #include "Teuchos_RCP.hpp"
56 #include "Thyra_LinearOpBase.hpp"
59 #include "Teko_BlockedReordering.hpp"
60 #include "Teko_TpetraOperatorWrapper.hpp"
61 #include "Teko_TpetraStridedMappingStrategy.hpp"
62 #include "Teko_ConfigDefs.hpp"
65 namespace TpetraHelpers {
67 class StridedTpetraOperator :
public TpetraOperatorWrapper {
69 enum eNormType { Inf, One, Frobenius };
71 StridedTpetraOperator(
int numVars,
72 const Teuchos::RCP<
const Tpetra::Operator<ST, LO, GO, NT> > &content,
73 const std::string &label =
"<ANYM>");
74 StridedTpetraOperator(
const std::vector<int> &vars,
75 const Teuchos::RCP<
const Tpetra::Operator<ST, LO, GO, NT> > &content,
76 const std::string &label =
"<ANYM>");
78 virtual void SetContent(
const std::vector<int> &vars,
79 const Teuchos::RCP<
const Tpetra::Operator<ST, LO, GO, NT> > &content);
81 virtual void RebuildOps() { BuildBlockedOperator(); }
83 virtual const Teuchos::RCP<const Tpetra::Operator<ST, LO, GO, NT> > GetContent()
const {
90 const Teuchos::RCP<const Tpetra::Operator<ST, LO, GO, NT> > GetBlock(
int i,
int j)
const;
95 void Reorder(
const BlockReorderManager &brm);
98 void RemoveReording();
102 virtual void WriteBlocks(
const std::string &prefix)
const;
111 virtual std::string PrintNorm(
const eNormType &nrmType = Frobenius,
const char newline =
'\n');
117 virtual ~StridedTpetraOperator() {}
122 virtual int SetUseTranspose(
bool ) {
return -1; }
124 virtual int applyInverse(
const Tpetra::MultiVector<ST, LO, GO, NT> & ,
125 Tpetra::MultiVector<ST, LO, GO, NT> & )
const {
126 TEUCHOS_ASSERT(
false);
130 virtual ST NormInf()
const {
131 TEUCHOS_ASSERT(
false);
136 virtual bool UseTranspose()
const {
return false; }
137 virtual bool HasNormInf()
const {
return false; }
138 virtual const Teuchos::Comm<int> &Comm()
const {
return *fullContent_->getRangeMap()->getComm(); }
141 bool testAgainstFullOperator(
int count, ST tol)
const;
145 Teuchos::RCP<const Tpetra::Operator<ST, LO, GO, NT> > fullContent_;
146 Teuchos::RCP<TpetraStridedMappingStrategy> stridedMapping_;
147 Teuchos::RCP<Thyra::LinearOpBase<ST> > stridedOperator_;
148 Teuchos::RCP<const BlockReorderManager> reorderManager_;
152 void BuildBlockedOperator();