10#ifndef THYRA_DEFAULT_SCALED_ADJOINT_LINEAR_OP_DECL_HPP 
   11#define THYRA_DEFAULT_SCALED_ADJOINT_LINEAR_OP_DECL_HPP 
   14#include "Thyra_ScaledAdjointLinearOpBase.hpp" 
   15#include "Teuchos_ConstNonconstObjectContainer.hpp" 
  117    const Scalar &scalar,
 
  129    const Scalar &scalar,
 
  156    const Scalar &scalar,
 
  309  template <
class Scalar2>
 
  310  struct ScalarETransp {
 
  315    ScalarETransp( 
const Scalar2 &_scalar, 
const EOpTransp &_transp )
 
  316      : scalar(_scalar), transp(_transp)
 
  320  typedef std::vector<ScalarETransp<Scalar> >  allScalarETransp_t;
 
  328  Scalar overallScalar_;
 
  338    const Scalar &scalar,
 
  343  CNLOC getOpImpl() 
const;
 
  344  void assertInitialized() 
const;
 
 
  368template<
class Scalar>
 
  371  const Scalar &scalar,
 
  373  const std::string &label = 
"" 
  392template<
class Scalar>
 
  395  const Scalar &scalar,
 
  397  const std::string &label = 
"" 
  416template<
class Scalar>
 
  420  const std::string &label = 
"" 
  439template<
class Scalar>
 
  443  const std::string &label = 
"" 
  462template<
class Scalar>
 
  466  const std::string &label = 
"" 
  485template<
class Scalar>
 
  489  const std::string &label = 
"" 
  509template<
class Scalar>
 
  512  const Scalar &scalar, 
const EOpTransp &transp,
 
  514  const std::string &label = 
"" 
  534template<
class Scalar>
 
  537  const Scalar &scalar, 
const EOpTransp &transp,
 
  539  const std::string &label = 
"" 
  547template<
class Scalar>
 
  556template<
class Scalar>
 
  570template<
class Scalar>
 
  584template<
class Scalar>
 
  601template<
class Scalar> 
inline 
  604  const Scalar &scalar,
 
  605  const RCP<LinearOpBase<Scalar> > &Op,
 
  606  const std::string &label
 
  609  RCP<Thyra::LinearOpBase<Scalar> >
 
  611      new DefaultScaledAdjointLinearOp<Scalar>(
 
  616    salo->setObjectLabel(label);
 
  621template<
class Scalar> 
inline 
  624  const Scalar &scalar,
 
  625  const RCP<
const LinearOpBase<Scalar> > &Op,
 
  626  const std::string &label
 
  629  RCP<Thyra::LinearOpBase<Scalar> >
 
  631    new DefaultScaledAdjointLinearOp<Scalar>(scalar,NOTRANS,Op)
 
  634    salo->setObjectLabel(label);
 
  639template<
class Scalar> 
inline 
  641Thyra::nonconstAdjoint(
 
  642  const RCP<LinearOpBase<Scalar> > &Op,
 
  643  const std::string &label
 
  646  RCP<Thyra::LinearOpBase<Scalar> >
 
  648      new DefaultScaledAdjointLinearOp<Scalar>(
 
  653    salo->setObjectLabel(label);
 
  658template<
class Scalar> 
inline 
  661  const RCP<
const LinearOpBase<Scalar> > &Op,
 
  662  const std::string &label
 
  665  RCP<Thyra::LinearOpBase<Scalar> >
 
  667      new DefaultScaledAdjointLinearOp<Scalar>(
 
  672    salo->setObjectLabel(label);
 
  677template<
class Scalar> 
inline 
  679Thyra::nonconstTranspose(
 
  680  const RCP<LinearOpBase<Scalar> > &Op,
 
  681  const std::string &label
 
  684  RCP<Thyra::LinearOpBase<Scalar> >
 
  686      new DefaultScaledAdjointLinearOp<Scalar>(
 
  691    salo->setObjectLabel(label);
 
  696template<
class Scalar> 
inline 
  699  const RCP<
const LinearOpBase<Scalar> > &Op,
 
  700  const std::string &label
 
  703  RCP<Thyra::LinearOpBase<Scalar> >
 
  705      new DefaultScaledAdjointLinearOp<Scalar>(
 
  710    salo->setObjectLabel(label);
 
  715template<
class Scalar> 
inline 
  717Thyra::nonconstScaleAndAdjoint(
 
  718  const Scalar &scalar,
 
  719  const EOpTransp &transp,
 
  720  const RCP<LinearOpBase<Scalar> > &Op,
 
  721  const std::string &label
 
  724  RCP<Thyra::LinearOpBase<Scalar> >
 
  726      new DefaultScaledAdjointLinearOp<Scalar>(scalar,transp,Op)
 
  729    salo->setObjectLabel(label);
 
  734template<
class Scalar> 
inline 
  736Thyra::scaleAndAdjoint(
 
  737  const Scalar &scalar,
 
  738  const EOpTransp &transp,
 
  739  const RCP<
const LinearOpBase<Scalar> > &Op,
 
  740  const std::string &label
 
  743  RCP<Thyra::LinearOpBase<Scalar> >
 
  745      new DefaultScaledAdjointLinearOp<Scalar>(
 
  750    salo->setObjectLabel(label);
 
Concrete decorator LinearOpBase subclass that wraps a LinearOpBase object and adds on an extra scalin...
 
RCP< LinearOpBase< Scalar > > getNonconstOp()
Return the non-const linear operator passed into initialize().
 
RCP< LinearOpBase< Scalar > > getNonconstOrigOp()
 
bool opSupportedImpl(EOpTransp M_trans) const
Return if the operation is supported on the logical linear operator.
 
std::string description() const
Outputs DefaultScaledAdjointLinearOp<Scalar>{this->getOrigOp().description()) along with the dimensio...
 
RCP< const LinearOpBase< Scalar > > scale(const Scalar &scalar, const RCP< const LinearOpBase< Scalar > > &Op, const std::string &label="")
Build an implicit const scaled linear operator.
 
RCP< const VectorSpaceBase< Scalar > > domain() const
Return the domain space of the logical linear operator.
 
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
Prints out the original operator as well as all of the scalings and transpositions in the order that ...
 
void uninitialize()
Set to uninitialized and (optionally) extract the objects passed into initialize().
 
void applyImpl(const EOpTransp M_trans, const MultiVectorBase< Scalar > &X, const Ptr< MultiVectorBase< Scalar > > &Y, const Scalar alpha, const Scalar beta) const
Apply the linear operator (or its transpose) to a multi-vector : Y = alpha*op(M)*X + beta*Y.
 
RCP< const LinearOpBase< Scalar > > transpose(const RCP< const LinearOpBase< Scalar > > &Op, const std::string &label="")
Build an implicit const transposed linear operator.
 
RCP< LinearOpBase< Scalar > > nonconstAdjoint(const RCP< LinearOpBase< Scalar > > &Op, const std::string &label="")
Build an implicit non-const adjoined linear operator.
 
RCP< const LinearOpBase< Scalar > > clone() const
 
RCP< LinearOpBase< Scalar > > nonconstScale(const Scalar &scalar, const RCP< LinearOpBase< Scalar > > &Op, const std::string &label="")
Build an implicit non-const scaled linear operator.
 
RCP< const LinearOpBase< Scalar > > getOrigOp() const
 
RCP< const VectorSpaceBase< Scalar > > range() const
Return the range space of the logical linear operator.
 
void initialize(const Scalar &scalar, const EOpTransp &transp, const RCP< LinearOpBase< Scalar > > &Op)
Initialize with an operator with by defining adjoint (transpose) and scaling arguments.
 
DefaultScaledAdjointLinearOp()
Constructs to uninitialized.
 
Scalar overallScalar() const
 
RCP< LinearOpBase< Scalar > > nonconstTranspose(const RCP< LinearOpBase< Scalar > > &Op, const std::string &label="")
Build an implicit non-const transposed linear operator.
 
RCP< const LinearOpBase< Scalar > > scaleAndAdjoint(const Scalar &scalar, const EOpTransp &transp, const RCP< const LinearOpBase< Scalar > > &Op, const std::string &label="")
Build an implicit const scaled and/or adjoined (transposed) linear operator.
 
RCP< const LinearOpBase< Scalar > > adjoint(const RCP< const LinearOpBase< Scalar > > &Op, const std::string &label="")
Build an implicit const adjoined linear operator.
 
RCP< LinearOpBase< Scalar > > nonconstScaleAndAdjoint(const Scalar &scalar, const EOpTransp &transp, const RCP< LinearOpBase< Scalar > > &Op, const std::string &label="")
Build an implicit non-const scaled and/or adjoined (transposed) linear operator.
 
EOpTransp overallTransp() const
 
RCP< const LinearOpBase< Scalar > > getOp() const
Return the const linear operator passed into initialize().
 
Base class for all linear operators.
 
Interface for a collection of column vectors called a multi-vector.
 
Base class for LinearOpBase decorator subclasses that wrap a LinearOpBase object and adds on an extra...
 
#define TEUCHOS_TEST_FOR_EXCEPT(throw_exception_test)
 
EOpTransp
Enumeration for determining how a linear operator is applied. `*.
 
@ NOTRANS
Use the non-transposed operator.
 
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)