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

DenseSymMatrix.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 DENSESYMMATRIX_H
00006 #define DENSESYMMATRIX_H
00007 
00008 #include "DenseStorageHandle.h"
00009 #include "DoubleMatrix.h"
00010 #include "DenseSymMatrixHandle.h"
00011 
00015 class DenseSymMatrix : public SymMatrix {
00016 public:
00017   DenseStorageHandle mStorage;
00018   
00019   DenseSymMatrix( int size );
00020   DenseSymMatrix( double Q[], int size );
00021 
00022   virtual int isKindOf( int matrixType );
00023 
00024   virtual void mult ( double beta,  double y[], int incy,
00025                       double alpha, double x[], int incx );
00026   virtual void mult ( double beta,  OoqpVector& y,
00027                       double alpha, OoqpVector& x);
00028 
00029   virtual void transMult ( double beta,  double y[], int incy,
00030                            double alpha, double x[], int incx );
00031   virtual void transMult ( double beta,  OoqpVector& y,
00032                            double alpha, OoqpVector& x );
00033 
00034   virtual void getSize( int& m, int& n );
00035 
00036   virtual double abmaxnorm();
00037   virtual void writeToStream(ostream& out) const;
00038   virtual void randomizePSD(double * seed);
00039 
00040   virtual void fromGetDense( int row, int col, double * A, int lda,
00041                              int rowExtent, int colExtent );
00042   
00043   virtual void fromGetSpRow( int row, int col,
00044                              double A[], int lenA, int jcolA[], int& nnz,
00045                              int rowExtent, int& info );
00046 
00047   virtual void SymmetricScale ( OoqpVector& vec );
00048   virtual void ColumnScale ( OoqpVector& vec );
00049   virtual void RowScale ( OoqpVector& vec );
00050   virtual void scalarMult( double num);
00051 
00052   virtual void symAtPutSpRow( int col, double A[], int lenA, int irowA[],
00053                               int& info );
00054   
00058   virtual void symAtPutDense( int row, int col, double * A, int lda,
00059                                      int rowExtent, int colExtent );
00062   virtual void symAtPutZeros( int row, int col,
00063                            int rowExtent, int colExtent );
00064 
00065   virtual void putSparseTriple( int irow[], int len, int jcol[], double A[], 
00066                                 int& info );
00067 
00068   virtual void atAddOuterProductOf( int row, int col, double alpha,
00069                                     double * x, int incx, int nx );
00070 
00071   virtual void symAtPutSubmatrix( int destRow, int destCol,
00072                                   DoubleMatrix& M,
00073                                   int srcRow, int srcCol,
00074                                   int rowExtent, int colExtent );
00075 
00076   virtual void getDiagonal( OoqpVector& vec );
00077   virtual void setToDiagonal( OoqpVector& vec );
00078 
00079   virtual void atPutDiagonal( int idiag, OoqpVector& v );
00080   virtual void fromGetDiagonal( int idiag, OoqpVector& v );
00081 
00082   static DenseSymMatrix * randomPSD( int n, double * seed );
00083  
00084   double * operator[]( int index ) { return mStorage->M[index]; }
00085 
00086    const double * operator[]( int index ) const
00087   { return mStorage->M[index]; }
00088   
00090   double * elements() { return mStorage->M[0]; };
00092   double **Mat() { return mStorage->M; };
00093   
00094   virtual int size();
00095 
00096   DenseStorage& storage() { return *mStorage; }
00097   DenseStorage *  getStorage() { return mStorage.ptr(); }
00098 };
00099 
00100 
00101 #endif

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