Teko  Version of the Day
 All Classes Files Functions Variables Pages
Teko_LSCPreconditionerFactory.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_LSCPreconditionerFactory_hpp__
48 #define __Teko_LSCPreconditionerFactory_hpp__
49 
50 #include "Teko_BlockPreconditionerFactory.hpp"
51 #include "Teko_LSCStrategy.hpp"
52 
53 namespace Teko {
54 namespace NS { // Navier-Stokes specialization
55 
65  public:
66  LSCPrecondState() {}
67 
69  LinearOp invMass_;
70 
73  ModifiableLinearOp BQBt_;
74 
77  ModifiableLinearOp BHBt_;
78 
81  LinearOp BQBtmC_;
82  InverseLinearOp invBQBtmC_;
83 
86  LinearOp BHBtmC_;
87  InverseLinearOp invBHBtmC_;
88 
90  LinearOp aiD_;
91 
93  double gamma_;
94 
98  double alpha_;
99 };
100 
101 class LSCPreconditionerFactory : public BlockPreconditionerFactory {
102  public:
104 
105 
107  LSCPreconditionerFactory(const LinearOp& invF, const LinearOp& invBQBtmC, const LinearOp& invD,
108  const LinearOp& invMass);
109 
111  LSCPreconditionerFactory(const LinearOp& invF, const LinearOp& invBQBtmC,
112  const LinearOp& invMass);
113 
115  LSCPreconditionerFactory(const Teuchos::RCP<LSCStrategy>& strategy);
116 
118  LSCPreconditionerFactory();
120 
122  virtual LinearOp buildPreconditionerOperator(BlockedLinearOp& blo,
123  BlockPreconditionerState& state) const;
124 
126  virtual RCP<PreconditionerState> buildPreconditionerState() const {
127  return rcp(new LSCPrecondState());
128  }
129 
131  virtual Teuchos::RCP<Teuchos::ParameterList> getRequestedParameters() const;
132 
134  virtual bool updateRequestedParameters(const Teuchos::ParameterList& pl);
135 
136  protected:
138 
139  // Gimmie object
140  Teuchos::RCP<LSCStrategy> invOpsStrategy_;
141  bool isSymmetric_;
142 
144  virtual void initializeFromParameterList(const Teuchos::ParameterList& pl);
145 
146  public:
159  static RCP<LSCStrategy> buildStrategy(const std::string& name,
160  const Teuchos::ParameterList& settings,
161  const RCP<const InverseLibrary>& invLib,
162  const RCP<RequestHandler>& rh);
163 
177  static void addStrategy(const std::string& name, const RCP<Cloneable>& clone);
178 
179  private:
181  static CloneFactory<LSCStrategy> strategyBuilder_;
182 
184  static void initializeStrategyBuilder();
185 };
186 
187 } // end namespace NS
188 } // end namespace Teko
189 
190 #endif
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...
Abstract class which block preconditioner factories in Teko should be based on.
An implementation of a state object for block preconditioners.
LinearOp invMass_
Inverse mass operator ( )
Preconditioner state for the LSC factory.