Go to the documentation of this file.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
00052 #ifndef __Teko_LU2x2InverseOp_hpp__
00053 #define __Teko_LU2x2InverseOp_hpp__
00054
00055 #include "Teko_Utilities.hpp"
00056 #include "Teko_BlockImplicitLinearOp.hpp"
00057
00058 namespace Teko {
00059
00101 class LU2x2InverseOp : public BlockImplicitLinearOp {
00102 public:
00113 LU2x2InverseOp(const BlockedLinearOp & A,
00114 const LinearOp & invA00,
00115 const LinearOp & invS);
00116
00128 LU2x2InverseOp(const BlockedLinearOp & A,
00129 const LinearOp & hatInvA00,
00130 const LinearOp & tildeInvA00,
00131 const LinearOp & invS);
00132
00134
00135
00137 virtual VectorSpace range() const { return productRange_; }
00138
00140 virtual VectorSpace domain() const { return productDomain_; }
00141
00154 virtual void implicitApply(const BlockedMultiVector & x, BlockedMultiVector & y,
00155 const double alpha = 1.0, const double beta = 0.0) const;
00157
00158 virtual void describe(Teuchos::FancyOStream & out_arg,
00159 const Teuchos::EVerbosityLevel verbLevel) const;
00160
00161 protected:
00162
00163 const BlockedLinearOp A_;
00164 const LinearOp hatInvA00_;
00165 const LinearOp tildeInvA00_;
00166 const LinearOp invS_;
00167
00168
00169 const LinearOp A10_;
00170 const LinearOp A01_;
00171
00172 Teuchos::RCP<const Thyra::ProductVectorSpaceBase<double> > productRange_;
00173 Teuchos::RCP<const Thyra::ProductVectorSpaceBase<double> > productDomain_;
00174
00175 private:
00176
00177 LU2x2InverseOp();
00178 LU2x2InverseOp(const LU2x2InverseOp &);
00179 };
00180
00194 inline LinearOp createLU2x2InverseOp(BlockedLinearOp & A,LinearOp & invA00,LinearOp & invS)
00195 {
00196 return Teuchos::rcp(new LU2x2InverseOp(A,invA00,invS));
00197 }
00198
00213 inline LinearOp createLU2x2InverseOp(BlockedLinearOp & A,LinearOp & invA00,LinearOp & invS,const std::string & str)
00214 {
00215 Teuchos::RCP<Thyra::LinearOpBase<double> > result = Teuchos::rcp(new LU2x2InverseOp(A,invA00,invS));
00216 result->setObjectLabel(str);
00217
00218 return result;
00219 }
00220
00235 inline LinearOp createLU2x2InverseOp(BlockedLinearOp & A,LinearOp & hatInvA00,LinearOp & tildeInvA00,LinearOp & invS)
00236 {
00237 return Teuchos::rcp(new LU2x2InverseOp(A,hatInvA00,tildeInvA00,invS));
00238 }
00239
00255 inline LinearOp createLU2x2InverseOp(BlockedLinearOp & A,LinearOp & hatInvA00,LinearOp & tildeInvA00,LinearOp & invS,const std::string & str)
00256 {
00257 Teuchos::RCP<Thyra::LinearOpBase<double> > result = Teuchos::rcp(new LU2x2InverseOp(A,hatInvA00,tildeInvA00,invS));
00258 result->setObjectLabel(str);
00259
00260 return result;
00261 }
00262
00263 }
00264
00265 #endif