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

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

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