00001 #ifndef SPARSESYMMATRIX
00002 #define SPARSESYMMATRIX
00003
00014 #include "SymMatrix.hh"
00015 #include "IotrRefCount.hh"
00016 #include "SimpleArrayData.hh"
00017 #include "SimpleIntData.hh"
00018
00024 class SparseSymMatrix : public SymMatrix {
00025 protected:
00027 SimpleArrayDataHandle mDataArray;
00028 SimpleIntDataHandle mIrowArray;
00029 SimpleIntDataHandle mKcolArray;
00032 double * mElements;
00033 int * mIrow;
00034 int * mKcol;
00035 int mLeadingDimension;
00036
00037 int mMz;
00038 public:
00040 SparseSymMatrix( int n, int mz );
00042 SparseSymMatrix( double * v, int * irow, int * kcol,
00043 int n, int mz );
00045 virtual ~SparseSymMatrix();
00046 bool operator==( const SparseSymMatrix & MM ) const;
00047 bool operator!=( const SparseSymMatrix & MM ) const
00048 {
00049 return !(*this == MM);
00050 }
00051
00052 double * elements() { return mElements; };
00053 const double * elements() const { return mElements; };
00054 int * irow() { return mIrow; };
00055 const int * irow() const { return mIrow; };
00056 int * kcol() { return mKcol; };
00057 const int * kcol() const { return mKcol; };
00059 int leadingDimension() const { return mLeadingDimension; };
00060
00062 virtual int rows() const { return mN; };
00064 virtual int columns() const { return mN; };
00066 int maxNonZeros() const { return mMz; };
00068 virtual void setToZero();
00081 virtual void writefToStream( std::ostream& out,
00082 const char format[] ) const;
00084 virtual void mult( double alpha, const IotrVector & x,
00085 double beta, IotrVector & y ) const;
00086 virtual void symMaskedMult( double alpha, const IotrMask & mask,
00087 const IotrVector & x,
00088 double beta, IotrVector & y ) const;
00091 virtual void symCopyFromSparseCols( const int irow[], const int kcol[],
00092 const double M[], int & has_upper );
00093 virtual void symCopyToSparseCols( int irow[], int len,
00094 int kcol[],
00095 double M[], int & morei ) const;
00096
00097 virtual void copyFromCuteSymmetric( double * M, int * irow,
00098 int * jcol, int nz );
00099 virtual void copyFromDenseSymmetric( const double *v, int vlength );
00100
00101
00102
00103
00104
00105
00106
00107 virtual void inspect(const char * name_in = 0,
00108 const char * filename = 0 ) const;
00109 virtual void inspectAsMatlab(const char * name_in = 0,
00110 const char * filename = 0 ) const;
00111 virtual double lowerBoundEigenvalue() const;
00112 };
00113
00114 typedef Handle<SparseSymMatrix> SparseSymMatrixHandle;
00115
00116 #endif