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_LU2x2Strategy_hpp__
00048 #define __Teko_LU2x2Strategy_hpp__
00049
00050 #include "Teuchos_RCP.hpp"
00051 #include "Thyra_LinearOpBase.hpp"
00052
00053 #include "Teko_Utilities.hpp"
00054 #include "Teko_InverseFactory.hpp"
00055 #include "Teko_BlockPreconditionerFactory.hpp"
00056
00057
00058 namespace Teko {
00059
00103 class LU2x2Strategy {
00104 public:
00105 virtual ~LU2x2Strategy() {}
00106
00108 virtual const Teko::LinearOp
00109 getHatInvA00(const Teko::BlockedLinearOp & A,BlockPreconditionerState & state) const = 0;
00110
00112 virtual const Teko::LinearOp
00113 getTildeInvA00(const Teko::BlockedLinearOp & A,BlockPreconditionerState & state) const = 0;
00114
00116 virtual const Teko::LinearOp
00117 getInvS(const Teko::BlockedLinearOp & A,BlockPreconditionerState & state) const = 0;
00118
00130 virtual void initializeFromParameterList(const Teuchos::ParameterList & settings,
00131 const InverseLibrary & invLib)
00132 { }
00133
00148 virtual Teuchos::RCP<Teuchos::ParameterList> getRequestedParameters() const
00149 { return Teuchos::null; }
00150
00164 virtual bool updateRequestedParameters(const Teuchos::ParameterList & pl)
00165 { return true; }
00166
00168 void setRequestHandler(const Teuchos::RCP<RequestHandler> & rh)
00169 { requestHandler_ = rh; }
00170
00172 Teuchos::RCP<RequestHandler> getRequestHandler() const
00173 { return requestHandler_; }
00174
00175 private:
00176 Teuchos::RCP<RequestHandler> requestHandler_;
00177
00178 };
00179
00188 class StaticLU2x2Strategy : public LU2x2Strategy {
00189 public:
00198 StaticLU2x2Strategy(const Teko::LinearOp & hInvA00,
00199 const Teko::LinearOp & tInvA00,
00200 const Teko::LinearOp & invS)
00201 : hatInvA00_(hInvA00), tildeInvA00_(tInvA00), invS_(invS)
00202 {}
00203
00204 virtual ~StaticLU2x2Strategy() {}
00205
00208
00210 virtual const Teko::LinearOp
00211 getHatInvA00(const Teko::BlockedLinearOp & A,BlockPreconditionerState & state) const
00212 { return hatInvA00_; }
00213
00215 virtual const Teko::LinearOp
00216 getTildeInvA00(const Teko::BlockedLinearOp & A,BlockPreconditionerState & state) const
00217 { return tildeInvA00_; }
00218
00220 virtual const Teko::LinearOp
00221 getInvS(const Teko::BlockedLinearOp & A,BlockPreconditionerState & state) const
00222 { return invS_; }
00223
00225
00226 protected:
00227 const Teko::LinearOp hatInvA00_;
00228 const Teko::LinearOp tildeInvA00_;
00229 const Teko::LinearOp invS_;
00231 private:
00232
00233 StaticLU2x2Strategy() {}
00234 };
00235
00236 }
00237
00238 #endif