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 #ifndef BELOS_GMRES_ITERATION_HPP
00030 #define BELOS_GMRES_ITERATION_HPP
00031
00036 #include "BelosConfigDefs.hpp"
00037 #include "BelosTypes.hpp"
00038 #include "BelosIteration.hpp"
00039
00040 namespace Belos {
00041
00043
00044
00049 template <class ScalarType, class MV>
00050 struct GmresIterationState {
00055 int curDim;
00056
00058 Teuchos::RCP<const MV> V;
00059
00061 Teuchos::RCP<const MV> Z;
00062
00069 Teuchos::RCP<const Teuchos::SerialDenseMatrix<int,ScalarType> > H;
00072 Teuchos::RCP<const Teuchos::SerialDenseMatrix<int,ScalarType> > R;
00075 Teuchos::RCP<const Teuchos::SerialDenseMatrix<int,ScalarType> > z;
00076
00077
00078 GmresIterationState() : curDim(0), V(Teuchos::null), Z(Teuchos::null),
00079 H(Teuchos::null), R(Teuchos::null),
00080 z(Teuchos::null)
00081 {}
00082 };
00083
00085
00087
00088
00100 class GmresIterationInitFailure : public BelosError {public:
00101 GmresIterationInitFailure(const std::string& what_arg) : BelosError(what_arg)
00102 {}};
00103
00110 class GmresIterationOrthoFailure : public BelosError {public:
00111 GmresIterationOrthoFailure(const std::string& what_arg) : BelosError(what_arg)
00112 {}};
00113
00120 class GmresIterationLAPACKFailure : public BelosError {public:
00121 GmresIterationLAPACKFailure(const std::string& what_arg) : BelosError(what_arg)
00122 {}};
00123
00125
00126
00127 template<class ScalarType, class MV, class OP>
00128 class GmresIteration : virtual public Iteration<ScalarType,MV,OP> {
00129
00130 public:
00131
00133
00134
00148 virtual void initializeGmres(GmresIterationState<ScalarType,MV> newstate) = 0;
00149
00156 virtual GmresIterationState<ScalarType,MV> getState() const = 0;
00158
00160
00161
00163
00166 virtual void updateLSQR( int dim = -1 ) = 0;
00167
00169 virtual int getCurSubspaceDim() const = 0;
00170
00172 virtual int getMaxSubspaceDim() const = 0;
00173
00175
00177
00178
00185 virtual void setSize(int blockSize, int numBlocks) = 0;
00186
00188
00189 };
00190
00191 }
00192
00193 #endif