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