00001 #ifndef SPARSEGENMATRIX
00002 #define SPARSEGENMATRIX
00003
00016 #include "GenMatrix.hh"
00017 #include "IotrRefCount.hh"
00018 #include "SimpleArrayData.hh"
00019 #include "ElementGatherSeq.hh"
00020 #include "IotrHandle.hh"
00021 #include "SimpleArrayData.hh"
00022 #include "SimpleIntData.hh"
00023
00028 class SparseGenMatrix : public GenMatrix {
00029 protected:
00031 SimpleArrayDataHandle mDataArray;
00032 SimpleIntDataHandle mIrowArray;
00033 SimpleIntDataHandle mKcolArray;
00034 double * mElements;
00035 int * mIrow;
00036 int * mKcol;
00037 int mLeadingDimension;
00038 int mCapacity;
00039 int mM;
00040 int mN;
00041
00042
00043 SparseGenMatrix() {};
00044 public:
00045 SparseGenMatrix( int m, int n, int mz);
00046 SparseGenMatrix( double * v, int * irow, int * kcol,
00047 int m, int n, int mz );
00048 virtual ~SparseGenMatrix();
00049
00050 double * elements() { return mElements; };
00051 const double * elements() const { return mElements; };
00052 const int * irow() const { return mIrow; };
00053 int * irow() { return mIrow; };
00054 const int * kcol() const { return mKcol; };
00055 int * kcol() { return mKcol; };
00056
00057 int leadingDimension() const { return mLeadingDimension; };
00058
00060 virtual int rows() const { return mM; };
00062 virtual int columns() const { return mN; };
00064 virtual int maxNonZeros() const { return mCapacity; };
00074 virtual void writefToStream( std::ostream& out,
00075 const char format[] ) const;
00077 virtual void mult( double alpha, const IotrVector & x,
00078 double beta, IotrVector & y ) const;
00079
00080 virtual void filteredMult( double alpha, const ElementGather & filter,
00081 const IotrVector & x,
00082 double beta, IotrVector & y ) const;
00084 virtual void transposeMult( double alpha, const IotrVector & x,
00085 double beta, IotrVector & y ) const;
00086 virtual void filteredTransposeMult( double alpha, const IotrVector & x,
00087 double beta, const ElementGather& filt,
00088 IotrVector & y ) const;
00092
00093
00094
00095 virtual void copyFromSparseCols( const int irow[], const int kcol[],
00096 const double M[] );
00097 virtual void copyFromCute( double M[], int irow[],
00098 int jcol[], int nz );
00099 virtual void copyToSparseCols( int irow[], int len,
00100 int kcol[], double M[],
00101 int & morei ) const;
00102 virtual void inspect( const char * name = 0,
00103 const char * filename = 0) const;
00104 virtual void inspectAsMatlab( const char * name = 0,
00105 const char * filename = 0) const;
00106 };
00107
00108 typedef Handle<SparseGenMatrix> SparseGenMatrixHandle;
00109
00114 #endif