44 #include "Thyra_MultipliedLinearOpBase.hpp" 
   45 #include "Thyra_DiagonalLinearOpBase.hpp" 
   46 #include "Thyra_ScaledAdjointLinearOpBase.hpp" 
   50 #include "Epetra_Map.h" 
   51 #include "Epetra_LocalMap.h" 
   52 #include "Epetra_SerialComm.h" 
   53 #include "Epetra_CrsMatrix.h" 
   65       const LinearOpBase<double> &op_in)
 const 
   69    using Teuchos::rcp_dynamic_cast;
 
   72    const MultipliedLinearOpBase<double> &multi_op =
 
   73          dyn_cast<
const MultipliedLinearOpBase<double> >(op_in);
 
   76    if(multi_op.numOps()!=2)
 
   84    unwrap( multi_op.getOp(0), &scalar, &transp, &A );
 
   85    if(transp!=
NOTRANS) 
return false;
 
   89    unwrap( multi_op.getOp(1), &scalar, &transp, &B );
 
   90    if(transp!=
NOTRANS) 
return false;
 
   94       = rcp_dynamic_cast<
const DiagonalLinearOpBase<double> >(A);
 
   96       = rcp_dynamic_cast<
const DiagonalLinearOpBase<double> >(B);
 
  111    return nonconstEpetraLinearOp();
 
  116    const LinearOpBase<double> &op_in,
 
  117    const Ptr<LinearOpBase<double> > &op_inout)
 const 
  121    using Teuchos::rcp_dynamic_cast;
 
  128    const MultipliedLinearOpBase<double> &multi_op =
 
  129          dyn_cast<
const MultipliedLinearOpBase<double> >(op_in);
 
  135    double A_scalar = 0.0;
 
  138    unwrap( op_A, &A_scalar, &A_transp, &A );
 
  143    double B_scalar = 0.0;
 
  146    unwrap( op_B, &B_scalar, &B_transp, &B );
 
  155       = rcp_dynamic_cast<
const DiagonalLinearOpBase<double> >(A);
 
  157       = rcp_dynamic_cast<
const DiagonalLinearOpBase<double> >(B);
 
  162       bool exactly_one_op_must_be_diagonal__dB_neq_null = dB!=
Teuchos::null;
 
  169       bool exactly_one_op_must_be_diagonal__dA_neq_null = dA!=
Teuchos::null;
 
  176       bool exactly_one_op_must_be_diagonal=
false;
 
  187          rcp_dynamic_cast<Epetra_CrsMatrix>(thyra_epetra_op_inout.
epetra_op());
 
  197          epetra_op = 
Teuchos::rcp(
new Epetra_CrsMatrix(*epetra_A));
 
  199          *epetra_op = *epetra_A;
 
  200       epetra_op->RightScale(*v);
 
  208          epetra_op = 
Teuchos::rcp(
new Epetra_CrsMatrix(*epetra_B));
 
  210          *epetra_op = *epetra_B;
 
  211       epetra_op->LeftScale(*v);
 
  214    epetra_op->Scale(A_scalar*B_scalar);
 
Concrete LinearOpBase adapter subclass for Epetra_Operator object. 
 
void initialize(const RCP< Epetra_Operator > &op, EOpTransp opTrans=NOTRANS, EApplyEpetraOpAs applyAs=EPETRA_OP_APPLY_APPLY, EAdjointEpetraOp adjointSupport=EPETRA_OP_ADJOINT_SUPPORTED, const RCP< const VectorSpaceBase< double > > &range=Teuchos::null, const RCP< const VectorSpaceBase< double > > &domain=Teuchos::null)
Fully initialize. 
 
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
 
T_To & dyn_cast(T_From &from)
 
RCP< Epetra_Vector > get_Epetra_Vector(const Epetra_Map &map, const RCP< VectorBase< double > > &v)
Get a non-const Epetra_Vector view from a non-const VectorBase object if possible. 
 
Teuchos::RCP< Epetra_Operator > get_Epetra_Operator(LinearOpBase< double > &op)
Full specialization for Scalar=double. 
 
#define TEUCHOS_ASSERT(assertion_test)
 
RCP< Epetra_Operator > epetra_op()