Tempus  Version of the Day
Time Integration
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Thyra_AdjointPreconditioner.hpp
Go to the documentation of this file.
1 // @HEADER
2 // ****************************************************************************
3 // Tempus: Copyright (2017) Sandia Corporation
4 //
5 // Distributed under BSD 3-clause license (See accompanying file Copyright.txt)
6 // ****************************************************************************
7 // @HEADER
8 
9 #ifndef Thyra_AdjointPreconditioner_hpp
10 #define Thyra_AdjointPreconditioner_hpp
11 
12 #include "Thyra_PreconditionerBase.hpp"
13 #include "Teuchos_ConstNonconstObjectContainer.hpp"
14 #include "Thyra_DefaultScaledAdjointLinearOp.hpp"
15 
16 namespace Thyra {
17 
21 template<class Scalar>
22 class AdjointPreconditioner : virtual public PreconditionerBase<Scalar>
23 {
24 public:
25 
28 
31 
33  const RCP<PreconditionerBase<Scalar> > &prec) {
34  validateInitialize(prec);
35  prec_ = prec;
36  }
37 
38  void initialize(
39  const RCP<const PreconditionerBase<Scalar> > &prec) {
40  validateInitialize(prec);
41  prec_ = prec;
42  }
43 
44  RCP<PreconditionerBase<Scalar> >
46 
47  RCP<const PreconditionerBase<Scalar> >
48  getPreconditioner() const { return prec_.getConstObj(); }
49 
50  void uninitialize() {
52  }
53 
55 
58 
59  bool isLeftPrecOpConst() const
60  { return prec_.getConstObj()->isLeftPrecOpConst(); }
61 
63  { return nonconstAdjoint(prec_.getNonconstObj()->getNonconstLeftPrecOp()); }
64 
66  { return adjoint(prec_.getConstObj()->getLeftPrecOp()); }
67 
68  bool isRightPrecOpConst() const
69  { return prec_.getConstObj()->isRightPrecOpConst(); }
70 
72  { return nonconstAdjoint(prec_.getNonconstObj()->getNonconstRightPrecOp()); }
73 
75  { return adjoint(prec_.getConstObj()->getRightPrecOp()); }
76 
78  { return prec_.getConstObj()->isUnspecifiedPrecOpConst(); }
79 
81  { return nonconstAdjoint(
82  prec_.getNonconstObj()->getNonconstUnspecifiedPrecOp()); }
83 
85  { return adjoint(prec_.getNonconstObj()->getUnspecifiedPrecOp()); }
86 
88 
89 private:
90 
91  // //////////////////////////////
92  // Private types
93 
95 
96  // //////////////////////////////
97  // Private data members
98 
100 
101  // //////////////////////////////
102  // Private member functions
103 
104  static void validateInitialize(
105  const RCP<const PreconditionerBase<Scalar> > &prec) {
106 #ifdef TEUCHOS_DEBUG
108 #else
109  (void)prec;
110 #endif
111  }
112 
113 };
114 
119 template<class Scalar>
120 RCP<AdjointPreconditioner<Scalar> >
122 {
124 }
125 
130 template<class Scalar>
131 RCP<AdjointPreconditioner<Scalar> >
133  const RCP<PreconditionerBase<Scalar> > &prec
134  )
135 {
136  RCP<AdjointPreconditioner<Scalar> >
138  aprec->nonconstInitialize(prec);
139  return aprec;
140 }
141 
146 template<class Scalar>
147 RCP<AdjointPreconditioner<Scalar> >
149  const RCP<const PreconditionerBase<Scalar> > &prec
150  )
151 {
152  RCP<AdjointPreconditioner<Scalar> >
154  aprec->initialize(prec);
155  return aprec;
156 }
157 
158 } // end namespace Thyra
159 
160 #endif
bool is_null(const boost::shared_ptr< T > &p)
Concrete PreconditionerBase subclass that wraps a preconditioner operator in MultiVectorLinearOp.
RCP< AdjointPreconditioner< Scalar > > adjointPreconditioner()
Nonmember constructor function.
Teuchos::RCP< LinearOpBase< Scalar > > getNonconstRightPrecOp()
RCP< AdjointPreconditioner< Scalar > > adjointPreconditioner(const RCP< const PreconditionerBase< Scalar > > &prec)
Nonmember constructor function.
Teuchos::RCP< LinearOpBase< Scalar > > getNonconstLeftPrecOp()
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
void initialize(const RCP< const PreconditionerBase< Scalar > > &prec)
Teuchos::RCP< const LinearOpBase< Scalar > > getRightPrecOp() const
RCP< const ObjType > getConstObj() const
AdjointPreconditioner()
Construct to uninitialized.
void nonconstInitialize(const RCP< PreconditionerBase< Scalar > > &prec)
Teuchos::RCP< const LinearOpBase< Scalar > > getLeftPrecOp() const
Teuchos::RCP< LinearOpBase< Scalar > > getNonconstUnspecifiedPrecOp()
static void validateInitialize(const RCP< const PreconditionerBase< Scalar > > &prec)
RCP< ObjType > getNonconstObj() const
RCP< PreconditionerBase< Scalar > > getNonconstPreconditioner()
Teuchos::RCP< const LinearOpBase< Scalar > > getUnspecifiedPrecOp() const
#define TEUCHOS_TEST_FOR_EXCEPT(throw_exception_test)
Teuchos::ConstNonconstObjectContainer< PreconditionerBase< Scalar > > CNPB
RCP< AdjointPreconditioner< Scalar > > nonconstAdjointPreconditioner(const RCP< PreconditionerBase< Scalar > > &prec)
Nonmember constructor function.
RCP< const PreconditionerBase< Scalar > > getPreconditioner() const