42 #ifndef EPETRAEXT_PRODUCT_OPERATOR_H 43 #define EPETRAEXT_PRODUCT_OPERATOR_H 45 #include "Epetra_Operator.h" 261 ,
const Epetra_MultiVector &X_k
262 ,Epetra_MultiVector *Y_k
309 int Apply(
const Epetra_MultiVector& X, Epetra_MultiVector& Y)
const;
311 int ApplyInverse(
const Epetra_MultiVector& X, Epetra_MultiVector& Y)
const;
315 const char *
Label()
const;
321 const Epetra_Comm &
Comm()
const;
334 typedef std::vector<Teuchos::RCP<const Epetra_Operator> >
Op_t;
337 typedef std::vector<Teuchos::RCP<Epetra_Vector> >
EV_t;
401 Op_.size()==0, std::logic_error
402 ,
"Epetra::ProductOperator: Error, Client has not called initialize(...) yet!" 410 k < 0 || static_cast<int>(
Op_.size())-1 < k, std::logic_error
411 ,
"Epetra::ProductOperator: Error, k = "<<k<<
" is not in the range [0,"<<
Op_.size()-1<<
"]!" 417 #endif // EPETRAEXT_PRODUCT_OPERATOR_H
Teuchos::RCP< const Epetra_Operator > Op(int k) const
Access the kth operator (zero-based).
void applyConstituent(const int k, Teuchos::ETransp Op_trans, EApplyMode Op_inverse, const Epetra_MultiVector &X_k, Epetra_MultiVector *Y_k) const
Apply the kth aggregate operator M[k] correctly.
std::vector< Teuchos::ETransp > Op_trans_t
const Epetra_Map & OperatorDomainMap() const
const Epetra_Comm & Comm() const
int SetUseTranspose(bool UseTranspose)
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
void assertInitialized() const
void initialize(const int num_Op, const Teuchos::RCP< const Epetra_Operator > Op[], const Teuchos::ETransp Op_trans[], const EApplyMode Op_inverse[])
Setup with constituent operators.
Implements Epetra_Operator as a product of one or more Epetra_Operator objects.
ProductOperator()
Construct to uninitialized.
EApplyMode Op_inverse(int k) const
Access the inverse mode of the kth operator (zero-based).
EpetraExt::BlockCrsMatrix: A class for constructing a distributed block matrix.
int ApplyInverse(const Epetra_MultiVector &X, Epetra_MultiVector &Y) const
int num_Op() const
Return the number of aggregate opeators.
std::vector< EApplyMode > Op_inverse_t
int Apply(const Epetra_MultiVector &X, Epetra_MultiVector &Y) const
void initializeTempVecs(bool applyInverse) const
Teuchos::ETransp Op_trans(int k) const
Access the transpose mode of the kth operator (zero-based).
void uninitialize(int *num_Op, Teuchos::RCP< const Epetra_Operator > Op[], Teuchos::ETransp Op_trans[], EApplyMode p_inverse[])
Set to an uninitialized state and wipe out memory.
const char * Label() const
void validateIndex(int k) const
const Epetra_Map & OperatorRangeMap() const
std::vector< Teuchos::RCP< const Epetra_Operator > > Op_t
std::vector< Teuchos::RCP< Epetra_Vector > > EV_t
bool UseTranspose() const