00001
00002
00003
00004
00005 #ifndef SPARSESYMMATRIX_H
00006 #define SPARSESYMMATRIX_H
00007
00008 #include "DoubleMatrix.h"
00009
00010 #include "SparseStorageHandle.h"
00011 #include "OoqpVectorHandle.h"
00012
00017 class SparseSymMatrix : public SymMatrix {
00018 SparseStorageHandle mStorage;
00019 public:
00020 SparseSymMatrix( int size, int nnz );
00021 SparseSymMatrix( int size, int nnz,
00022 int krowM[], int jcolM[], double M[]);
00023
00024 SparseStorage * getStorage() { return mStorage.ptr(); }
00025 int * krowM() { return mStorage->krowM; }
00026 int * jcolM() { return mStorage->jcolM; }
00027 double * M() { return mStorage->M; }
00028
00029 virtual int isKindOf( int type );
00030
00031 virtual void putSparseTriple( int irow[], int len, int jcol[], double A[],
00032 int& info );
00033 virtual void fromGetDense( int row, int col, double * A, int lda,
00034 int rowExtent, int colExtent );
00035 virtual void fromGetSpRow( int row, int col,
00036 double A[], int lenA, int jcolA[], int& nnz,
00037 int colExtent, int& info );
00038 virtual void SymmetricScale ( OoqpVector& vec );
00039 virtual void ColumnScale ( OoqpVector& vec );
00040 virtual void RowScale ( OoqpVector& vec );
00041 virtual void scalarMult( double num);
00042
00043 virtual void symAtPutSpRow( int col, double A[], int lenA, int jcolA[],
00044 int& info );
00045
00046 virtual void getSize( int& m, int& n );
00047 virtual int size();
00048
00049 virtual void getDiagonal( OoqpVector& vec );
00050 virtual void setToDiagonal( OoqpVector& vec );
00051
00052 virtual void symAtPutSubmatrix( int destRow, int destCol, DoubleMatrix& M,
00053 int srcRow, int srcCol,
00054 int rowExtent, int colExtent );
00055
00056 virtual void mult ( double beta, double y[], int incy,
00057 double alpha, double x[], int incx );
00058 virtual void transMult ( double beta, double y[], int incy,
00059 double alpha, double x[], int incx );
00060
00061 virtual void mult ( double beta, OoqpVector& y,
00062 double alpha, OoqpVector& x );
00063
00064 virtual void transMult ( double beta, OoqpVector& y,
00065 double alpha, OoqpVector& x );
00066
00067 virtual double abmaxnorm();
00068
00069 virtual void writeToStream(ostream& out) const;
00070
00071 virtual void randomizePSD(double *);
00072
00073 virtual void atPutDiagonal( int idiag, OoqpVector& v );
00074
00075 virtual void fromGetDiagonal( int idiag, OoqpVector& v );
00076
00081 int numberOfNonZeros() { return mStorage->numberOfNonZeros(); }
00082
00083 virtual ~SparseSymMatrix() {};
00084 };
00085 #endif