Main Page | Modules | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members

SparseStorage.h

00001 /* OOQP                                                               *
00002  * Authors: E. Michael Gertz, Stephen J. Wright                       *
00003  * (C) 2001 University of Chicago. See Copyright Notification in OOQP */
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

Generated on Wed Mar 22 13:58:33 2006 for OOQP by doxygen 1.3.5