00001
00002
00003
00004
00005 #ifndef DOUBLEMATRIX_H
00006 #define DOUBLEMATRIX_H
00007
00012 #include <string.h>
00013 #include <memory.h>
00014 #include <iostream.h>
00015 #include "OoqpVectorHandle.h"
00016 #include "IotrRefCount.h"
00017
00018 class DoubleLinearSolver;
00019
00024 class DoubleStorage : public IotrRefCount {
00025 public:
00026 DoubleStorage() { };
00027
00028 virtual void atPutDense( int row, int col, double * A, int lda,
00029 int rowExtent, int colExtent ) = 0;
00030 virtual void fromGetDense( int row, int col, double * A, int lda,
00031 int rowExtent, int colExtent ) = 0;
00032 virtual void atPutSpRow( int row, double A[], int lenA, int jcolA[],
00033 int& info ) = 0;
00034
00035 virtual void fromGetSpRow( int row, int col,
00036 double A[], int lenA, int jcolA[], int& nnz,
00037 int colExtent, int& info ) = 0;
00038
00039 virtual void getSize( int& m, int& n ) = 0;
00040
00041 virtual void getDiagonal( OoqpVector& vec ) = 0;
00042 virtual void setToDiagonal( OoqpVector& vec ) = 0;
00043
00044 virtual void atPutDiagonal( int idiag, OoqpVector& x ) = 0;
00045 virtual void fromGetDiagonal( int idiag, OoqpVector& x ) = 0;
00046 virtual void SymmetricScale ( OoqpVector& vec ) = 0;
00047 virtual void ColumnScale ( OoqpVector& vec ) = 0;
00048 virtual void RowScale ( OoqpVector& vec ) = 0;
00049 virtual void scalarMult( double num) = 0;
00050 virtual ~DoubleStorage() {};
00051 };
00052
00056 class DoubleMatrix : public IotrRefCount {
00057 public:
00058 DoubleMatrix() {}
00059
00061 virtual int isKindOf( int matrixType ) = 0;
00062
00074 virtual void fromGetDense( int row, int col, double * A, int lda,
00075 int rowExtent, int colExtent ) = 0;
00076
00089 virtual void fromGetSpRow( int row, int col,
00090 double A[], int lenA, int jcolA[], int& nnz,
00091 int colExtent, int& info ) = 0;
00092
00101 virtual void putSparseTriple( int irow[], int len, int jcol[], double A[],
00102 int& info ) = 0;
00103
00105 virtual void mult ( double beta, OoqpVector& y,
00106 double alpha, OoqpVector& x ) = 0;
00107
00109 virtual void transMult ( double beta, OoqpVector& y,
00110 double alpha, OoqpVector& x ) = 0;
00111
00114 virtual double abmaxnorm() = 0;
00115
00117 virtual void writeToStream(ostream& out) const = 0;
00118
00120 virtual void getDiagonal( OoqpVector& vec ) = 0;
00122 virtual void setToDiagonal( OoqpVector& vec ) = 0;
00123
00131 virtual void atPutDiagonal( int idiag, OoqpVector& x ) = 0;
00139 virtual void fromGetDiagonal( int idiag, OoqpVector& x )= 0;
00140
00146 virtual void SymmetricScale ( OoqpVector& vec ) = 0;
00147 virtual void ColumnScale ( OoqpVector& vec ) = 0;
00148 virtual void RowScale ( OoqpVector& vec ) = 0;
00149 virtual void scalarMult( double num) = 0;
00150
00151 virtual void getSize( int& m, int& n ) = 0;
00152
00153 virtual ~DoubleMatrix() {};
00154 };
00155
00159 class SymMatrix : public DoubleMatrix {
00160 public:
00161
00177 virtual void symAtPutSubmatrix( int destRow, int destCol,
00178 DoubleMatrix& M,
00179 int srcRow, int srcCol,
00180 int rowExtent, int colExtent ) = 0;
00181
00185 virtual void randomizePSD(double * seed) = 0;
00186
00195 virtual void symAtPutSpRow( int col, double A[], int lenA, int irowA[],
00196 int& info ) = 0;
00198 virtual int size() = 0;
00199 };
00200
00204 class GenMatrix : public DoubleMatrix {
00205 public:
00216 virtual void atPutSubmatrix( int destRow, int destCol,
00217 DoubleMatrix& M,
00218 int srcRow, int srcCol,
00219 int rowExtent, int colExtent ) = 0;
00220
00225 virtual void atPutDense( int row, int col, double * A, int lda,
00226 int rowExtent, int colExtent ) = 0;
00227
00233 virtual void atPutSpRow( int col, double A[], int lenA, int jcolA[],
00234 int& info ) = 0;
00235
00242 virtual void randomize(double alpha, double beta, double * seed) = 0;
00243 };
00244
00245 #endif