47 #ifndef __Teko_StridedEpetraOperator_hpp__
48 #define __Teko_StridedEpetraOperator_hpp__
51 #include "Epetra_Operator.h"
54 #include "Teuchos_RCP.hpp"
56 #include "Thyra_LinearOpBase.hpp"
59 #include "Teko_BlockedReordering.hpp"
60 #include "Teko_EpetraOperatorWrapper.hpp"
61 #include "Teko_StridedMappingStrategy.hpp"
66 class StridedEpetraOperator :
public EpetraOperatorWrapper {
68 enum eNormType { Inf, One, Frobenius };
70 StridedEpetraOperator(
int numVars,
const Teuchos::RCP<const Epetra_Operator> &content,
71 const std::string &label =
"<ANYM>");
72 StridedEpetraOperator(
const std::vector<int> &vars,
73 const Teuchos::RCP<const Epetra_Operator> &content,
74 const std::string &label =
"<ANYM>");
76 virtual void SetContent(
const std::vector<int> &vars,
77 const Teuchos::RCP<const Epetra_Operator> &content);
79 virtual void RebuildOps() { BuildBlockedOperator(); }
81 virtual const Teuchos::RCP<const Epetra_Operator> GetContent()
const {
return fullContent_; }
86 const Teuchos::RCP<const Epetra_Operator> GetBlock(
int i,
int j)
const;
91 void Reorder(
const BlockReorderManager &brm);
94 void RemoveReording();
98 virtual void WriteBlocks(
const std::string &prefix)
const;
107 virtual std::string PrintNorm(
const eNormType &nrmType = Frobenius,
const char newline =
'\n');
113 virtual ~StridedEpetraOperator() {}
118 virtual int SetUseTranspose(
bool ) {
return -1; }
120 virtual int ApplyInverse(
const Epetra_MultiVector & , Epetra_MultiVector & )
const {
121 TEUCHOS_ASSERT(
false);
125 virtual double NormInf()
const {
126 TEUCHOS_ASSERT(
false);
131 virtual bool UseTranspose()
const {
return false; }
132 virtual bool HasNormInf()
const {
return false; }
133 virtual const Epetra_Comm &Comm()
const {
return fullContent_->Comm(); }
136 bool testAgainstFullOperator(
int count,
double tol)
const;
140 Teuchos::RCP<const Epetra_Operator> fullContent_;
141 Teuchos::RCP<StridedMappingStrategy> stridedMapping_;
142 Teuchos::RCP<Thyra::LinearOpBase<double> > stridedOperator_;
143 Teuchos::RCP<const BlockReorderManager> reorderManager_;
147 void BuildBlockedOperator();