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
00034 #ifndef BELOS_EPETRA_OPERATOR_H
00035 #define BELOS_EPETRA_OPERATOR_H
00036
00037 #include "Epetra_MultiVector.h"
00038 #include "Epetra_Operator.h"
00039 #include "Epetra_Map.h"
00040 #include "Epetra_LocalMap.h"
00041
00042 #include "BelosLinearProblem.hpp"
00043 #include "BelosStatusTest.hpp"
00044 #include "BelosOutputManager.hpp"
00045 #include "BelosEpetraAdapter.hpp"
00046 #include "BelosBlockGmres.hpp"
00047 #include "BelosBlockCG.hpp"
00048
00049 #include "Teuchos_ParameterList.hpp"
00050 using Teuchos::RefCountPtr;
00051 using Teuchos::ParameterList;
00052
00058 namespace Belos {
00059
00061
00062
00063
00064
00065
00066
00068
00069 class EpetraOperator : public virtual Epetra_Operator {
00070 public:
00072
00073
00075 EpetraOperator( const RefCountPtr<LinearProblem<double,Epetra_MultiVector,Epetra_Operator> >& lp,
00076 const RefCountPtr<StatusTest<double,Epetra_MultiVector,Epetra_Operator> >& stest,
00077 const RefCountPtr<OutputManager<double> >& om,
00078 const RefCountPtr<ParameterList>& plist );
00079
00081 virtual ~EpetraOperator() {}
00083
00085
00086
00088 int SetUseTranspose( bool UseTranspose ) { return(-1); };
00090
00092
00093
00095 int Apply( const Epetra_MultiVector &X, Epetra_MultiVector &Y ) const;
00096
00098 int ApplyInverse( const Epetra_MultiVector &X, Epetra_MultiVector &Y ) const;
00100
00102
00103
00105 double NormInf() const { return(0.0); };
00107
00109
00110
00112 const char* Label() const { return(&Solver[0]); };
00113
00115 bool UseTranspose() const { return(false); };
00116
00118 bool HasNormInf() const { return(false); };
00119
00121 const Epetra_Comm& Comm() const;
00122
00124 const Epetra_Map& OperatorDomainMap() const;
00125
00127 const Epetra_Map& OperatorRangeMap() const;
00129 private:
00130
00131 RefCountPtr<IterativeSolver<double,Epetra_MultiVector,Epetra_Operator> > solver_;
00132 RefCountPtr<LinearProblem<double,Epetra_MultiVector,Epetra_Operator> > lp_;
00133 RefCountPtr<StatusTest<double,Epetra_MultiVector,Epetra_Operator> > stest_;
00134 RefCountPtr<OutputManager<double> > om_;
00135 RefCountPtr<ParameterList> plist_;
00136
00137 const int Maxits;
00138 std::vector<char> Solver;
00139 };
00140
00141 }
00142
00143
00144 #endif
00145