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_LSCStrategy_hpp__
00048 #define __Teko_LSCStrategy_hpp__
00049
00050 #include "Teuchos_RCP.hpp"
00051
00052 #include "Thyra_LinearOpBase.hpp"
00053
00054 #include "Teko_Utilities.hpp"
00055 #include "Teko_InverseFactory.hpp"
00056 #include "Teko_BlockPreconditionerFactory.hpp"
00057
00058 namespace Teko {
00059 namespace NS {
00060
00061 class LSCPrecondState;
00062
00119 class LSCStrategy {
00120 public:
00121 virtual ~LSCStrategy() {}
00122
00130 virtual void buildState(BlockedLinearOp & A,BlockPreconditionerState & state) const = 0;
00131
00140 virtual LinearOp getInvBQBt(const BlockedLinearOp & A,BlockPreconditionerState & state) const = 0;
00141
00150 virtual LinearOp getInvBHBt(const BlockedLinearOp & A,BlockPreconditionerState & state) const = 0;
00151
00160 virtual LinearOp getInvF(const BlockedLinearOp & A,BlockPreconditionerState & state) const = 0;
00161
00162 #if 0
00163
00171 virtual LinearOp getInvAlphaD(const BlockedLinearOp & A,BlockPreconditionerState & state) const = 0;
00172 #endif
00173
00184 virtual LinearOp getOuterStabilization(const BlockedLinearOp & A,BlockPreconditionerState & state) const = 0;
00185
00196 virtual LinearOp getInnerStabilization(const BlockedLinearOp & A,BlockPreconditionerState & state) const = 0;
00197
00206 virtual LinearOp getInvMass(const BlockedLinearOp & A,BlockPreconditionerState & state) const = 0;
00207
00216 virtual LinearOp getHScaling(const BlockedLinearOp & A,BlockPreconditionerState & state) const = 0;
00217
00224 virtual bool useFullLDU() const = 0;
00225
00231 virtual void setSymmetric(bool isSymmetric) = 0;
00232
00234 virtual void initializeFromParameterList(const Teuchos::ParameterList & pl,const InverseLibrary & invLib) {}
00235
00237 virtual Teuchos::RCP<Teuchos::ParameterList> getRequestedParameters() const { return Teuchos::null;}
00238
00240 virtual bool updateRequestedParameters(const Teuchos::ParameterList & pl) { return true; }
00241
00243 void setRequestHandler(const Teuchos::RCP<RequestHandler> & rh)
00244 { requestHandler_ = rh; }
00245
00247 Teuchos::RCP<RequestHandler> getRequestHandler() const
00248 { return requestHandler_; }
00249
00250 private:
00251 Teuchos::RCP<RequestHandler> requestHandler_;
00252
00253 };
00254
00255 }
00256 }
00257
00258 #endif