Teko  Version of the Day
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 
52 namespace Teko {
53 namespace NS {
54 
55 class LSCPrecondState; // forward declration
56 
67 public:
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 
200 protected:
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 
214 private:
216 
217 public:
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