Thyra
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
core
src
support
operator_solve
client_support
Thyra_DefaultPreconditioner_decl.hpp
1
// @HEADER
2
// *****************************************************************************
3
// Thyra: Interfaces and Support for Abstract Numerical Algorithms
4
//
5
// Copyright 2004 NTESS and the Thyra contributors.
6
// SPDX-License-Identifier: BSD-3-Clause
7
// *****************************************************************************
8
// @HEADER
9
10
#ifndef THYRA_DEFUALT_PRECONDITIONER_DECL_HPP
11
#define THYRA_DEFUALT_PRECONDITIONER_DECL_HPP
12
13
#include "Thyra_PreconditionerBase.hpp"
14
#include "Teuchos_ConstNonconstObjectContainer.hpp"
15
16
17
namespace
Thyra {
18
19
47
template
<
class
Scalar>
48
class
DefaultPreconditioner
:
virtual
public
PreconditionerBase
<Scalar>
49
{
50
public
:
51
54
57
DefaultPreconditioner
();
58
62
DefaultPreconditioner
(
63
const
Teuchos::RCP
<
LinearOpBase<Scalar>
> &leftPrecOp,
64
const
Teuchos::RCP
<
LinearOpBase<Scalar>
> &rightPrecOp
65
);
66
70
DefaultPreconditioner
(
71
const
Teuchos::RCP
<
const
LinearOpBase<Scalar>
> &leftPrecOp,
72
const
Teuchos::RCP
<
const
LinearOpBase<Scalar>
> &rightPrecOp
73
);
74
77
DefaultPreconditioner
(
78
const
Teuchos::RCP
<
LinearOpBase<Scalar>
> &unspecifiedPrecOp
79
);
80
83
DefaultPreconditioner
(
84
const
Teuchos::RCP
<
const
LinearOpBase<Scalar>
> &unspecifiedPrecOp
85
);
86
89
void
initializeLeft
(
90
const
Teuchos::RCP
<
LinearOpBase<Scalar>
> &leftPrecOp
91
);
92
95
void
initializeLeft
(
96
const
Teuchos::RCP
<
const
LinearOpBase<Scalar>
> &leftPrecOp
97
);
98
101
void
initializeRight
(
102
const
Teuchos::RCP
<
LinearOpBase<Scalar>
> &rightPrecOp
103
);
104
107
void
initializeRight
(
108
const
Teuchos::RCP
<
const
LinearOpBase<Scalar>
> &rightPrecOp
109
);
110
113
void
initializeLeftRight
(
114
const
Teuchos::RCP
<
LinearOpBase<Scalar>
> &leftPrecOp
115
,
const
Teuchos::RCP
<
LinearOpBase<Scalar>
> &rightPrecOp
116
);
117
120
void
initializeLeftRight
(
121
const
Teuchos::RCP
<
const
LinearOpBase<Scalar>
> &leftPrecOp
122
,
const
Teuchos::RCP
<
const
LinearOpBase<Scalar>
> &rightPrecOp
123
);
124
128
void
initializeUnspecified
(
129
const
Teuchos::RCP
<
LinearOpBase<Scalar>
> &unspecifiedPrecOp
130
);
131
135
void
initializeUnspecified
(
136
const
Teuchos::RCP
<
const
LinearOpBase<Scalar>
> &unspecifiedPrecOp
137
);
138
145
void
uninitialize
();
146
148
151
152
std::string
description
()
const
;
154
void
describe
(
155
Teuchos::FancyOStream
&out,
156
const
Teuchos::EVerbosityLevel
verbLevel
157
)
const
;
159
162
163
bool
isLeftPrecOpConst
()
const
;
165
Teuchos::RCP<LinearOpBase<Scalar>
>
getNonconstLeftPrecOp
();
167
Teuchos::RCP<const LinearOpBase<Scalar>
>
getLeftPrecOp
()
const
;
169
bool
isRightPrecOpConst
()
const
;
171
Teuchos::RCP<LinearOpBase<Scalar>
>
getNonconstRightPrecOp
();
173
Teuchos::RCP<const LinearOpBase<Scalar>
>
getRightPrecOp
()
const
;
175
bool
isUnspecifiedPrecOpConst
()
const
;
177
Teuchos::RCP<LinearOpBase<Scalar>
>
getNonconstUnspecifiedPrecOp
();
179
Teuchos::RCP<const LinearOpBase<Scalar>
>
getUnspecifiedPrecOp
()
const
;
181
182
private
:
183
184
Teuchos::ConstNonconstObjectContainer<LinearOpBase<Scalar>
> leftPrecOp_;
185
Teuchos::ConstNonconstObjectContainer<LinearOpBase<Scalar>
> rightPrecOp_;
186
Teuchos::ConstNonconstObjectContainer<LinearOpBase<Scalar>
> unspecifiedPrecOp_;
187
188
};
189
190
// ///////////////////////
191
// Related functions
192
193
199
template
<
class
Scalar>
200
Teuchos::RCP<const DefaultPreconditioner<Scalar>
>
201
unspecifiedPrec
(
202
const
Teuchos::RCP
<
const
LinearOpBase<Scalar>
> &unspecifiedPrecOp
203
)
204
{
205
return
Teuchos::rcp
(
new
DefaultPreconditioner<Scalar>
(unspecifiedPrecOp));
206
}
207
208
214
template
<
class
Scalar>
215
Teuchos::RCP<DefaultPreconditioner<Scalar>
>
216
nonconstUnspecifiedPrec
(
217
const
Teuchos::RCP
<
LinearOpBase<Scalar>
> &unspecifiedPrecOp
218
)
219
{
220
return
Teuchos::rcp
(
new
DefaultPreconditioner<Scalar>
(unspecifiedPrecOp));
221
}
222
223
229
template
<
class
Scalar>
230
Teuchos::RCP<const DefaultPreconditioner<Scalar>
>
231
leftPrec
(
232
const
Teuchos::RCP
<
const
LinearOpBase<Scalar>
> &leftPrecOp
233
)
234
{
235
return
Teuchos::rcp
(
new
DefaultPreconditioner<Scalar>
(leftPrecOp,Teuchos::null));
236
}
237
243
template
<
class
Scalar>
244
Teuchos::RCP<const DefaultPreconditioner<Scalar>
>
245
rightPrec
(
246
const
Teuchos::RCP
<
const
LinearOpBase<Scalar>
> &rightPrecOp
247
)
248
{
249
return
Teuchos::rcp
(
new
DefaultPreconditioner<Scalar>
(Teuchos::null,rightPrecOp));
250
}
251
257
template
<
class
Scalar>
258
Teuchos::RCP<const DefaultPreconditioner<Scalar>
>
259
splitPrec
(
260
const
Teuchos::RCP
<
const
LinearOpBase<Scalar>
> &leftPrecOp
261
,
const
Teuchos::RCP
<
const
LinearOpBase<Scalar>
> &rightPrecOp
262
)
263
{
264
return
Teuchos::rcp
(
new
DefaultPreconditioner<Scalar>
(leftPrecOp,rightPrecOp));
265
}
266
267
268
}
// namespace Thyra
269
270
271
#endif
// THYRA_DEFUALT_PRECONDITIONER_DECL_HPP
Teuchos::ConstNonconstObjectContainer
Teuchos::RCP
Thyra::DefaultPreconditioner::rightPrec
Teuchos::RCP< const DefaultPreconditioner< Scalar > > rightPrec(const Teuchos::RCP< const LinearOpBase< Scalar > > &rightPrecOp)
Create a precondioner from a single linear operator targeted to be used on the right.
Definition
Thyra_DefaultPreconditioner_decl.hpp:245
Thyra::DefaultPreconditioner::initializeUnspecified
void initializeUnspecified(const Teuchos::RCP< LinearOpBase< Scalar > > &unspecifiedPrecOp)
Initialize a single unspecified preconditioner operator.
Definition
Thyra_DefaultPreconditioner_def.hpp:143
Thyra::DefaultPreconditioner::getNonconstRightPrecOp
Teuchos::RCP< LinearOpBase< Scalar > > getNonconstRightPrecOp()
Definition
Thyra_DefaultPreconditioner_def.hpp:206
Thyra::DefaultPreconditioner::nonconstUnspecifiedPrec
Teuchos::RCP< DefaultPreconditioner< Scalar > > nonconstUnspecifiedPrec(const Teuchos::RCP< LinearOpBase< Scalar > > &unspecifiedPrecOp)
Create a precondioner from a single linear operator not targeted to be used on the left or the right.
Definition
Thyra_DefaultPreconditioner_decl.hpp:216
Thyra::DefaultPreconditioner::leftPrec
Teuchos::RCP< const DefaultPreconditioner< Scalar > > leftPrec(const Teuchos::RCP< const LinearOpBase< Scalar > > &leftPrecOp)
Create a precondioner from a single linear operator targeted to be used on the left.
Definition
Thyra_DefaultPreconditioner_decl.hpp:231
Thyra::DefaultPreconditioner::getNonconstLeftPrecOp
Teuchos::RCP< LinearOpBase< Scalar > > getNonconstLeftPrecOp()
Definition
Thyra_DefaultPreconditioner_def.hpp:183
Thyra::DefaultPreconditioner::getRightPrecOp
Teuchos::RCP< const LinearOpBase< Scalar > > getRightPrecOp() const
Definition
Thyra_DefaultPreconditioner_def.hpp:214
Thyra::DefaultPreconditioner::describe
void describe(Teuchos::FancyOStream &out, const Teuchos::EVerbosityLevel verbLevel) const
Definition
Thyra_DefaultPreconditioner_def.hpp:273
Thyra::DefaultPreconditioner::isUnspecifiedPrecOpConst
bool isUnspecifiedPrecOpConst() const
Definition
Thyra_DefaultPreconditioner_def.hpp:221
Thyra::DefaultPreconditioner::getUnspecifiedPrecOp
Teuchos::RCP< const LinearOpBase< Scalar > > getUnspecifiedPrecOp() const
Definition
Thyra_DefaultPreconditioner_def.hpp:237
Thyra::DefaultPreconditioner::isLeftPrecOpConst
bool isLeftPrecOpConst() const
Definition
Thyra_DefaultPreconditioner_def.hpp:175
Thyra::DefaultPreconditioner::unspecifiedPrec
Teuchos::RCP< const DefaultPreconditioner< Scalar > > unspecifiedPrec(const Teuchos::RCP< const LinearOpBase< Scalar > > &unspecifiedPrecOp)
Create a precondioner from a single linear operator not targeted to be used on the left or the right.
Definition
Thyra_DefaultPreconditioner_decl.hpp:201
Thyra::DefaultPreconditioner::initializeLeft
void initializeLeft(const Teuchos::RCP< LinearOpBase< Scalar > > &leftPrecOp)
Initialize a left preconditioner.
Definition
Thyra_DefaultPreconditioner_def.hpp:79
Thyra::DefaultPreconditioner::splitPrec
Teuchos::RCP< const DefaultPreconditioner< Scalar > > splitPrec(const Teuchos::RCP< const LinearOpBase< Scalar > > &leftPrecOp, const Teuchos::RCP< const LinearOpBase< Scalar > > &rightPrecOp)
Create a split precondioner from two linear operators, one to be applied on the left and one to be ap...
Definition
Thyra_DefaultPreconditioner_decl.hpp:259
Thyra::DefaultPreconditioner::description
std::string description() const
Definition
Thyra_DefaultPreconditioner_def.hpp:247
Thyra::DefaultPreconditioner::DefaultPreconditioner
DefaultPreconditioner()
Construct to uninitialized.
Definition
Thyra_DefaultPreconditioner_def.hpp:24
Thyra::DefaultPreconditioner::initializeRight
void initializeRight(const Teuchos::RCP< LinearOpBase< Scalar > > &rightPrecOp)
Initialize a right preconditioner.
Definition
Thyra_DefaultPreconditioner_def.hpp:99
Thyra::DefaultPreconditioner::getNonconstUnspecifiedPrecOp
Teuchos::RCP< LinearOpBase< Scalar > > getNonconstUnspecifiedPrecOp()
Definition
Thyra_DefaultPreconditioner_def.hpp:229
Thyra::DefaultPreconditioner::uninitialize
void uninitialize()
Uninitialize.
Definition
Thyra_DefaultPreconditioner_def.hpp:163
Thyra::DefaultPreconditioner::getLeftPrecOp
Teuchos::RCP< const LinearOpBase< Scalar > > getLeftPrecOp() const
Definition
Thyra_DefaultPreconditioner_def.hpp:191
Thyra::DefaultPreconditioner::isRightPrecOpConst
bool isRightPrecOpConst() const
Definition
Thyra_DefaultPreconditioner_def.hpp:198
Thyra::DefaultPreconditioner::initializeLeftRight
void initializeLeftRight(const Teuchos::RCP< LinearOpBase< Scalar > > &leftPrecOp, const Teuchos::RCP< LinearOpBase< Scalar > > &rightPrecOp)
Initialize a split left/right preconditioner.
Definition
Thyra_DefaultPreconditioner_def.hpp:119
Thyra::LinearOpBase
Base class for all linear operators.
Definition
Thyra_LinearOpBase_decl.hpp:159
Thyra::PreconditionerBase
Simple interface class to access a precreated preconditioner as one or more linear operators objects ...
Definition
Thyra_PreconditionerBase.hpp:58
Teuchos::FancyOStream
basic_FancyOStream< char > FancyOStream
Teuchos::EVerbosityLevel
EVerbosityLevel
Teuchos::rcp
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Generated by
1.17.0