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; 00024 virtual int factorize(const double * diagonal, int * rowsDropped) =0; 00026 virtual void solve (double * region) const = 0; 00028 00031 00032 inline int status() const 00033 {return status_;}; 00035 inline int numberRowsDropped() const 00036 {return numberRowsDropped_;}; 00038 void resetRowsDropped(); 00040 inline char * rowsDropped() const 00041 {return rowsDropped_;}; 00043 inline double choleskyCondition() const 00044 {return choleskyCondition_;}; 00046 inline int rank() const 00047 {return numberRows_-numberRowsDropped_;}; 00049 00050 00051 protected: 00052 00058 ClpCholeskyBase(); 00060 public: 00061 virtual ~ClpCholeskyBase(); 00062 protected: 00063 // Copy 00064 ClpCholeskyBase(const ClpCholeskyBase&); 00065 // Assignment 00066 ClpCholeskyBase& operator=(const ClpCholeskyBase&); 00068 00069 00070 00071 public: 00072 virtual ClpCholeskyBase * clone() const = 0; 00073 protected: 00074 00076 inline int type() const 00077 { return type_;}; 00079 void setType(int type) {type_=type;}; 00081 00082 00083 protected: 00087 00088 int type_; 00090 double pivotTolerance_; 00092 double zeroTolerance_; 00094 double choleskyCondition_; 00096 ClpInterior * model_; 00098 int numberTrials_; 00100 int numberRows_; 00102 int status_; 00104 char * rowsDropped_; 00106 int * permuteIn_; 00108 int * permuteOut_; 00110 int numberRowsDropped_; 00112 }; 00113 00114 #endif