00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifndef DIRECTSOLVEROPERATOR_H
00014 #define DIRECTSOLVEROPERATOR_H
00015
00016 #include <Epetra_MultiVector.h>
00017 #include <Epetra_LinearProblem.h>
00018 #include <Teuchos_ParameterList.hpp>
00019 #include <Amesos.h>
00020
00021 class Epetra_MultiVector;
00022 class Epetra_Map;
00023 class Epetra_Comm;
00024
00027 class DirectSolverOperator : public Epetra_Operator {
00028 public:
00034 DirectSolverOperator(Epetra_RowMatrix& A, Teuchos::ParameterList& params);
00035
00036 ~DirectSolverOperator();
00037
00038 int SetUseTranspose(bool use_transpose);
00039
00041 int Apply(const Epetra_MultiVector& X, Epetra_MultiVector& Y) const;
00042
00044 int ApplyInverse(const Epetra_MultiVector& X, Epetra_MultiVector& Y) const;
00045
00046 double NormInf() const;
00047
00048 const char * Label() const;
00049
00050 bool UseTranspose() const;
00051
00052 bool HasNormInf() const;
00053
00054 const Epetra_Comm& Comm() const;
00055
00056 const Epetra_Map & OperatorDomainMap() const;
00057
00058 const Epetra_Map & OperatorRangeMap() const;
00059
00060 private:
00061 const Epetra_Map& domain_map_;
00062 const Epetra_Map& range_map_;
00063 const Epetra_Comm& comm_;
00064 bool use_transpose_;
00065 Epetra_LinearProblem* linear_problem_;
00066 Amesos_BaseSolver* amesos_solver_;
00067 };
00068
00069 #endif