00001
00002
00003
00004
00005 #ifndef DENSEGENMATRIX_H
00006 #define DENSEGENMATRIX_H
00007
00008 #include "DenseStorageHandle.h"
00009 #include "DenseGenMatrixHandle.h"
00010 #include "DenseSymMatrixHandle.h"
00011
00012 class DoubleLinearSolver;
00013
00017 class DenseGenMatrix : public GenMatrix {
00018 public:
00019 DenseStorageHandle mStorage;
00020
00021 DenseGenMatrix( int size );
00022 DenseGenMatrix( int m, int n );
00023 DenseGenMatrix( double A[], int m, int n );
00024
00025 virtual int isKindOf( int matType );
00026
00027 virtual void getSize( int& m, int& n );
00028
00029 virtual void atPutDense( int row, int col, double * A, int lda,
00030 int rowExtent, int colExtent );
00031
00037 virtual void atPutZeros( int row, int col,
00038 int rowExtent, int colExtent );
00039
00040
00041 virtual void getDiagonal( OoqpVector& vec );
00042 virtual void setToDiagonal( OoqpVector& vec );
00043
00044 virtual void atPutSubmatrix( int destRow, int destCol,
00045 DoubleMatrix& M,
00046 int srcRow, int srcCol,
00047 int rowExtent, int colExtent );
00048 virtual void atPutSpRow( int row, double A[], int lenA, int jcolA[],
00049 int& info );
00050
00051 virtual void putSparseTriple( int irow[], int len, int jcol[], double A[],
00052 int& info );
00053
00054 virtual void mult ( double beta, OoqpVector& y,
00055 double alpha, OoqpVector& x );
00056 virtual void mult ( double beta, double y[], int incy,
00057 double alpha, double x[], int incx );
00058
00059 virtual void transMult ( double beta, OoqpVector& y,
00060 double alpha, OoqpVector& x );
00061 virtual void transMult ( double beta, double y[], int incy,
00062 double alpha, double x[], int incx );
00063
00064 virtual void fromGetDense( int row, int col, double * A, int lda,
00065 int rowExtent, int colExtent );
00066
00067 virtual void fromGetSpRow( int row, int col,
00068 double A[], int lenA, int jcolA[], int& nnz,
00069 int rowExtent, int& info );
00070
00071 virtual void ColumnScale( OoqpVector& vec );
00072 virtual void RowScale( OoqpVector& vec );
00073 virtual void SymmetricScale( OoqpVector &vec);
00074 virtual void scalarMult( double num);
00075
00076 virtual double abmaxnorm();
00077 virtual void writeToStream(ostream& out) const;
00078 virtual void randomize( double alpha, double beta, double * seed );
00079
00080 virtual void atPutDiagonal( int idiag, OoqpVector& v );
00081 virtual void fromGetDiagonal( int idiag, OoqpVector& v );
00083 virtual void getRow ( int rowIndex, OoqpVector& v_in);
00084
00085 double * operator[]( int index ) { return mStorage->M[index]; }
00086
00087 const double * operator[]( int index ) const
00088 { return mStorage->M[index]; }
00089
00091 double * elements() { return mStorage->M[0]; };
00093 double **Mat() { return mStorage->M; };
00094
00095 DenseStorage& storage() { return *mStorage; }
00096 DenseStorage *getStorage() { return mStorage.ptr(); }
00097 };
00098
00099 #endif