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
102  : public BlockPreconditionerFactory {
103 public:
105 
106 
108  LSCPreconditionerFactory(const LinearOp & invF,const LinearOp & invBQBtmC,
109  const LinearOp & invD,const LinearOp & invMass);
110 
112  LSCPreconditionerFactory(const LinearOp & invF,
113  const LinearOp & invBQBtmC,
114  const LinearOp & invMass);
115 
117  LSCPreconditionerFactory(const Teuchos::RCP<LSCStrategy> & strategy);
118 
120  LSCPreconditionerFactory();
122 
124  virtual LinearOp buildPreconditionerOperator(BlockedLinearOp & blo,BlockPreconditionerState & state) const;
125 
127  virtual RCP<PreconditionerState> buildPreconditionerState() const
128  { return rcp(new LSCPrecondState()); }
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>
160  buildStrategy(const std::string & name,
161  const Teuchos::ParameterList & settings,
162  const RCP<const InverseLibrary> & invLib,
163  const RCP<RequestHandler> & rh);
164 
178  static void addStrategy(const std::string & name,const RCP<Cloneable> & clone);
179 
180 private:
182  static CloneFactory<LSCStrategy> strategyBuilder_;
183 
185  static void initializeStrategyBuilder();
186 };
187 
188 } // end namespace NS
189 } // end namespace Teko
190 
191 #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.