Teko Version of the Day
Loading...
Searching...
No Matches
Teko_PresLaplaceLSCStrategy.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_PresLaplaceLSCStrategy_hpp__
48#define __Teko_PresLaplaceLSCStrategy_hpp__
49
50#include "Teko_LSCStrategy.hpp"
51
52namespace Teko {
53namespace NS {
54
55class LSCPrecondState; // forward declration
56
67public:
69
71 PresLaplaceLSCStrategy(const Teuchos::RCP<InverseFactory> & factory);
72 PresLaplaceLSCStrategy(const Teuchos::RCP<InverseFactory> & invFactF,
73 const Teuchos::RCP<InverseFactory> & invFactS);
75
76 virtual ~PresLaplaceLSCStrategy() {}
77
79
80
88 virtual void buildState(BlockedLinearOp & A,BlockPreconditionerState & state) const;
89
98 virtual LinearOp getInvBQBt(const BlockedLinearOp & A,BlockPreconditionerState & state) const;
99
108 virtual LinearOp getInvBHBt(const BlockedLinearOp & A,BlockPreconditionerState & state) const;
109
118 virtual LinearOp getInvF(const BlockedLinearOp & A,BlockPreconditionerState & state) const;
119
128 // virtual LinearOp getInvAlphaD(const BlockedLinearOp & A,BlockPreconditionerState & state) const;
129 virtual LinearOp getOuterStabilization(const BlockedLinearOp & A,BlockPreconditionerState & state) const;
130
131 virtual LinearOp getInnerStabilization(const BlockedLinearOp & /* A */,BlockPreconditionerState & /* state */) const
132 { return Teuchos::null; }
133
142 virtual LinearOp getInvMass(const BlockedLinearOp & A,BlockPreconditionerState & state) const;
143
152 virtual LinearOp getHScaling(const BlockedLinearOp & A,BlockPreconditionerState & state) const;
153
160 virtual bool useFullLDU() const { return useFullLDU_; }
161
167 virtual void setSymmetric(bool isSymmetric)
168 { isSymmetric_ = isSymmetric; }
169
171 virtual void initializeFromParameterList(const Teuchos::ParameterList & pl,
172 const InverseLibrary & invLib);
173
175 virtual Teuchos::RCP<Teuchos::ParameterList> getRequestedParameters() const;
176
178 virtual bool updateRequestedParameters(const Teuchos::ParameterList & pl);
180
182 virtual void initializeState(const BlockedLinearOp & A,LSCPrecondState * state) const;
183
189 void computeInverses(const BlockedLinearOp & A,LSCPrecondState * state) const;
190
192 virtual void setEigSolveParam(int sz) { eigSolveParam_ = sz; }
193
195 virtual int getEigSolveParam() { return eigSolveParam_; }
196
198 virtual void setUseFullLDU(bool val) { useFullLDU_ = val; }
199
200protected:
201 // how to invert the matrices
202 Teuchos::RCP<InverseFactory> invFactoryV_;
203 Teuchos::RCP<InverseFactory> invFactoryP_;
204
205 // flags for handling various options
206 bool isSymmetric_;
207 int eigSolveParam_;
208 bool useFullLDU_;
209
210 // scaling operator parameters
211 bool useMass_;
212 DiagonalType scaleType_;
213
214private:
216
217public:
218 // some static functions for determining strings
219
220 static std::string getPressureLaplaceString() { return "Pressure Laplace Operator"; }
221 static std::string getVelocityMassString() { return "Velocity Mass Operator"; }
222};
223
224} // end namespace NS
225} // end namespace Teko
226
227#endif
DiagonalType
Type describing the type of diagonal to construct.
An implementation of a state object for block preconditioners.
Preconditioner state for the LSC factory.
Strategy for driving LSCPreconditionerFactory.
A strategy that takes a single inverse factory and uses that for all inverses. If no mass matrix is p...
virtual void initializeFromParameterList(const Teuchos::ParameterList &pl, const InverseLibrary &invLib)
Initialize from a parameter list.
virtual int getEigSolveParam()
Return the number of power series iterations to use when finding the spectral radius.
virtual void setSymmetric(bool isSymmetric)
virtual void initializeState(const BlockedLinearOp &A, LSCPrecondState *state) const
Initialize the state object using this blocked linear operator.
virtual LinearOp getHScaling(const BlockedLinearOp &A, BlockPreconditionerState &state) const
virtual LinearOp getInvMass(const BlockedLinearOp &A, BlockPreconditionerState &state) const
virtual bool updateRequestedParameters(const Teuchos::ParameterList &pl)
For assiting in construction of the preconditioner.
virtual LinearOp getInvBQBt(const BlockedLinearOp &A, BlockPreconditionerState &state) const
virtual Teuchos::RCP< Teuchos::ParameterList > getRequestedParameters() const
For assiting in construction of the preconditioner.
virtual LinearOp getInvF(const BlockedLinearOp &A, BlockPreconditionerState &state) const
void computeInverses(const BlockedLinearOp &A, LSCPrecondState *state) const
virtual LinearOp getOuterStabilization(const BlockedLinearOp &A, BlockPreconditionerState &state) const
virtual LinearOp getInnerStabilization(const BlockedLinearOp &, BlockPreconditionerState &) const
virtual void buildState(BlockedLinearOp &A, BlockPreconditionerState &state) const
Functions inherited from LSCStrategy.
virtual void setUseFullLDU(bool val)
Set to true to use the Full LDU decomposition, false otherwise.
virtual void setEigSolveParam(int sz)
Set the number of power series iterations to use when finding the spectral radius.
virtual LinearOp getInvBHBt(const BlockedLinearOp &A, BlockPreconditionerState &state) const