00001
00002
00003
00004
00005 #ifndef PETSCSPARSESTORAGE_H
00006 #define PETSCSPARSESTORAGE_H
00007
00008 #include "petscmat.h"
00009 #include "DoubleMatrix.h"
00010 #include "OoqpVectorHandle.h"
00011 #include "PetscVectorHandle.h"
00012
00013 class PetscSparseStorage : public DoubleStorage {
00014 protected:
00015 int preserveMat;
00016 public:
00017 Mat M;
00018
00019 PetscSparseStorage( int lm, int ln, int m, int n, int nnz );
00020 PetscSparseStorage( Mat M_ );
00021
00022 virtual void atPutDense( int row, int col, double * A, int lda,
00023 int rowExtent, int colExtent );
00024 virtual void fromGetDense( int row, int col, double * A, int lda,
00025 int rowExtent, int colExtent );
00026 virtual void fromGetSpCol( int row, int col,
00027 double A[], int lenA, int irowA[], int& nnz,
00028 int rowExtent, int& info );
00029 virtual void fromGetSpRow( int row, int col,
00030 double A[], int lenA, int jcolA[], int& nnz,
00031 int colExtent, int& info );
00032 virtual void atPutSpCol( int col, double A[], int lenA, int irowA[],
00033 int& info );
00034 virtual void atPutSpRow( int col, double A[], int lenA, int irowA[],
00035 int& info );
00036
00037 virtual void putSparseTriple( int irow[], int len, int jcol[], double A[],
00038 int& info );
00039
00040 virtual void fatPutSpCol( int col, double A[], int lenA, int irowA[],
00041 int& info );
00042 virtual void fatPutSpRow( int col, double A[], int lenA, int irowA[],
00043 int& info );
00044 virtual void atPutZeros( int row, int col, int rowExtent, int colExtent );
00045
00046 virtual void getSize( int& m, int& n );
00047
00048 virtual void getDiagonal( OoqpVector& vec );
00049 virtual void setToDiagonal( OoqpVector& vec );
00050
00051 virtual void genmult ( double beta, PetscVector& y,
00052 double alpha, PetscVector& x,
00053 int trans );
00054
00055 virtual void atPutDiagonal( int idiag, OoqpVector& v );
00056 virtual void fromGetDiagonal( int idiag, OoqpVector& v );
00057 virtual void writeToStream(ostream& out) const;
00058
00059 virtual ~PetscSparseStorage();
00060 };
00061
00062 typedef SmartPointer<PetscSparseStorage> PetscSparseStorageHandle;
00063
00064 #endif