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