10 #ifndef BELOS_OPERATOR_HPP
11 #define BELOS_OPERATOR_HPP
20 #ifdef HAVE_BELOS_EXPERIMENTAL
22 #endif // HAVE_BELOS_EXPERIMENTAL
47 template <
class ScalarType>
129 template<
class ScalarType>
140 Op.
Apply (x, y, trans);
151 #ifdef HAVE_BELOS_EXPERIMENTAL
166 template<
class Scalar>
167 class OperatorInnerSolver :
public Operator<Scalar> {
169 typedef Scalar scalar_type;
170 typedef MultiVec<Scalar> multivector_type;
171 typedef Operator<Scalar> operator_type;
172 typedef InnerSolver<scalar_type, multivector_type, operator_type> inner_solver_type;
181 virtual ~OperatorInnerSolver() {}
218 Apply (
const multivector_type& X,
222 using Teuchos::rcpFromRef;
225 "Belos::OperatorInnerSolver only supports applying the"
226 " operator itself, not its transpose or conjugate "
228 solver_->solve (rcpFromRef (Y), rcpFromRef (X));
235 virtual bool HasApplyTranspose()
const {
241 OperatorInnerSolver ();
258 template <
class Scalar>
259 class InnerSolverTraits<Scalar, MultiVec<Scalar>, Operator<Scalar> > {
264 typedef InnerSolver<scalar_type, multivector_type, operator_type>
inner_solver_type;
275 using Teuchos::rcp_implicit_cast;
292 using Teuchos::rcp_dynamic_cast;
293 RCP<wrapper_type> wrapper = rcp_dynamic_cast<
wrapper_type> (op,
true);
294 return wrapper->getInnerSolver();
297 #endif // HAVE_BELOS_EXPERIMENTAL
virtual bool HasApplyTranspose() const
Whether this operator implements applying the transpose.
virtual void Apply(const MultiVec< ScalarType > &x, MultiVec< ScalarType > &y, ETrans trans=NOTRANS) const =0
Apply the operator to x, putting the result in y.
static Teuchos::RCP< inner_solver_type > getInnerSolver(const Teuchos::RCP< operator_type > &op)
Return the given wrapper's inner solver object.
static bool HasApplyTranspose(const Operator< ScalarType > &Op)
Specialization of HasApplyTranspose() for Operator objects.
static Teuchos::RCP< OP > makeInnerSolverOperator(const Teuchos::RCP< InnerSolver< Scalar, MV, OP > > &solver)
Wrap the given inner solver in a wrapper_type.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
virtual ~Operator()
Virtual destructor, for memory safety of derived classes.
Class which defines basic traits for the operator type.
ETrans
Whether to apply the (conjugate) transpose of an operator.
static void Apply(const Operator< ScalarType > &Op, const MultiVec< ScalarType > &x, MultiVec< ScalarType > &y, ETrans trans=NOTRANS)
Specialization of Apply() for Operator and MultiVec objects.
Alternative run-time polymorphic interface for operators.
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
UndefinedWrapperType< Scalar, MV, OP > wrapper_type
InnerSolver< scalar_type, multivector_type, operator_type > inner_solver_type
Operator()
Default constructor (does nothing).
Interface for multivectors used by Belos' linear solvers.
Class which defines basic traits for the operator type.
Belos header file which uses auto-configuration information to include necessary C++ headers...
Interface for multivectors used by Belos' linear solvers.