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

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