Teko
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
src
Teko_BlockInvDiagonalStrategy.hpp
1
/*
2
// @HEADER
3
//
4
// ***********************************************************************
5
//
6
// Teko: A package for block and physics based preconditioning
7
// Copyright 2010 Sandia Corporation
8
//
9
// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
10
// the U.S. Government retains certain rights in this software.
11
//
12
// Redistribution and use in source and binary forms, with or without
13
// modification, are permitted provided that the following conditions are
14
// met:
15
//
16
// 1. Redistributions of source code must retain the above copyright
17
// notice, this list of conditions and the following disclaimer.
18
//
19
// 2. Redistributions in binary form must reproduce the above copyright
20
// notice, this list of conditions and the following disclaimer in the
21
// documentation and/or other materials provided with the distribution.
22
//
23
// 3. Neither the name of the Corporation nor the names of the
24
// contributors may be used to endorse or promote products derived from
25
// this software without specific prior written permission.
26
//
27
// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
28
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
29
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
30
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
31
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
32
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
33
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
34
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
35
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
36
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
37
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38
//
39
// Questions? Contact Eric C. Cyr (eccyr@sandia.gov)
40
//
41
// ***********************************************************************
42
//
43
// @HEADER
44
45
*/
46
47
#ifndef __Teko_BlockInvDiagonalStrategy_hpp__
48
#define __Teko_BlockInvDiagonalStrategy_hpp__
49
50
#include <vector>
51
52
// Teuchos includes
53
#include "Teuchos_RCP.hpp"
54
55
// Thyra includes
56
#include "Thyra_LinearOpBase.hpp"
57
58
// Teko includes
59
#include "
Teko_Utilities.hpp
"
60
#include "Teko_InverseFactory.hpp"
61
#include "Teko_BlockPreconditionerFactory.hpp"
62
63
namespace
Teko {
64
79
class
BlockInvDiagonalStrategy
{
80
public
:
81
virtual
~BlockInvDiagonalStrategy
() {}
82
84
virtual
void
getInvD
(
const
BlockedLinearOp & A,
BlockPreconditionerState
& state,
85
std::vector<LinearOp> & invDiag)
const
= 0;
86
87
};
88
95
class
StaticInvDiagStrategy :
public
BlockInvDiagonalStrategy
{
96
public
:
97
StaticInvDiagStrategy(
const
LinearOp & invD0,
98
const
LinearOp & invD1)
99
{ invDiag_.push_back(invD0); invDiag_.push_back(invD1); }
100
101
StaticInvDiagStrategy(
const
std::vector<LinearOp> & invD)
102
: invDiag_(invD)
103
{ }
104
105
virtual
~StaticInvDiagStrategy() {}
106
110
virtual
void
getInvD
(
const
BlockedLinearOp &
/* A */
,
BlockPreconditionerState
&
/* state */
,
111
std::vector<LinearOp> & invDiag)
const
112
{ invDiag.clear(); invDiag = invDiag_; }
113
114
protected
:
115
// stored inverse operators
116
std::vector<Teuchos::RCP<const Thyra::LinearOpBase<double> > > invDiag_;
117
};
118
123
class
InvFactoryDiagStrategy
:
public
BlockInvDiagonalStrategy
{
124
public
:
130
InvFactoryDiagStrategy
(
const
Teuchos::RCP<InverseFactory> & factory);
131
139
InvFactoryDiagStrategy
(
const
std::vector<Teuchos::RCP<InverseFactory> > & factories,
140
const
Teuchos::RCP<InverseFactory> & defaultFact=Teuchos::null);
141
142
virtual
~InvFactoryDiagStrategy
() {}
143
151
virtual
void
getInvD
(
const
BlockedLinearOp & A,
BlockPreconditionerState
& state,
152
std::vector<LinearOp> & invDiag)
const
;
153
155
const
std::vector<Teuchos::RCP<InverseFactory> > &
getFactories
()
const
156
{
return
invDiagFact_; }
157
158
protected
:
159
// stored inverse operators
160
std::vector<Teuchos::RCP<InverseFactory> > invDiagFact_;
161
Teuchos::RCP<InverseFactory> defaultInvFact_;
162
164
LinearOp
buildInverse
(
const
InverseFactory
& invFact,
const
LinearOp & matrix,
165
BlockPreconditionerState
& state,
166
const
std::string & opPrefix,
int
i)
const
;
167
168
private
:
169
InvFactoryDiagStrategy
();
170
InvFactoryDiagStrategy
(
const
InvFactoryDiagStrategy
&);
171
};
172
173
}
// end namespace Teko
174
175
#endif
Teko_Utilities.hpp
Teko::BlockInvDiagonalStrategy
Definition
Teko_BlockInvDiagonalStrategy.hpp:79
Teko::BlockInvDiagonalStrategy::getInvD
virtual void getInvD(const BlockedLinearOp &A, BlockPreconditionerState &state, std::vector< LinearOp > &invDiag) const =0
returns an (approximate) inverse of the diagonal blocks of A
Teko::BlockPreconditionerState
An implementation of a state object for block preconditioners.
Definition
Teko_BlockPreconditionerFactory.hpp:80
Teko::InvFactoryDiagStrategy
Definition
Teko_BlockInvDiagonalStrategy.hpp:123
Teko::InvFactoryDiagStrategy::InvFactoryDiagStrategy
InvFactoryDiagStrategy(const Teuchos::RCP< InverseFactory > &factory)
Definition
Teko_BlockInvDiagonalStrategy.cpp:51
Teko::InvFactoryDiagStrategy::buildInverse
LinearOp buildInverse(const InverseFactory &invFact, const LinearOp &matrix, BlockPreconditionerState &state, const std::string &opPrefix, int i) const
Conveinence function for building inverse operators.
Definition
Teko_BlockInvDiagonalStrategy.cpp:96
Teko::InvFactoryDiagStrategy::getFactories
const std::vector< Teuchos::RCP< InverseFactory > > & getFactories() const
Get factories for testing purposes.
Definition
Teko_BlockInvDiagonalStrategy.hpp:155
Teko::InvFactoryDiagStrategy::getInvD
virtual void getInvD(const BlockedLinearOp &A, BlockPreconditionerState &state, std::vector< LinearOp > &invDiag) const
Definition
Teko_BlockInvDiagonalStrategy.cpp:72
Teko::InverseFactory
Abstract class for building an inverse operator.
Definition
Teko_InverseFactory.hpp:71
Teko::StaticInvDiagStrategy::getInvD
virtual void getInvD(const BlockedLinearOp &, BlockPreconditionerState &, std::vector< LinearOp > &invDiag) const
Definition
Teko_BlockInvDiagonalStrategy.hpp:110
Generated by
1.17.0