00001
00002
00003
00004
00005 #ifndef SPARSESTORAGE_H
00006 #define SPARSESTORAGE_H
00007
00008 #include "DoubleMatrix.h"
00009 #include "SparseStorageHandle.h"
00010 #include "OoqpVectorHandle.h"
00011
00012 #include <string.h>
00013 #include <iostream.h>
00014
00018 class SparseStorage : public DoubleStorage {
00019 protected:
00020 int neverDeleteElts;
00021
00022 public:
00023 static int instances;
00024
00025 int m;
00026 int n;
00027 int len;
00028 int * jcolM;
00029 int * krowM;
00030 double * M;
00031
00032 SparseStorage( int m_, int n_, int len_ );
00033 SparseStorage( int m_, int n_, int len_,
00034 int * krowM_, int * jcolM_,
00035 double * M_ );
00036
00037 void shiftRows( int row, int shift, int& info );
00038 virtual void getSize( int& m, int& n );
00039 int rows() { return m; }
00040 int cols() { return n; }
00041
00042 int length() { return len; };
00043 int numberOfNonZeros() { return krowM[m]; };
00044 virtual void fromGetDense( int row, int col, double * A, int lda,
00045 int rowExtent, int colExtent );
00046 virtual void atPutDense( int row, int col, double * A, int lda,
00047 int rowExtent, int colExtent );
00048
00049 virtual void putSparseTriple( int irow[], int len, int jcol[], double A[],
00050 int& info );
00051
00052 virtual void getDiagonal( OoqpVector& vec );
00053 virtual void setToDiagonal( OoqpVector& vec );
00054
00055 virtual void ColumnScale( OoqpVector& vec );
00056 virtual void RowScale( OoqpVector& vec );
00057 virtual void SymmetricScale( OoqpVector& vec );
00058 virtual void scalarMult( double num);
00059
00060 virtual void atPutSpRow( int col, double A[], int lenA, int irowA[],
00061 int& info );
00062
00063 virtual void fromGetSpRow( int row, int col,
00064 double A[], int lenA, int irowA[], int& nnz,
00065 int rowExtent, int& info );
00066
00067 virtual void randomize( double alpha, double beta, double * seed );
00068
00069 virtual void getTransposePat( int row, int col, int rowExtent, int colExtent,
00070 int kpat[], int krowM[], int jcolM[] );
00071 virtual void getFromPat( double data[], int n, int kpat[] );
00072 virtual void mult( double beta, double y[], int incy,
00073 double alpha, double x[], int incx );
00074
00075 virtual void transMult ( double beta, double y[], int incy,
00076 double alpha, double x[], int incx );
00077
00078 virtual void atPutDiagonal( int idiag, OoqpVector& v );
00079 virtual void fromGetDiagonal( int idiag, OoqpVector& v );
00080
00081 virtual void atPutDiagonal( int idiag,
00082 double x[], int incx, int extent );
00083
00084 virtual void writeToStream(ostream& out) const;
00085
00086 virtual void symmetrize( int& info);
00087 virtual double abmaxnorm();
00088
00089 virtual ~SparseStorage();
00090 };
00091
00092 #endif