int ProductOperator::ApplyInverse(const Epetra_MultiVector& X, Epetra_MultiVector& Y) const { assertInitialized(); const int numOp = this->num_Op(); // Setup the temporary vectors initializeTempVecs(true); // Apply the constituent operators one at a time! if( !UseTranspose_ ) { // // Forward Inverse Mat-vec: Y = inv(M) * X (See main documenation) // for( int k = 0; k <= numOp-1; ++k ) { const Epetra_MultiVector &X_k = ( k==0 ? X : *domain_vecs_[k-1] ); Epetra_MultiVector &Y_k = ( k==numOp-1 ? Y : *domain_vecs_[k] ); applyConstituent(k,Teuchos::NO_TRANS,APPLY_MODE_APPLY_INVERSE,X_k,&Y_k); } } else if( UseTranspose_ ) { // // Adjoint Invese Mat-vec: Y = inv(M') * X (See main documentation) // for( int k = numOp-1; k >= 0; --k ) { const Epetra_MultiVector &X_k = ( k==numOp-1 ? X : *range_vecs_[k] ); Epetra_MultiVector &Y_k = ( k==0 ? Y : *range_vecs_[k-1] ); applyConstituent(k,Teuchos::TRANS,APPLY_MODE_APPLY_INVERSE,X_k,&Y_k); } } return 0; }
const Epetra_Map& ProductOperator::OperatorRangeMap() const { assertInitialized(); return ( Op_trans_.front()==Teuchos::NO_TRANS ? Op_.front()->OperatorRangeMap() : Op_.front()->OperatorDomainMap() ); }
Datum wciSession_user(PG_FUNCTION_ARGS) { const WciSession & s = WciSession::get(); assertInitialized(s); const std::string & u = s.user(); int32 size = VARHDRSZ + u.size() + 1; text * ret = (text *) palloc(size); SET_VARSIZE( ret, size); memcpy(VARDATA(ret), u.c_str(), size - VARHDRSZ); PG_RETURN_TEXT_P(ret); }
Datum wciSession_get(PG_FUNCTION_ARGS) { const WciSession & s = WciSession::get(); assertInitialized( s ); Datum ret = packSessionData( s.dataProviderNs(), s.placeNs(), s.parameterNs(), fcinfo ); return ret; }
const Epetra_Comm& ProductOperator::Comm() const { assertInitialized(); return Op_.front()->OperatorRangeMap().Comm(); }
bool ProductOperator::HasNormInf() const { assertInitialized(); return false; }
bool ProductOperator::UseTranspose() const { assertInitialized(); return UseTranspose_; }
const char* ProductOperator::Label() const { assertInitialized(); return NULL; }
double ProductOperator::NormInf() const { assertInitialized(); return -1.0; }
int ProductOperator::SetUseTranspose(bool useTranspose) { assertInitialized(); UseTranspose_ = useTranspose; return 0; }
/*! Check if the logging manager has already been initialized. * \deprecated Obsolete coding style. */ void LoggingManager::AssertInitialized() const { assertInitialized(); }