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