00001
00002
00003
00004
00005 #ifndef PETSCSPGENMATRIXBODY
00006 #define PETSCSPGENMATRIXBODY
00007
00008 #include "DoubleMatrix.h"
00009 #include "PetscSpGenMatrixHandle.h"
00010 #include "PetscSparseStorageHandle.h"
00011
00012 class DenseSymMatrix;
00013
00014 class PetscSpGenMatrix : public GenMatrix {
00015 protected:
00016 PetscSparseStorageHandle mStorage;
00017 public:
00018 PetscSparseStorage * getStorage() { return mStorage.ptr(); };
00019 PetscSparseStorage& storage() { return *mStorage; }
00020 PetscSpGenMatrix( int m, int n, int nnz );
00021 PetscSpGenMatrix( Mat M );
00022
00023 virtual int isKindOf( int type );
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 fromGetSpRow( int row, int col,
00030 double A[], int lenA, int jcolA[], int& nnz,
00031 int colExtent, int& info );
00032 virtual void atPutSpRow( int row, double A[], int lenA, int jcolA[],
00033 int& info );
00034
00035 virtual void getSize( int& m, int& n );
00036
00037 virtual void atPutSubmatrix( int destRow, int destCol, DoubleMatrix& M,
00038 int srcRow, int srcCol,
00039 int rowExtent, int colExtent );
00040
00041 virtual void mult ( double beta, OoqpVector& y,
00042 double alpha, OoqpVector& x );
00043
00044 virtual void transMult ( double beta, OoqpVector& y,
00045 double alpha, OoqpVector& x );
00046
00047 virtual void getDiagonal( OoqpVector& vec );
00048 virtual void setToDiagonal( OoqpVector& vec );
00049
00050 virtual void atPutDiagonal( int idiag, OoqpVector& v );
00051 virtual void fromGetDiagonal( int idiag, OoqpVector& v );
00052
00053 virtual double abmaxnorm();
00054
00055 virtual void writeToStream(ostream& out) const;
00056
00057 virtual void randomize(double alpha, double beta, double * seed);
00058
00059 virtual void putSparseTriple( int irow[], int len, int jcol[], double A[],
00060 int& info );
00061
00062 };
00063
00064 typedef SmartPointer<PetscSpGenMatrix> PetscSpGenMatrixHandle;
00065
00066 #endif
00067