Teko  Version of the Day
 All Classes Files Functions Variables Pages
Teko_ImplicitLinearOp.hpp
1 // @HEADER
2 // *****************************************************************************
3 // Teko: A package for block and physics based preconditioning
4 //
5 // Copyright 2010 NTESS and the Teko contributors.
6 // SPDX-License-Identifier: BSD-3-Clause
7 // *****************************************************************************
8 // @HEADER
9 
10 #ifndef __Teko_ImplicitLinearOp_hpp__
11 #define __Teko_ImplicitLinearOp_hpp__
12 
13 #include "Teko_Utilities.hpp"
14 
15 namespace Teko {
16 
23 class ImplicitLinearOp : public Thyra::LinearOpBase<double> {
24  public:
26  virtual VectorSpace range() const = 0;
27 
29  virtual VectorSpace domain() const = 0;
30 
44  virtual void implicitApply(const MultiVector& x, MultiVector& y, const double alpha = 1.0,
45  const double beta = 0.0) const = 0;
46 
47  protected:
49 
50 
51  virtual bool opSupportedImpl(const Thyra::EOpTransp M_trans) const;
52 
53  virtual void applyImpl(const Thyra::EOpTransp M_trans, const Thyra::MultiVectorBase<double>& x,
54  const Teuchos::Ptr<Thyra::MultiVectorBase<double> >& y, const double alpha,
55  const double beta) const;
56 
58 };
59 
60 } // end namespace Teko
61 
62 #endif
A virtual class that simplifies the construction of custom operators.
virtual bool opSupportedImpl(const Thyra::EOpTransp M_trans) const
Functions required by Thyra::LinearOpBase.
virtual void implicitApply(const MultiVector &x, MultiVector &y, const double alpha=1.0, const double beta=0.0) const =0
Perform a matrix vector multiply with this implicitly defined blocked operator.
virtual VectorSpace domain() const =0
Domain space of this operator.
virtual VectorSpace range() const =0
Range space of this operator.