00001 #ifndef SKELETON_HPP
00002 #define SKELETON_HPP
00003
00004 #include "matrix.hpp"
00005 #include "indexlist.hpp"
00006
00016
00017
00022 class Skeleton : public Matrix {
00023 protected:
00024 unsigned rank;
00025 public:
00027 Skeleton(unsigned r);
00029 unsigned GetRank() const;
00031 virtual const Matrix& GetM() const = 0;
00033 virtual const Matrix& GetU() const = 0;
00035 virtual const Matrix& GetV() const = 0;
00037 enum mv_mode {normal, transpose};
00039
00047 void MatvecF(double alpha, const double *vec,
00048 double *res, double *calc, mv_mode mode = normal) const;
00050
00059 void MatvecUT(double alpha, const double *vec,
00060 double *res, mv_mode mode = normal) const;
00062
00071 void MatvecLT(double alpha, const double *vec,
00072 double *res, mv_mode mode = normal) const;
00074 ~Skeleton();
00075 };
00076
00077 #endif