Thyra
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
core
src
support
operator_solve
client_support
Thyra_DefaultPreconditioner_def.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_DEF_HPP
11
#define THYRA_DEFUALT_PRECONDITIONER_DEF_HPP
12
13
#include "Thyra_DefaultPreconditioner_decl.hpp"
14
#include "Thyra_LinearOpBase.hpp"
15
16
17
namespace
Thyra {
18
19
20
// Constructors/initializers/accessors
21
22
23
template
<
class
Scalar>
24
DefaultPreconditioner<Scalar>::DefaultPreconditioner
()
25
{}
26
27
28
template
<
class
Scalar>
29
DefaultPreconditioner<Scalar>::DefaultPreconditioner
(
30
const
Teuchos::RCP
<
LinearOpBase<Scalar>
> &leftPrecOp,
31
const
Teuchos::RCP
<
LinearOpBase<Scalar>
> &rightPrecOp
32
)
33
{
34
#ifdef TEUCHOS_DEBUG
35
TEUCHOS_TEST_FOR_EXCEPT
( is_null(leftPrecOp) && is_null(rightPrecOp) );
36
#endif
37
if
(!is_null(leftPrecOp))
38
leftPrecOp_.initialize(leftPrecOp);
39
if
(!is_null(rightPrecOp))
40
rightPrecOp_.initialize(rightPrecOp);
41
}
42
43
44
template
<
class
Scalar>
45
DefaultPreconditioner<Scalar>::DefaultPreconditioner
(
46
const
Teuchos::RCP
<
const
LinearOpBase<Scalar>
> &leftPrecOp,
47
const
Teuchos::RCP
<
const
LinearOpBase<Scalar>
> &rightPrecOp
48
)
49
{
50
#ifdef TEUCHOS_DEBUG
51
TEUCHOS_TEST_FOR_EXCEPT
( is_null(leftPrecOp) && is_null(rightPrecOp) );
52
#endif
53
if
(!is_null(leftPrecOp))
54
leftPrecOp_.initialize(leftPrecOp);
55
if
(!is_null(rightPrecOp))
56
rightPrecOp_.initialize(rightPrecOp);
57
}
58
59
60
template
<
class
Scalar>
61
DefaultPreconditioner<Scalar>::DefaultPreconditioner
(
62
const
Teuchos::RCP
<
LinearOpBase<Scalar>
> &unspecifiedPrecOp
63
)
64
{
65
unspecifiedPrecOp_.initialize(unspecifiedPrecOp);
66
}
67
68
69
template
<
class
Scalar>
70
DefaultPreconditioner<Scalar>::DefaultPreconditioner
(
71
const
Teuchos::RCP
<
const
LinearOpBase<Scalar>
> &unspecifiedPrecOp
72
)
73
{
74
unspecifiedPrecOp_.initialize(unspecifiedPrecOp);
75
}
76
77
78
template
<
class
Scalar>
79
void
DefaultPreconditioner<Scalar>::initializeLeft
(
80
const
Teuchos::RCP
<
LinearOpBase<Scalar>
> &leftPrecOp
81
)
82
{
83
uninitialize
();
84
leftPrecOp_.initialize(leftPrecOp);
85
}
86
87
88
template
<
class
Scalar>
89
void
DefaultPreconditioner<Scalar>::initializeLeft
(
90
const
Teuchos::RCP
<
const
LinearOpBase<Scalar>
> &leftPrecOp
91
)
92
{
93
uninitialize
();
94
leftPrecOp_.initialize(leftPrecOp);
95
}
96
97
98
template
<
class
Scalar>
99
void
DefaultPreconditioner<Scalar>::initializeRight
(
100
const
Teuchos::RCP
<
LinearOpBase<Scalar>
> &rightPrecOp
101
)
102
{
103
uninitialize
();
104
rightPrecOp_.initialize(rightPrecOp);
105
}
106
107
108
template
<
class
Scalar>
109
void
DefaultPreconditioner<Scalar>::initializeRight
(
110
const
Teuchos::RCP
<
const
LinearOpBase<Scalar>
> &rightPrecOp
111
)
112
{
113
uninitialize
();
114
rightPrecOp_.initialize(rightPrecOp);
115
}
116
117
118
template
<
class
Scalar>
119
void
DefaultPreconditioner<Scalar>::initializeLeftRight
(
120
const
Teuchos::RCP
<
LinearOpBase<Scalar>
> &leftPrecOp,
121
const
Teuchos::RCP
<
LinearOpBase<Scalar>
> &rightPrecOp
122
)
123
{
124
uninitialize
();
125
rightPrecOp_.initialize(rightPrecOp);
126
leftPrecOp_.initialize(leftPrecOp);
127
}
128
129
130
template
<
class
Scalar>
131
void
DefaultPreconditioner<Scalar>::initializeLeftRight
(
132
const
Teuchos::RCP
<
const
LinearOpBase<Scalar>
> &leftPrecOp,
133
const
Teuchos::RCP
<
const
LinearOpBase<Scalar>
> &rightPrecOp
134
)
135
{
136
uninitialize
();
137
rightPrecOp_.initialize(rightPrecOp);
138
leftPrecOp_.initialize(leftPrecOp);
139
}
140
141
142
template
<
class
Scalar>
143
void
DefaultPreconditioner<Scalar>::initializeUnspecified
(
144
const
Teuchos::RCP
<
LinearOpBase<Scalar>
> &unspecifiedPrecOp
145
)
146
{
147
uninitialize
();
148
unspecifiedPrecOp_.initialize(unspecifiedPrecOp);
149
}
150
151
152
template
<
class
Scalar>
153
void
DefaultPreconditioner<Scalar>::initializeUnspecified
(
154
const
Teuchos::RCP
<
const
LinearOpBase<Scalar>
> &unspecifiedPrecOp
155
)
156
{
157
uninitialize
();
158
unspecifiedPrecOp_.initialize(unspecifiedPrecOp);
159
}
160
161
162
template
<
class
Scalar>
163
void
DefaultPreconditioner<Scalar>::uninitialize
()
164
{
165
leftPrecOp_.uninitialize();
166
rightPrecOp_.uninitialize();
167
unspecifiedPrecOp_.uninitialize();
168
}
169
170
171
// Overridden from PreconditionerBase
172
173
174
template
<
class
Scalar>
175
bool
DefaultPreconditioner<Scalar>::isLeftPrecOpConst
()
const
176
{
177
return
leftPrecOp_.isConst();
178
}
179
180
181
template
<
class
Scalar>
182
Teuchos::RCP<LinearOpBase<Scalar>
>
183
DefaultPreconditioner<Scalar>::getNonconstLeftPrecOp
()
184
{
185
return
leftPrecOp_.getNonconstObj();
186
}
187
188
189
template
<
class
Scalar>
190
Teuchos::RCP<const LinearOpBase<Scalar>
>
191
DefaultPreconditioner<Scalar>::getLeftPrecOp
()
const
192
{
193
return
leftPrecOp_.getConstObj();
194
}
195
196
197
template
<
class
Scalar>
198
bool
DefaultPreconditioner<Scalar>::isRightPrecOpConst
()
const
199
{
200
return
rightPrecOp_.isConst();
201
}
202
203
204
template
<
class
Scalar>
205
Teuchos::RCP<LinearOpBase<Scalar>
>
206
DefaultPreconditioner<Scalar>::getNonconstRightPrecOp
()
207
{
208
return
rightPrecOp_.getNonconstObj();
209
}
210
211
212
template
<
class
Scalar>
213
Teuchos::RCP<const LinearOpBase<Scalar>
>
214
DefaultPreconditioner<Scalar>::getRightPrecOp
()
const
215
{
216
return
rightPrecOp_.getConstObj();
217
}
218
219
220
template
<
class
Scalar>
221
bool
DefaultPreconditioner<Scalar>::isUnspecifiedPrecOpConst
()
const
222
{
223
return
unspecifiedPrecOp_.isConst();
224
}
225
226
227
template
<
class
Scalar>
228
Teuchos::RCP<LinearOpBase<Scalar>
>
229
DefaultPreconditioner<Scalar>::getNonconstUnspecifiedPrecOp
()
230
{
231
return
unspecifiedPrecOp_.getNonconstObj();
232
}
233
234
235
template
<
class
Scalar>
236
Teuchos::RCP<const LinearOpBase<Scalar>
>
237
DefaultPreconditioner<Scalar>::getUnspecifiedPrecOp
()
const
238
{
239
return
unspecifiedPrecOp_.getConstObj();
240
}
241
242
243
// Overridden from Teuchos::Describable
244
245
246
template
<
class
Scalar>
247
std::string
DefaultPreconditioner<Scalar>::description
()
const
248
{
249
std::ostringstream oss;
250
oss <<
Teuchos::Describable::description
() <<
"{"
;
251
bool
wroteOne =
false
;
252
if
(!is_null(leftPrecOp_.getConstObj())) {
253
if
(wroteOne) oss <<
","
;
254
oss <<
"leftPrecOp="
<< leftPrecOp_.getConstObj()->description();
255
wroteOne =
true
;
256
}
257
if
(!is_null(rightPrecOp_.getConstObj())) {
258
if
(wroteOne) oss <<
","
;
259
oss <<
"rightPrecOp="
<< rightPrecOp_.getConstObj()->description();
260
wroteOne =
true
;
261
}
262
if
(!is_null(unspecifiedPrecOp_.getConstObj())) {
263
if
(wroteOne) oss <<
","
;
264
oss <<
"unspecifiedPrecOp="
<< unspecifiedPrecOp_.getConstObj()->description();
265
wroteOne =
true
;
266
}
267
oss <<
"}"
;
268
return
oss.str();
269
}
270
271
272
template
<
class
Scalar>
273
void
DefaultPreconditioner<Scalar>::describe
(
274
Teuchos::FancyOStream
&out,
275
const
Teuchos::EVerbosityLevel
verbLevel
276
)
const
277
{
278
using
Teuchos::FancyOStream
;
279
using
Teuchos::OSTab
;
280
using
Teuchos::describe;
281
OSTab tab(out);
282
switch
(verbLevel) {
283
case
Teuchos::VERB_DEFAULT
:
284
case
Teuchos::VERB_LOW
:
285
out <<
Teuchos::Describable::description
() << std::endl;
286
break
;
287
case
Teuchos::VERB_MEDIUM
:
288
case
Teuchos::VERB_HIGH
:
289
case
Teuchos::VERB_EXTREME
:
290
{
291
out
292
<<
Teuchos::typeName
(*
this
) <<
"\n"
;
293
OSTab tab2(out);
294
if
(!is_null(leftPrecOp_.getConstObj()))
295
out <<
"leftPrecOp="
<<
describe
(*leftPrecOp_.getConstObj(),verbLevel);
296
if
(!is_null(rightPrecOp_.getConstObj()))
297
out <<
"rig htPrecOp="
<<
describe
(*rightPrecOp_.getConstObj(),verbLevel);
298
if
(!is_null(unspecifiedPrecOp_.getConstObj()))
299
out <<
"unspecifiedPrecOp="
<<
describe
(*unspecifiedPrecOp_.getConstObj(),verbLevel);
300
break
;
301
}
302
default
:
303
TEUCHOS_TEST_FOR_EXCEPT
(
true
);
// Should never get here!
304
}
305
}
306
307
308
}
// namespace Thyra
309
310
311
#endif
// THYRA_DEFUALT_PRECONDITIONER_DEF_HPP
Teuchos::Describable::description
virtual std::string description() const
Teuchos::RCP
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::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::initializeLeft
void initializeLeft(const Teuchos::RCP< LinearOpBase< Scalar > > &leftPrecOp)
Initialize a left preconditioner.
Definition
Thyra_DefaultPreconditioner_def.hpp:79
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
TEUCHOS_TEST_FOR_EXCEPT
#define TEUCHOS_TEST_FOR_EXCEPT(throw_exception_test)
Teuchos::typeName
std::string typeName(const T &t)
Teuchos::FancyOStream
basic_FancyOStream< char > FancyOStream
Teuchos::OSTab
basic_OSTab< char > OSTab
Teuchos::EVerbosityLevel
EVerbosityLevel
Teuchos::VERB_MEDIUM
VERB_MEDIUM
Teuchos::VERB_HIGH
VERB_HIGH
Teuchos::VERB_EXTREME
VERB_EXTREME
Teuchos::VERB_DEFAULT
VERB_DEFAULT
Teuchos::VERB_LOW
VERB_LOW
Generated by
1.17.0