00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef CoinOslFactorization_H
00012 #define CoinOslFactorization_H
00013 #include <iostream>
00014 #include <string>
00015 #include <cassert>
00016 #include "CoinFinite.hpp"
00017 #include "CoinIndexedVector.hpp"
00018 #include "CoinDenseFactorization.hpp"
00019 #include "CoinOslC.h"
00020 class CoinPackedMatrix;
00030 class CoinOslFactorization : public CoinOtherFactorization {
00031 friend void CoinOslFactorizationUnitTest( const std::string & mpsDir );
00032
00033 public:
00034
00037
00038 CoinOslFactorization ( );
00040 CoinOslFactorization ( const CoinOslFactorization &other);
00041
00043 virtual ~CoinOslFactorization ( );
00045 CoinOslFactorization & operator = ( const CoinOslFactorization & other );
00047 virtual CoinOtherFactorization * clone() const ;
00049
00052
00053 virtual void getAreas ( int numberRows,
00054 int numberColumns,
00055 CoinBigIndex maximumL,
00056 CoinBigIndex maximumU );
00057
00059 virtual void preProcess ( );
00065 virtual int factor ( );
00067 virtual void postProcess(const int * sequence, int * pivotVariable);
00069 virtual void makeNonSingular(int * sequence, int numberColumns);
00077 int factorize ( const CoinPackedMatrix & matrix,
00078 int rowIsBasic[], int columnIsBasic[] ,
00079 double areaFactor = 0.0 );
00081
00084
00085 virtual inline int numberElements ( ) const {
00086 return numberRows_*(numberColumns_+numberPivots_);
00087 }
00089 virtual CoinFactorizationDouble * elements() const;
00091 virtual int * pivotRow() const;
00093 virtual CoinFactorizationDouble * workArea() const;
00095 virtual int * intWorkArea() const;
00097 virtual int * numberInRow() const;
00099 virtual int * numberInColumn() const;
00101 virtual CoinBigIndex * starts() const;
00103 virtual int * permuteBack() const;
00105 virtual bool wantsTableauColumn() const;
00110 virtual void setUsefulInformation(const int * info,int whereFrom);
00112 virtual void maximumPivots ( int value );
00113
00115 double maximumCoefficient() const;
00117 double conditionNumber() const;
00119 virtual void clearArrays();
00121
00124
00132 virtual int replaceColumn ( CoinIndexedVector * regionSparse,
00133 int pivotRow,
00134 double pivotCheck ,
00135 bool checkBeforeModifying=false,
00136 double acceptablePivot=1.0e-8);
00138
00148 virtual int updateColumnFT ( CoinIndexedVector * regionSparse,
00149 CoinIndexedVector * regionSparse2,
00150 bool noPermute=false);
00153 virtual int updateColumn ( CoinIndexedVector * regionSparse,
00154 CoinIndexedVector * regionSparse2,
00155 bool noPermute=false) const;
00157 virtual int updateTwoColumnsFT(CoinIndexedVector * regionSparse1,
00158 CoinIndexedVector * regionSparse2,
00159 CoinIndexedVector * regionSparse3,
00160 bool noPermute=false);
00165 virtual int updateColumnTranspose ( CoinIndexedVector * regionSparse,
00166 CoinIndexedVector * regionSparse2) const;
00168
00169
00173
00174
00175
00177 virtual int * indices() const;
00179 virtual inline int * permute() const
00180 { return NULL;;}
00182
00184 void gutsOfDestructor(bool clearFact=true);
00186 void gutsOfInitialize(bool zapFact=true);
00188 void gutsOfCopy(const CoinOslFactorization &other);
00189
00191 protected:
00194 int checkPivot(double saveFromU, double oldPivot) const;
00196 protected:
00197
00200
00201 EKKfactinfo factInfo_;
00203 };
00204 #endif