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