00001 // Copyright (C) 2003, International Business Machines 00002 // Corporation and others. All Rights Reserved. 00003 #ifndef ClpCholeskyBase_H 00004 #define ClpCholeskyBase_H 00005 00006 #include "CoinPragma.hpp" 00007 00008 class ClpInterior; 00009 00015 class ClpCholeskyBase { 00016 00017 public: 00022 virtual int order(ClpInterior * model) = 0; 00025 virtual int factorize(const double * diagonal, int * rowsDropped) =0; 00027 virtual void solve (double * region) = 0; 00030 virtual void solveKKT (double * region1, double * region2, const double * diagonal, 00031 double diagonalScaleFactor); 00033 00036 00037 inline int status() const 00038 {return status_;}; 00040 inline int numberRowsDropped() const 00041 {return numberRowsDropped_;}; 00043 void resetRowsDropped(); 00045 inline char * rowsDropped() const 00046 {return rowsDropped_;}; 00048 inline double choleskyCondition() const 00049 {return choleskyCondition_;}; 00051 inline int rank() const 00052 {return numberRows_-numberRowsDropped_;}; 00054 inline int numberRows() const 00055 {return numberRows_;}; 00057 00058 00059 protected: 00060 00066 ClpCholeskyBase(); 00068 public: 00069 virtual ~ClpCholeskyBase(); 00070 protected: 00071 // Copy 00072 ClpCholeskyBase(const ClpCholeskyBase&); 00073 // Assignment 00074 ClpCholeskyBase& operator=(const ClpCholeskyBase&); 00076 00077 00078 00079 public: 00080 virtual ClpCholeskyBase * clone() const = 0; 00081 00083 inline int type() const 00084 { return type_;}; 00085 protected: 00087 void setType(int type) {type_=type;}; 00089 00090 00091 protected: 00095 00096 int type_; 00098 double pivotTolerance_; 00100 double zeroTolerance_; 00102 double choleskyCondition_; 00104 ClpInterior * model_; 00106 int numberTrials_; 00108 int numberRows_; 00110 int status_; 00112 char * rowsDropped_; 00114 int * permuteIn_; 00116 int * permuteOut_; 00118 int numberRowsDropped_; 00120 }; 00121 00122 #endif