10#ifndef Thyra_ScaledIdentityLinearOpWithSolve_hpp
11#define Thyra_ScaledIdentityLinearOpWithSolve_hpp
13#include "Thyra_LinearOpWithSolveBase.hpp"
14#include "Thyra_MultiVectorStdOps.hpp"
22template <
class Scalar>
42 RCP<const VectorSpaceBase<Scalar> >
space()
const {
return space_; }
51 RCP<const VectorSpaceBase<Scalar> >
range()
const {
return space_; }
53 RCP<const VectorSpaceBase<Scalar> >
domain()
const {
return space_; }
55 RCP<const LinearOpBase<Scalar> >
clone()
const
57 RCP<ScaledIdentityLinearOpWithSolve<Scalar> > op =
71 const Scalar beta)
const
73 typedef Teuchos::ScalarTraits<Scalar> ST;
74 Thyra::scale(beta, Y);
75 if (M_trans == CONJ || M_trans == CONJTRANS)
76 V_StVpV(Y, ST::conjugate(
s_) * alpha, X, *Y);
78 V_StVpV(Y,
s_ * alpha, X, *Y);
88 const Ptr<
const SolveCriteria<Scalar> > )
const
95 const SolveMeasureType& )
const
103 const Ptr<
const SolveCriteria<Scalar> > )
const
105 typedef Teuchos::ScalarTraits<Scalar> ST;
106 assign(X, ST::zero());
107 if (M_trans == CONJ || M_trans == CONJTRANS)
108 V_StVpV(X, ST::one() / ST::conjugate(
s_), B, *X);
110 V_StVpV(X, ST::one() /
s_, B, *X);
111 SolveStatus<Scalar> solveStatus;
112 solveStatus.solveStatus = SOLVE_STATUS_CONVERGED;
121 RCP<const VectorSpaceBase<Scalar> >
space_;
128 const RCP<
const VectorSpaceBase<Scalar> >&
space)
131 TEUCHOS_TEST_FOR_EXCEPT(is_null(
space));
142template <
class Scalar>
152template <
class Scalar>
154 const RCP<
const VectorSpaceBase<Scalar> >& space,
const Scalar& s)
156 RCP<ScaledIdentityLinearOpWithSolve<Scalar> > op =
158 op->initialize(space, s);
Implicit concrete LinearOpBase subclass that takes a flattended out multi-vector and performs a multi...
RCP< const VectorSpaceBase< Scalar > > space_
bool solveSupportsSolveMeasureTypeImpl(EOpTransp, const SolveMeasureType &) const
void setScale(const Scalar &s)
void initialize(const RCP< const VectorSpaceBase< Scalar > > &space, const Scalar &s)
bool opSupportedImpl(EOpTransp) const
RCP< const VectorSpaceBase< Scalar > > space() const
SolveStatus< Scalar > solveImpl(const EOpTransp M_trans, const MultiVectorBase< Scalar > &B, const Ptr< MultiVectorBase< Scalar > > &X, const Ptr< const SolveCriteria< Scalar > >) const
RCP< ScaledIdentityLinearOpWithSolve< Scalar > > scaledIdentity(const RCP< const VectorSpaceBase< Scalar > > &space, const Scalar &s)
Nonmember constructor function.
static void validateInitialize(const RCP< const VectorSpaceBase< Scalar > > &space)
RCP< ScaledIdentityLinearOpWithSolve< Scalar > > scaledIdentity()
Nonmember constructor function.
void applyImpl(const EOpTransp M_trans, const MultiVectorBase< Scalar > &X, const Ptr< MultiVectorBase< Scalar > > &Y, const Scalar alpha, const Scalar beta) const
ScaledIdentityLinearOpWithSolve()
Construct to uninitialized.
RCP< const LinearOpBase< Scalar > > clone() const
bool solveSupportsImpl(EOpTransp) const
RCP< const VectorSpaceBase< Scalar > > domain() const
RCP< const VectorSpaceBase< Scalar > > range() const
bool solveSupportsNewImpl(EOpTransp, const Ptr< const SolveCriteria< Scalar > >) const