55 ,
const Teuchos::RCP<const Epetra_Operator> op[]
56 ,
const Teuchos::ETransp opTrans[]
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() );
91 ,Teuchos::RCP<const Epetra_Operator> op[]
92 ,Teuchos::ETransp opTrans[]
97 TEUCHOS_TEST_FOR_EXCEPTION(
98 (op != NULL || opTrans != NULL || opInverse!=NULL) && numOp==NULL
99 ,std::invalid_argument
100 ,
"ProductOperator::uninitialize(...): Error!"
105 if(op) std::copy(
Op_.begin(),
Op_.end(), op );
119 ,Teuchos::ETransp opTrans
129 const int err = ! applyInverse_k ?
Op_[k]->Apply(X_k,*Y_k) :
Op_[k]->ApplyInverse(X_k,*Y_k);
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() = "<<
150 const int numOp = this->
num_Op();
158 for(
int k = numOp-1; k >= 0; --k ) {
168 for(
int k = 0; k <= numOp-1; ++k ) {
180 const int numOp = this->
num_Op();
188 for(
int k = 0; k <= numOp-1; ++k ) {
198 for(
int k = numOp-1; k >= 0; --k ) {
235 return Op_.front()->OperatorRangeMap().Comm();
242 return (
Op_trans_.back()==Teuchos::NO_TRANS
243 ?
Op_.back()->OperatorDomainMap()
244 :
Op_.back()->OperatorRangeMap()
252 return (
Op_trans_.front()==Teuchos::NO_TRANS
253 ?
Op_.front()->OperatorRangeMap()
254 :
Op_.front()->OperatorDomainMap()
262 const int numOp = this->
num_Op ();
283 for (
int k = numOp-1; k >= 1; --k) {
308 for (
int k = 0; k <= numOp - 2; ++k) {