65 ,
const Teuchos::RCP<const Epetra_Operator> op[]
66 ,
const Teuchos::ETransp opTrans[]
71 TEUCHOS_TEST_FOR_EXCEPTION(
72 numOp < 1, std::invalid_argument
73 ,
"ProductOperator::initialize(...): Error!"
80 std::copy( op, op + numOp,
Op_.begin() );
81 std::copy( opTrans, opTrans + numOp,
Op_trans_.begin() );
82 std::copy( opInverse, opInverse + numOp,
Op_inverse_.begin() );
119 ,Teuchos::ETransp opTrans
127 Op_k.SetUseTranspose((opTrans==Teuchos::NO_TRANS) != (
Op_trans_[k]==Teuchos::NO_TRANS));
129 const int err = ! applyInverse_k ?
Op_[k]->Apply(X_k,*Y_k) :
Op_[k]->ApplyInverse(X_k,*Y_k);
130 Op_k.SetUseTranspose(oldUseTranspose);
131 TEUCHOS_TEST_FOR_EXCEPTION(
132 err!=0, std::runtime_error,
"ProductOperator::applyConstituent(...): Error,"
133 " Op["<<k<<
"]." << (!applyInverse_k?
"Apply":
"ApplyInverse") <<
"(...) "
134 "returned err = " << err <<
" with Op["<<k<<
"].UseTranspose() = "<<
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.
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.
int applyInverse(Epetra_CrsMatrix &A, Epetra_Vector &x, Epetra_Vector &b, Ifpack_CrsRiluk *M, bool verbose)