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