00001
00002
00003
00004
00005 #ifndef SPARSEGENMATRIX_H
00006 #define SPARSEGENMATRIX_H
00007
00008 #include "OoqpVectorHandle.h"
00009 #include "DoubleMatrix.h"
00010 #include "SparseStorageHandle.h"
00011
00012
00017 class SparseGenMatrix : public GenMatrix {
00018 protected:
00019 SparseStorageHandle mStorage;
00020 int size;
00021
00022 public:
00023 SparseGenMatrix( int rows, int cols, int nnz );
00024 SparseGenMatrix( int rows, int cols, int nnz,
00025 int krowM[], int jcolM[], double M[]);
00026
00027 virtual void getSize( int& m, int& n );
00028
00033 virtual int numberOfNonZeros();
00034
00035 virtual int isKindOf( int matType );
00036
00037 virtual void atPutDense( int row, int col, double * A, int lda,
00038 int rowExtent, int colExtent );
00039 virtual void fromGetDense( int row, int col, double * A, int lda,
00040 int rowExtent, int colExtent );
00041 virtual void ColumnScale( OoqpVector& vec );
00042 virtual void RowScale( OoqpVector& vec );
00043 virtual void SymmetricScale( OoqpVector &vec);
00044 virtual void scalarMult( double num);
00045 virtual void fromGetSpRow( int row, int col,
00046 double A[], int lenA, int jcolA[], int& nnz,
00047 int colExtent, int& info );
00048 virtual void atPutSubmatrix( int destRow, int destCol, DoubleMatrix& M,
00049 int srcRow, int srcCol,
00050 int rowExtent, int colExtent );
00051 virtual void atPutSpRow( int col, double A[], int lenA, int jcolA[],
00052 int& info );
00053
00054 virtual void putSparseTriple( int irow[], int len, int jcol[], double A[],
00055 int& info );
00056
00057 virtual void getDiagonal( OoqpVector& vec );
00058 virtual void setToDiagonal( OoqpVector& vec );
00059
00060 virtual void mult ( double beta, OoqpVector& y,
00061 double alpha, OoqpVector& x );
00062
00063 virtual void transMult ( double beta, OoqpVector& y,
00064 double alpha, OoqpVector& x );
00065
00066 virtual double abmaxnorm();
00067
00068 virtual void writeToStream(ostream& out) const;
00069
00075 virtual void symmetrize( int& info );
00076
00077 virtual void randomize( double alpha, double beta, double * seed );
00078
00079 virtual void atPutDiagonal( int idiag, OoqpVector& v );
00080 virtual void fromGetDiagonal( int idiag, OoqpVector& v );
00081
00082 SparseStorage * getStorage() { return mStorage.ptr(); }
00083 int * krowM() { return mStorage->krowM; }
00084 int * jcolM() { return mStorage->jcolM; }
00085 double * M() { return mStorage->M; }
00086
00087 virtual ~SparseGenMatrix() {};
00088 };
00089
00090 #endif