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_InverseFactoryOperator_hpp__
00048 #define __Teko_InverseFactoryOperator_hpp__
00049
00050 #include "Teuchos_ConstNonconstObjectContainer.hpp"
00051
00052 #include "Teko_InverseFactory.hpp"
00053 #include "Teko_EpetraInverseOpWrapper.hpp"
00054
00055 namespace Teko {
00056 namespace Epetra {
00057
00068 class InverseFactoryOperator : public EpetraInverseOpWrapper {
00069 public:
00076 InverseFactoryOperator(const Teuchos::RCP<const InverseFactory> & bfp);
00077
00090 virtual void initInverse(bool clearOld=false);
00091
00104 virtual void buildInverseOperator(const Teuchos::RCP<const Epetra_Operator> & A,bool clear=true);
00105
00118 virtual void buildInverseOperator(const Teuchos::RCP<Epetra_Operator> & A,bool clear=true);
00119
00132 virtual void rebuildInverseOperator(const Teuchos::RCP<const Epetra_Operator> & A);
00133
00146 virtual void rebuildInverseOperator(const Teuchos::RCP<Epetra_Operator> & A);
00147
00151 Teuchos::RCP<const Epetra_Operator> getForwardOp() const { return fwdOp_.getConstObj(); }
00152
00156 Teuchos::RCP<Epetra_Operator> getNonconstForwardOp() const { return fwdOp_.getNonconstObj(); }
00157
00158 protected:
00159 Teuchos::RCP<const Thyra::LinearOpBase<double> > extractLinearOp(const Teuchos::RCP<const Epetra_Operator> & A) const;
00160 Teuchos::RCP<const MappingStrategy> extractMappingStrategy(const Teuchos::RCP<const Epetra_Operator> & A) const;
00161
00162 InverseFactoryOperator();
00163 InverseFactoryOperator(const InverseFactoryOperator &);
00164
00165 Teuchos::RCP<const Teko::InverseFactory> inverseFactory_;
00166 Teko::ModifiableLinearOp invOperator_;
00167 bool firstBuildComplete_;
00168
00169 Teuchos::ConstNonconstObjectContainer<Epetra_Operator> fwdOp_;
00170 bool setConstFwdOp_;
00171 };
00172
00173 }
00174 }
00175
00176 #endif