00001 #ifndef DENSESYMMATRIX 00002 #define DENSESYMMATRIX 00003 00014 #include "SymMatrix.hh" 00015 #include "IotrRefCount.hh" 00016 #include "SimpleArrayData.hh" 00017 #include "SimpleIntData.hh" 00018 00023 class DenseSymMatrix : public SymMatrix { 00024 protected: 00026 SimpleArrayDataHandle data; 00029 double ** mMat; 00030 int mLeadingDimension; 00031 public: 00033 DenseSymMatrix( int size ); 00035 DenseSymMatrix( double * v, int size ); 00037 virtual ~DenseSymMatrix(); 00038 00039 00040 double * operator[]( int i ) { return mMat[i]; } 00041 const double * operator[]( int i ) const { return mMat[i]; } 00042 bool operator==( const DenseSymMatrix & MM ) const 00043 { 00044 double ** M = MM.mMat; 00045 for( int i = 0; i < mN; i++ ) { 00046 for( int j = 0; j <= i; j++ ) { 00047 if( mMat[i][j] != M[i][j] ) return false; 00048 } 00049 } 00050 return true; 00051 } 00052 bool operator!=( const DenseSymMatrix & MM ) const 00053 { 00054 return !(*this == MM); 00055 } 00056 00058 double * elements() { return mMat[0]; }; 00059 const double * elements() const { return mMat[0]; }; 00061 double **Mat() { return mMat; }; 00062 const double * const * Mat() const { return mMat; }; 00064 int leadingDimension() const { return mLeadingDimension; }; 00065 00067 virtual void clearRange( int istart, int jstart, 00068 int iextent, int jextent ); 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 virtual void inspect(const char * name_in = 0, 00097 const char * filename = 0 ) const; 00098 virtual void inspectAsMatlab(const char * name_in = 0, 00099 const char * filename = 0 ) const; 00100 virtual double lowerBoundEigenvalue() const; 00101 }; 00102 00103 typedef Handle<DenseSymMatrix> DenseSymMatrixHandle; 00104 00105 #endif