00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047 #ifndef __Teko_PresLaplaceLSCStrategy_hpp__
00048 #define __Teko_PresLaplaceLSCStrategy_hpp__
00049
00050 #include "Teko_LSCStrategy.hpp"
00051
00052 namespace Teko {
00053 namespace NS {
00054
00055 class LSCPrecondState;
00056
00066 class PresLaplaceLSCStrategy : public LSCStrategy {
00067 public:
00069
00070 PresLaplaceLSCStrategy();
00071 PresLaplaceLSCStrategy(const Teuchos::RCP<InverseFactory> & factory);
00072 PresLaplaceLSCStrategy(const Teuchos::RCP<InverseFactory> & invFactF,
00073 const Teuchos::RCP<InverseFactory> & invFactS);
00075
00076 virtual ~PresLaplaceLSCStrategy() {}
00077
00079
00080
00088 virtual void buildState(BlockedLinearOp & A,BlockPreconditionerState & state) const;
00089
00098 virtual LinearOp getInvBQBt(const BlockedLinearOp & A,BlockPreconditionerState & state) const;
00099
00108 virtual LinearOp getInvBHBt(const BlockedLinearOp & A,BlockPreconditionerState & state) const;
00109
00118 virtual LinearOp getInvF(const BlockedLinearOp & A,BlockPreconditionerState & state) const;
00119
00128
00129 virtual LinearOp getOuterStabilization(const BlockedLinearOp & A,BlockPreconditionerState & state) const;
00130
00131 virtual LinearOp getInnerStabilization(const BlockedLinearOp & A,BlockPreconditionerState & state) const
00132 { return Teuchos::null; }
00133
00142 virtual LinearOp getInvMass(const BlockedLinearOp & A,BlockPreconditionerState & state) const;
00143
00152 virtual LinearOp getHScaling(const BlockedLinearOp & A,BlockPreconditionerState & state) const;
00153
00160 virtual bool useFullLDU() const { return useFullLDU_; }
00161
00167 virtual void setSymmetric(bool isSymmetric)
00168 { isSymmetric_ = isSymmetric; }
00169
00171 virtual void initializeFromParameterList(const Teuchos::ParameterList & pl,
00172 const InverseLibrary & invLib);
00173
00175 virtual Teuchos::RCP<Teuchos::ParameterList> getRequestedParameters() const;
00176
00178 virtual bool updateRequestedParameters(const Teuchos::ParameterList & pl);
00180
00182 virtual void initializeState(const BlockedLinearOp & A,LSCPrecondState * state) const;
00183
00189 void computeInverses(const BlockedLinearOp & A,LSCPrecondState * state) const;
00190
00192 virtual void setEigSolveParam(int sz) { eigSolveParam_ = sz; }
00193
00195 virtual int getEigSolveParam() { return eigSolveParam_; }
00196
00198 virtual void setUseFullLDU(bool val) { useFullLDU_ = val; }
00199
00200 protected:
00201
00202 Teuchos::RCP<InverseFactory> invFactoryV_;
00203 Teuchos::RCP<InverseFactory> invFactoryP_;
00204
00205
00206 bool isSymmetric_;
00207 int eigSolveParam_;
00208 bool useFullLDU_;
00209
00210
00211 bool useMass_;
00212 DiagonalType scaleType_;
00213
00214 private:
00215 PresLaplaceLSCStrategy(const PresLaplaceLSCStrategy &);
00216
00217 public:
00218
00219
00220 static std::string getPressureLaplaceString() { return "Pressure Laplace Operator"; }
00221 static std::string getVelocityMassString() { return "Velocity Mass Operator"; }
00222 };
00223
00224 }
00225 }
00226
00227 #endif