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