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

SparseSymMatrix.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 SPARSESYMMATRIX_H
00006 #define SPARSESYMMATRIX_H
00007 
00008 #include "DoubleMatrix.h"
00009 
00010 #include "SparseStorageHandle.h"
00011 #include "OoqpVectorHandle.h"
00012 
00017 class SparseSymMatrix : public SymMatrix {
00018   SparseStorageHandle mStorage;
00019 public:
00020   SparseSymMatrix( int size, int nnz );
00021   SparseSymMatrix( int size, int nnz,
00022                        int krowM[], int jcolM[], double M[]);
00023 
00024   SparseStorage *  getStorage() { return mStorage.ptr(); }
00025   int * krowM() { return mStorage->krowM; }
00026   int * jcolM() { return mStorage->jcolM; }
00027   double * M() { return mStorage->M; }
00028 
00029   virtual int isKindOf( int type );
00030 
00031   virtual void putSparseTriple( int irow[], int len, int jcol[], double A[], 
00032                                 int& info );
00033   virtual void fromGetDense( int row, int col, double * A, int lda,
00034                              int rowExtent, int colExtent );
00035   virtual void fromGetSpRow( int row, int col,
00036                              double A[], int lenA, int jcolA[], int& nnz,
00037                              int colExtent, int& info );
00038   virtual void SymmetricScale ( OoqpVector& vec );
00039   virtual void ColumnScale ( OoqpVector& vec );
00040   virtual void RowScale ( OoqpVector& vec );
00041   virtual void scalarMult( double num);
00042 
00043   virtual void symAtPutSpRow( int col, double A[], int lenA, int jcolA[],
00044                               int& info );
00045 
00046   virtual void getSize( int& m, int& n );
00047   virtual int size();
00048 
00049   virtual void getDiagonal( OoqpVector& vec );
00050   virtual void setToDiagonal( OoqpVector& vec );
00051 
00052   virtual void symAtPutSubmatrix( int destRow, int destCol, DoubleMatrix& M,
00053                                   int srcRow, int srcCol,
00054                                   int rowExtent, int colExtent );
00055 
00056   virtual void mult ( double beta,  double y[], int incy,
00057                       double alpha, double x[], int incx );
00058   virtual void transMult ( double beta,  double y[], int incy,
00059                            double alpha, double x[], int incx );
00060   
00061   virtual void mult ( double beta,  OoqpVector& y,
00062                       double alpha, OoqpVector& x );
00063 
00064   virtual void transMult ( double beta,   OoqpVector& y,
00065                            double alpha,  OoqpVector& x );
00066 
00067   virtual double abmaxnorm();
00068   
00069   virtual void writeToStream(ostream& out) const;
00070   
00071   virtual void randomizePSD(double *);
00072 
00073   virtual void atPutDiagonal( int idiag, OoqpVector& v );
00074 
00075   virtual void fromGetDiagonal( int idiag, OoqpVector& v );
00076 
00081   int numberOfNonZeros() { return mStorage->numberOfNonZeros(); }
00082 
00083   virtual ~SparseSymMatrix() {};
00084 };
00085 #endif

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