Teko
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
src
Teko_BlockPreconditionerFactory.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_BlockPreconditionerFactory_hpp__
48
#define __Teko_BlockPreconditionerFactory_hpp__
49
50
#include "Teuchos_ParameterListAcceptor.hpp"
51
52
// Thyra includes
53
#include "Thyra_SolveSupportTypes.hpp"
54
#include "Thyra_LinearOpSourceBase.hpp"
55
#include "Thyra_PreconditionerFactoryBase.hpp"
56
#include "Thyra_DefaultBlockedLinearOp.hpp"
57
#include "Thyra_DefaultPreconditioner.hpp"
58
59
// Teko includes
60
#include "
Teko_Utilities.hpp
"
61
#include "Teko_InverseLibrary.hpp"
62
#include "Teko_CloneFactory.hpp"
63
#include "Teko_PreconditionerState.hpp"
64
#include "Teko_PreconditionerFactory.hpp"
65
66
namespace
Teko {
67
68
using
Thyra::LinearOpBase;
69
using
Thyra::DefaultPreconditioner;
70
using
Teuchos::rcp;
71
using
Teuchos::RCP;
72
using
Teuchos::ParameterList;
73
80
class
BlockPreconditionerState
:
public
PreconditionerState {
81
public
:
83
virtual
void
setBlockSourceVector
(
const
Teko::BlockedMultiVector & srcVec)
84
{
setSourceVector
(srcVec); }
85
87
virtual
const
Teko::BlockedMultiVector
getBlockedSourceVector
()
const
88
{
return
toBlockedMultiVector
(
getSourceVector
()); }
89
};
90
98
class
BlockPreconditionerFactory
99
:
public
PreconditionerFactory
{
100
public
:
101
115
virtual
LinearOp
buildPreconditionerOperator
(BlockedLinearOp & blo,
BlockPreconditionerState
& state)
const
= 0;
116
129
virtual
RCP<PreconditionerState>
buildPreconditionerState
()
const
130
{
return
rcp(
new
BlockPreconditionerState
()); }
131
138
RCP<BlockPreconditionerState>
buildBlockPreconditionerState
()
const
139
{
return
Teuchos::rcp_dynamic_cast<BlockPreconditionerState>(
buildPreconditionerState
()); }
140
141
virtual
LinearOp
buildPreconditionerOperator
(LinearOp & blo,
PreconditionerState
& state)
const
;
142
144
bool
isCompatible
(
const
Thyra::LinearOpSourceBase<double> &fwdOpSrc)
const
;
145
};
146
147
}
// end namespace Teko
148
149
#endif
Teko_Utilities.hpp
Teko::toBlockedMultiVector
const BlockedMultiVector toBlockedMultiVector(const MultiVector &bmv)
Convert to a BlockedMultiVector from a MultiVector.
Definition
Teko_Utilities.hpp:225
Teko::BlockPreconditionerFactory
Abstract class which block preconditioner factories in Teko should be based on.
Definition
Teko_BlockPreconditionerFactory.hpp:99
Teko::BlockPreconditionerFactory::buildPreconditionerOperator
virtual LinearOp buildPreconditionerOperator(BlockedLinearOp &blo, BlockPreconditionerState &state) const =0
Function that is called to build the preconditioner for the linear operator that is passed in.
Teko::BlockPreconditionerFactory::isCompatible
bool isCompatible(const Thyra::LinearOpSourceBase< double > &fwdOpSrc) const
is this operator compatiable with the preconditioner factory?
Definition
Teko_BlockPreconditionerFactory.cpp:72
Teko::BlockPreconditionerFactory::buildPreconditionerState
virtual RCP< PreconditionerState > buildPreconditionerState() const
Function that permits the construction of an arbitrary BlockPreconditionerState object.
Definition
Teko_BlockPreconditionerFactory.hpp:129
Teko::BlockPreconditionerFactory::buildBlockPreconditionerState
RCP< BlockPreconditionerState > buildBlockPreconditionerState() const
Function that constructs a BlockPreconditionerState object.
Definition
Teko_BlockPreconditionerFactory.hpp:138
Teko::BlockPreconditionerState
An implementation of a state object for block preconditioners.
Definition
Teko_BlockPreconditionerFactory.hpp:80
Teko::BlockPreconditionerState::getBlockedSourceVector
virtual const Teko::BlockedMultiVector getBlockedSourceVector() const
Set the vector associated with this operator (think nonlinear system).
Definition
Teko_BlockPreconditionerFactory.hpp:87
Teko::BlockPreconditionerState::setBlockSourceVector
virtual void setBlockSourceVector(const Teko::BlockedMultiVector &srcVec)
Set the vector associated with this operator (think nonlinear system).
Definition
Teko_BlockPreconditionerFactory.hpp:83
Teko::PreconditionerFactory
Abstract class which block preconditioner factories in Teko should be based on.
Definition
Teko_PreconditionerFactory.hpp:84
Teko::PreconditionerState
An implementation of a state object preconditioners.
Definition
Teko_PreconditionerState.hpp:71
Teko::PreconditionerState::setSourceVector
virtual void setSourceVector(const Teko::MultiVector &srcVec)
Set the vector associated with this operator (think nonlinear system).
Definition
Teko_PreconditionerState.hpp:109
Teko::PreconditionerState::getSourceVector
virtual const Teko::MultiVector getSourceVector() const
Set the vector associated with this operator (think nonlinear system).
Definition
Teko_PreconditionerState.hpp:113
Generated by
1.17.0