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  public:
26 
29 
31  {
32  validateInitialize(prec);
33  prec_ = prec;
34  }
35 
36  void initialize(const RCP<const PreconditionerBase<Scalar> > &prec)
37  {
38  validateInitialize(prec);
39  prec_ = prec;
40  }
41 
42  RCP<PreconditionerBase<Scalar> > getNonconstPreconditioner()
43  {
44  return prec_.getNonconstObj();
45  }
46 
47  RCP<const PreconditionerBase<Scalar> > getPreconditioner() const
48  {
49  return prec_.getConstObj();
50  }
51 
53 
55 
58 
59  bool isLeftPrecOpConst() const
60  {
61  return prec_.getConstObj()->isLeftPrecOpConst();
62  }
63 
65  {
66  return nonconstAdjoint(prec_.getNonconstObj()->getNonconstLeftPrecOp());
67  }
68 
70  {
71  return adjoint(prec_.getConstObj()->getLeftPrecOp());
72  }
73 
74  bool isRightPrecOpConst() const
75  {
76  return prec_.getConstObj()->isRightPrecOpConst();
77  }
78 
80  {
81  return nonconstAdjoint(prec_.getNonconstObj()->getNonconstRightPrecOp());
82  }
83 
85  {
86  return adjoint(prec_.getConstObj()->getRightPrecOp());
87  }
88 
90  {
91  return prec_.getConstObj()->isUnspecifiedPrecOpConst();
92  }
93 
95  {
96  return nonconstAdjoint(
97  prec_.getNonconstObj()->getNonconstUnspecifiedPrecOp());
98  }
99 
101  {
102  return adjoint(prec_.getNonconstObj()->getUnspecifiedPrecOp());
103  }
104 
106 
107  private:
108  // //////////////////////////////
109  // Private types
110 
113 
114  // //////////////////////////////
115  // Private data members
116 
118 
119  // //////////////////////////////
120  // Private member functions
121 
122  static void validateInitialize(
123  const RCP<const PreconditionerBase<Scalar> > &prec)
124  {
125 #ifdef TEUCHOS_DEBUG
127 #else
128  (void)prec;
129 #endif
130  }
131 };
132 
137 template <class Scalar>
138 RCP<AdjointPreconditioner<Scalar> > adjointPreconditioner()
139 {
141 }
142 
147 template <class Scalar>
148 RCP<AdjointPreconditioner<Scalar> > nonconstAdjointPreconditioner(
149  const RCP<PreconditionerBase<Scalar> > &prec)
150 {
151  RCP<AdjointPreconditioner<Scalar> > aprec =
153  aprec->nonconstInitialize(prec);
154  return aprec;
155 }
156 
161 template <class Scalar>
162 RCP<AdjointPreconditioner<Scalar> > adjointPreconditioner(
163  const RCP<const PreconditionerBase<Scalar> > &prec)
164 {
165  RCP<AdjointPreconditioner<Scalar> > aprec =
167  aprec->initialize(prec);
168  return aprec;
169 }
170 
171 } // end namespace Thyra
172 
173 #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