Teko Version of the Day
Loading...
Searching...
No Matches
Teko_PresLaplaceLSCStrategy.hpp
1// @HEADER
2// *****************************************************************************
3// Teko: A package for block and physics based preconditioning
4//
5// Copyright 2010 NTESS and the Teko contributors.
6// SPDX-License-Identifier: BSD-3-Clause
7// *****************************************************************************
8// @HEADER
9
10#ifndef __Teko_PresLaplaceLSCStrategy_hpp__
11#define __Teko_PresLaplaceLSCStrategy_hpp__
12
13#include "Teko_LSCStrategy.hpp"
14
15namespace Teko {
16namespace NS {
17
18class LSCPrecondState; // forward declration
19
35 public:
37
39 PresLaplaceLSCStrategy(const Teuchos::RCP<InverseFactory> &factory);
40 PresLaplaceLSCStrategy(const Teuchos::RCP<InverseFactory> &invFactF,
41 const Teuchos::RCP<InverseFactory> &invFactS);
43
44 virtual ~PresLaplaceLSCStrategy() {}
45
47
48
56 virtual void buildState(BlockedLinearOp &A, BlockPreconditionerState &state) const;
57
66 virtual LinearOp getInvBQBt(const BlockedLinearOp &A, BlockPreconditionerState &state) const;
67
76 virtual LinearOp getInvBHBt(const BlockedLinearOp &A, BlockPreconditionerState &state) const;
77
86 virtual LinearOp getInvF(const BlockedLinearOp &A, BlockPreconditionerState &state) const;
87
96 // virtual LinearOp getInvAlphaD(const BlockedLinearOp & A,BlockPreconditionerState & state)
97 // const;
98 virtual LinearOp getOuterStabilization(const BlockedLinearOp &A,
99 BlockPreconditionerState &state) const;
100
101 virtual LinearOp getInnerStabilization(const BlockedLinearOp & /* A */,
102 BlockPreconditionerState & /* state */) const {
103 return Teuchos::null;
104 }
105
114 virtual LinearOp getInvMass(const BlockedLinearOp &A, BlockPreconditionerState &state) const;
115
124 virtual LinearOp getHScaling(const BlockedLinearOp &A, BlockPreconditionerState &state) const;
125
132 virtual bool useFullLDU() const { return useFullLDU_; }
133
139 virtual void setSymmetric(bool isSymmetric) { isSymmetric_ = isSymmetric; }
140
142 virtual void initializeFromParameterList(const Teuchos::ParameterList &pl,
143 const InverseLibrary &invLib);
144
146 virtual Teuchos::RCP<Teuchos::ParameterList> getRequestedParameters() const;
147
149 virtual bool updateRequestedParameters(const Teuchos::ParameterList &pl);
151
153 virtual void initializeState(const BlockedLinearOp &A, LSCPrecondState *state) const;
154
160 void computeInverses(const BlockedLinearOp &A, LSCPrecondState *state) const;
161
163 virtual void setEigSolveParam(int sz) { eigSolveParam_ = sz; }
164
166 virtual int getEigSolveParam() { return eigSolveParam_; }
167
169 virtual void setUseFullLDU(bool val) { useFullLDU_ = val; }
170
171 protected:
172 // how to invert the matrices
173 Teuchos::RCP<InverseFactory> invFactoryV_;
174 Teuchos::RCP<InverseFactory> invFactoryP_;
175
176 // flags for handling various options
177 bool isSymmetric_;
178 int eigSolveParam_;
179 bool useFullLDU_;
180
181 // scaling operator parameters
182 bool useMass_;
183 DiagonalType scaleType_;
184
185 private:
187
188 public:
189 // some static functions for determining strings
190
191 static std::string getPressureLaplaceString() { return "Pressure Laplace Operator"; }
192 static std::string getVelocityMassString() { return "Velocity Mass Operator"; }
193};
194
195} // end namespace NS
196} // end namespace Teko
197
198#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.
Pressure-Laplace LSC strategy: build the Schur-complement approximation from a supplied pressure Lapl...
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