10#include "Thyra_EpetraOperatorWrapper.hpp" 
   12#include "Thyra_DetachedSpmdVectorView.hpp" 
   13#include "Thyra_DefaultProductVector.hpp" 
   14#include "Thyra_ProductVectorSpaceBase.hpp" 
   15#include "Thyra_SpmdVectorBase.hpp" 
   16#include "Thyra_EpetraLinearOp.hpp" 
   19#  include "Epetra_MpiComm.h" 
   21#include "Epetra_SerialComm.h" 
   22#include "Epetra_Vector.h" 
   25#  include "Teuchos_DefaultMpiComm.hpp" 
   27#include "Teuchos_DefaultSerialComm.hpp" 
   39  : useTranspose_(false),
 
   41    range_(thyraOp->range()),
 
   42    domain_(thyraOp->domain()),
 
   43    comm_(getEpetraComm(*thyraOp)),
 
   46    label_(thyraOp->description())
 
 
   54  using Teuchos::rcpFromPtr;
 
   55  using Teuchos::rcp_dynamic_cast;
 
   60    "epetraToThyra does not work with MV dimension != 1");
 
   63    castOrCreateNonconstProductVectorBase(rcpFromPtr(thyraVec));
 
   71  const int numBlocks = prodThyraVec->productSpace()->numBlocks();
 
   72  for (
int b = 0; b < numBlocks; ++b) {
 
   75      rcp_dynamic_cast<const SpmdVectorSpaceBase<double> >(vec_b->space(), 
true);
 
   78    const int localNumElems = spmd_vs_b->localSubDim();
 
   79    for (
int i=0; i < localNumElems; ++i) {
 
   80      thyraData[i] = epetraData[i+offset];
 
   82    offset += localNumElems;
 
 
   92  using Teuchos::rcpFromRef;
 
   93  using Teuchos::rcp_dynamic_cast;
 
   98    "epetraToThyra does not work with MV dimension != 1");
 
  101    castOrCreateProductVectorBase(rcpFromRef(thyraVec));
 
  107  const int numBlocks = prodThyraVec->productSpace()->numBlocks();
 
  108  for (
int b = 0; b < numBlocks; ++b) {
 
  111      rcp_dynamic_cast<const SpmdVectorSpaceBase<double> >(vec_b->space(), 
true);
 
  114    const int localNumElems = spmd_vs_b->localSubDim();
 
  115    for (
int i=0; i < localNumElems; ++i) {
 
  116      epetraData[i+offset] = thyraData[i];
 
  118    offset += localNumElems;
 
 
  132    opRange = ( !useTranspose_ ? range_ : domain_ ),
 
  133    opDomain = ( !useTranspose_ ? domain_ : range_ );
 
 
  153    "EpetraOperatorWrapper::ApplyInverse not implemented");
 
 
  161    "EpetraOperatorWrapper::NormInf not implemated");
 
 
  174  using Teuchos::rcp_dynamic_cast;
 
  183    rcp_dynamic_cast<const ProductVectorSpaceBase<double> >(vs);
 
  185  if (nonnull(prod_vs))
 
  186    vs = prod_vs->getBlock(0);
 
  189    rcp_dynamic_cast<const SpmdVectorSpaceBase<double> >(vs, 
true);
 
  200Thyra::makeEpetraWrapper(
const RCP<
const LinearOpBase<double> > &thyraOp)
 
  202  return epetraLinearOp(
 
int NumMyElements() const
 
const Epetra_BlockMap & Map() const
 
Create an explicit detached non-mutable (const) view of all of the local elements on this process of ...
 
Create an explicit detached mutable (non-const) view of all of the local elements on this process of ...
 
void copyEpetraIntoThyra(const Epetra_MultiVector &x, const Ptr< VectorBase< double > > &thyraVec) const
 
int ApplyInverse(const Epetra_MultiVector &X, Epetra_MultiVector &Y) const
 
EpetraOperatorWrapper(const RCP< const LinearOpBase< double > > &thyraOp)
 
void copyThyraIntoEpetra(const VectorBase< double > &thyraVec, Epetra_MultiVector &x) const
 
int Apply(const Epetra_MultiVector &X, Epetra_MultiVector &Y) const
 
Base class for all linear operators.
 
virtual RCP< const VectorSpaceBase< Scalar > > range() const =0
Return a smart pointer for the range space for this operator.
 
Abstract interface for finite-dimensional dense vectors.
 
RCP< const Epetra_Comm > get_Epetra_Comm(const Teuchos::Comm< Ordinal > &comm)
Get (or create) and Epetra_Comm given a Teuchos::Comm object.
 
RCP< const Epetra_Map > get_Epetra_Map(const VectorSpaceBase< double > &vs, const RCP< const Epetra_Comm > &comm)
Get (or create) an Epetra_Map object given an VectorSpaceBase object an optionally an extra Epetra_Co...
 
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
 
@ NOTRANS
Use the non-transposed operator.
 
@ CONJTRANS
Use the transposed operator with complex-conjugate clements (same as TRANS for real scalar types).
 
#define TEUCHOS_UNREACHABLE_RETURN(dummyReturnVal)
 
T_To & dyn_cast(T_From &from)
 
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)