Main Page   Modules   Class Hierarchy   Alphabetical List   Compound List   File List   Compound 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 <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

Generated on Mon May 24 17:40:46 2004 for OOQP by doxygen1.2.18