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