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()
                                         );
}
示例#3
0
文件: wciSession.cpp 项目: metno/wdb
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);
}
示例#4
0
文件: wciSession.cpp 项目: metno/wdb
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();
 }