Tempus Version of the Day
Time Integration
Loading...
Searching...
No Matches
Thyra_AdjointPreconditioner.hpp
Go to the documentation of this file.
1//@HEADER
2// *****************************************************************************
3// Tempus: Time Integration and Sensitivity Analysis Package
4//
5// Copyright 2017 NTESS and the Tempus contributors.
6// SPDX-License-Identifier: BSD-3-Clause
7// *****************************************************************************
8//@HEADER
9
10#ifndef Thyra_AdjointPreconditioner_hpp
11#define Thyra_AdjointPreconditioner_hpp
12
13#include "Thyra_PreconditionerBase.hpp"
14#include "Teuchos_ConstNonconstObjectContainer.hpp"
15#include "Thyra_DefaultScaledAdjointLinearOp.hpp"
16
17namespace Thyra {
18
22template <class Scalar>
23class AdjointPreconditioner : virtual public PreconditionerBase<Scalar> {
24 public:
27
30
32 {
34 prec_ = prec;
35 }
36
37 void initialize(const RCP<const PreconditionerBase<Scalar> > &prec)
38 {
40 prec_ = prec;
41 }
42
43 RCP<PreconditionerBase<Scalar> > getNonconstPreconditioner()
44 {
45 return prec_.getNonconstObj();
46 }
47
48 RCP<const PreconditionerBase<Scalar> > getPreconditioner() const
49 {
50 return prec_.getConstObj();
51 }
52
53 void uninitialize() { prec_.uninitialize(); }
54
56
59
60 bool isLeftPrecOpConst() const
61 {
62 return prec_.getConstObj()->isLeftPrecOpConst();
63 }
64
65 Teuchos::RCP<LinearOpBase<Scalar> > getNonconstLeftPrecOp()
66 {
67 return nonconstAdjoint(prec_.getNonconstObj()->getNonconstLeftPrecOp());
68 }
69
70 Teuchos::RCP<const LinearOpBase<Scalar> > getLeftPrecOp() const
71 {
72 return adjoint(prec_.getConstObj()->getLeftPrecOp());
73 }
74
75 bool isRightPrecOpConst() const
76 {
77 return prec_.getConstObj()->isRightPrecOpConst();
78 }
79
80 Teuchos::RCP<LinearOpBase<Scalar> > getNonconstRightPrecOp()
81 {
82 return nonconstAdjoint(prec_.getNonconstObj()->getNonconstRightPrecOp());
83 }
84
85 Teuchos::RCP<const LinearOpBase<Scalar> > getRightPrecOp() const
86 {
87 return adjoint(prec_.getConstObj()->getRightPrecOp());
88 }
89
91 {
92 return prec_.getConstObj()->isUnspecifiedPrecOpConst();
93 }
94
95 Teuchos::RCP<LinearOpBase<Scalar> > getNonconstUnspecifiedPrecOp()
96 {
97 return nonconstAdjoint(
98 prec_.getNonconstObj()->getNonconstUnspecifiedPrecOp());
99 }
100
101 Teuchos::RCP<const LinearOpBase<Scalar> > getUnspecifiedPrecOp() const
102 {
103 return adjoint(prec_.getNonconstObj()->getUnspecifiedPrecOp());
104 }
105
107
108 private:
109 // //////////////////////////////
110 // Private types
111
112 typedef Teuchos::ConstNonconstObjectContainer<PreconditionerBase<Scalar> >
114
115 // //////////////////////////////
116 // Private data members
117
119
120 // //////////////////////////////
121 // Private member functions
122
124 const RCP<const PreconditionerBase<Scalar> > &prec)
125 {
126#ifdef TEUCHOS_DEBUG
127 TEUCHOS_TEST_FOR_EXCEPT(is_null(prec));
128#else
129 (void)prec;
130#endif
131 }
132};
133
138template <class Scalar>
139RCP<AdjointPreconditioner<Scalar> > adjointPreconditioner()
140{
141 return Teuchos::rcp(new AdjointPreconditioner<Scalar>());
142}
143
148template <class Scalar>
149RCP<AdjointPreconditioner<Scalar> > nonconstAdjointPreconditioner(
150 const RCP<PreconditionerBase<Scalar> > &prec)
151{
152 RCP<AdjointPreconditioner<Scalar> > aprec =
153 Teuchos::rcp(new AdjointPreconditioner<Scalar>());
154 aprec->nonconstInitialize(prec);
155 return aprec;
156}
157
162template <class Scalar>
163RCP<AdjointPreconditioner<Scalar> > adjointPreconditioner(
164 const RCP<const PreconditionerBase<Scalar> > &prec)
165{
166 RCP<AdjointPreconditioner<Scalar> > aprec =
167 Teuchos::rcp(new AdjointPreconditioner<Scalar>());
168 aprec->initialize(prec);
169 return aprec;
170}
171
172} // end namespace Thyra
173
174#endif
Concrete PreconditionerBase subclass that wraps a preconditioner operator in MultiVectorLinearOp.
AdjointPreconditioner()
Construct to uninitialized.
Teuchos::RCP< LinearOpBase< Scalar > > getNonconstRightPrecOp()
Teuchos::RCP< const LinearOpBase< Scalar > > getRightPrecOp() const
RCP< PreconditionerBase< Scalar > > getNonconstPreconditioner()
Teuchos::RCP< const LinearOpBase< Scalar > > getLeftPrecOp() const
RCP< AdjointPreconditioner< Scalar > > nonconstAdjointPreconditioner(const RCP< PreconditionerBase< Scalar > > &prec)
Nonmember constructor function.
Teuchos::ConstNonconstObjectContainer< PreconditionerBase< Scalar > > CNPB
Teuchos::RCP< const LinearOpBase< Scalar > > getUnspecifiedPrecOp() const
RCP< AdjointPreconditioner< Scalar > > adjointPreconditioner(const RCP< const PreconditionerBase< Scalar > > &prec)
Nonmember constructor function.
RCP< AdjointPreconditioner< Scalar > > adjointPreconditioner()
Nonmember constructor function.
Teuchos::RCP< LinearOpBase< Scalar > > getNonconstUnspecifiedPrecOp()
void initialize(const RCP< const PreconditionerBase< Scalar > > &prec)
Teuchos::RCP< LinearOpBase< Scalar > > getNonconstLeftPrecOp()
static void validateInitialize(const RCP< const PreconditionerBase< Scalar > > &prec)
RCP< const PreconditionerBase< Scalar > > getPreconditioner() const
void nonconstInitialize(const RCP< PreconditionerBase< Scalar > > &prec)