12 #ifndef CoinAbcDenseFactorization_H 
   13 #define CoinAbcDenseFactorization_H 
   60   inline void setParallelMode(
int value)
 
   63     parallelMode_ = value;
 
  200   virtual int *
indices() 
const = 0;
 
  203   virtual int *
permute() 
const = 0;
 
  226 #ifdef EARLY_FACTORIZE 
  233   virtual void postProcess(
const int *sequence, 
int *pivotVariable) = 0;
 
  258                   bool skipBtranU=
false,
 
  259                   double acceptablePivot=1.0e-8)=0;
 
  261 #ifdef EARLY_FACTORIZE 
  262   virtual int replaceColumns(
const AbcSimplex * ,
 
  270 #ifdef ABC_LONG_FACTORIZATION 
  271   virtual void clearHiddenArrays() {}
 
  279 #ifdef ABC_LONG_FACTORIZATION 
  289 #ifdef ABC_LONG_FACTORIZATION 
  313 #ifdef ABC_LONG_FACTORIZATION
 
  317     double acceptablePivot = 1.0e-8)
 
  325 #ifdef ABC_LONG_FACTORIZATION
 
  337 #ifdef ABC_LONG_FACTORIZATION
 
  394 #define slackValue2_ 1.0 
  416 #if ABC_PARALLEL == 2 
  478   virtual void postProcess(
const int *sequence, 
int *pivotVariable);
 
  504     bool skipBtranU = 
false,
 
  505     double acceptablePivot = 1.0e-8);
 
  511 #ifdef ABC_LONG_FACTORIZATION
 
  515     double acceptablePivot = 1.0e-8);
 
  522 #ifdef ABC_LONG_FACTORIZATION
 
  533 #ifdef ABC_LONG_FACTORIZATION
 
  621   int checkPivot(
double saveFromU, 
double oldPivot) 
const;
 
virtual int factor(AbcSimplex *model)=0
Does most of factorization returning status 0 - OK -99 - needs more memory -1 - singular - use number...
 
virtual int * pivotColumn() const 
Returns pivotColumn or permute. 
 
virtual void getAreas(int numberRows, int numberColumns, CoinBigIndex maximumL, CoinBigIndex maximumU)
Gets space for a factorization. 
 
virtual void makeNonSingular(int *sequence)
Makes a non-singular basis by replacing variables. 
 
void gutsOfCopy(const CoinAbcDenseFactorization &other)
The real work of copy. 
 
virtual void updateWeights(CoinIndexedVector ®ionSparse) const 
Updates one column for dual steepest edge weights (FTRAN) 
 
int maximumPivots() const 
Maximum number of pivots between factorizations. 
 
void gutsOfDestructor()
The real work of desstructor. 
 
double pivotTolerance() const 
Pivot tolerance. 
 
double zeroTolerance() const 
Zero tolerance. 
 
virtual int updateColumnFT(CoinIndexedVector ®ionSparse)
Updates one column (FTRAN) from unpacked regionSparse Tries to do FT update number returned is negati...
 
virtual void getAreas(int numberRows, int numberColumns, CoinBigIndex maximumL, CoinBigIndex maximumU)=0
Gets space for a factorization. 
 
int checkPivot(double saveFromU, double oldPivot) const 
Returns accuracy status of replaceColumn returns 0=OK, 1=Probably OK, 2=singular. ...
 
Abstract base class which also has some scalars so can be used from Dense or Simp. 
 
CoinSimplexInt numberDense() const 
Number of dense rows after factorization. 
 
virtual void updateColumnCpu(CoinIndexedVector ®ionSparse, int whichCpu) const 
Updates one column (FTRAN) 
 
virtual void replaceColumnPart3(const AbcSimplex *model, CoinIndexedVector *regionSparse, CoinIndexedVector *tableauColumn, int pivotRow, double alpha)=0
Replaces one Column to basis, partial update already in U. 
 
virtual void clearArrays()
Get rid of all memory. 
 
virtual CoinAbcAnyFactorization * clone() const =0
Clone. 
 
int numberRows() const 
Number of Rows after factorization. 
 
virtual CoinFactorizationDouble * pivotRegion() const 
Returns status. 
 
virtual int * permute() const 
Returns permute in. 
 
virtual void postProcess(const int *sequence, int *pivotVariable)=0
Does post processing on valid factorization - putting variables on correct rows. 
 
void setNumberSlacks(int value)
Sets number of slacks. 
 
CoinAbcAnyFactorization()
Default constructor. 
 
virtual CoinFactorizationDouble * elements() const 
Returns array to put basis elements in. 
 
virtual CoinAbcAnyFactorization * clone() const 
Clone. 
 
virtual int * permuteBack() const 
Returns permute back. 
 
int numberDense_
Number of dense rows in factorization. 
 
virtual ~CoinAbcDenseFactorization()
Destructor. 
 
Sparse Matrix Base Class. 
 
int numberSlacks_
Number slacks. 
 
virtual int checkReplacePart2(int pivotRow, double btranAlpha, double ftranAlpha, double ftAlpha, double acceptablePivot=1.0e-8)=0
Checks if can replace one Column to basis, returns 0=OK, 1=Probably OK, 2=singular, 3=no room, 5 max pivots. 
 
virtual void updateColumnFTPart2(CoinIndexedVector &)
Updates one column (FTRAN) from unpacked regionSparse Tries to do FT update number returned is negati...
 
virtual void makeNonSingular(int *sequence)=0
Makes a non-singular basis by replacing variables. 
 
This deals with Factorization and Updates This is a simple dense version so other people can write a ...
 
int numberRows_
Number of Rows in factorization. 
 
int solveMode_
Solve mode e.g. 
 
virtual double checkReplacePart1b(CoinIndexedVector *, int)
Checks if can replace one Column to basis, returns update alpha Fills in region for use later partial...
 
virtual void postProcess(const int *sequence, int *pivotVariable)
Does post processing on valid factorization - putting variables on correct rows. 
 
virtual void updateWeights(CoinIndexedVector ®ionSparse) const =0
Updates one column for dual steepest edge weights (FTRAN) 
 
int status_
Status of factorization. 
 
virtual void preProcess()
PreProcesses column ordered copy of basis. 
 
void setStatus(int value)
Sets status. 
 
virtual void checkMarkArrays() const 
Returns status. 
 
virtual int updateColumnFT(CoinIndexedVector ®ionSparse)=0
Updates one column (FTRAN) from unpacked regionSparse Tries to do FT update number returned is negati...
 
virtual int updateColumnFTPart1(CoinIndexedVector ®ionSparse)=0
Updates one column (FTRAN) from unpacked regionSparse Tries to do FT update number returned is negati...
 
virtual int * numberInRow() const 
Number of entries in each row. 
 
double CoinFactorizationDouble
 
int numberSlacks() const 
Returns number of slacks. 
 
virtual int updateColumn(CoinIndexedVector ®ionSparse) const =0
This version has same effect as above with FTUpdate==false so number returned is always >=0...
 
virtual int updateTwoColumnsFT(CoinIndexedVector ®ionFT, CoinIndexedVector ®ionOther)
does FTRAN on two unpacked columns 
 
virtual void updateFullColumnTranspose(CoinIndexedVector ®ionSparse) const =0
Updates one column (BTRAN) from unpacked regionSparse. 
 
double zeroTolerance_
Zero tolerance. 
 
void areaFactor(CoinSimplexDouble value)
Returns status. 
 
CoinSimplexInt maximumRowsAdjusted_
Use for array size to get multiple of 8. 
 
void gutsOfInitialize()
The real work of constructor. 
 
virtual void checkReplacePart1a(CoinIndexedVector *, int)
Checks if can replace one Column to basis, returns update alpha Fills in region for use later partial...
 
void relaxAccuracyCheck(double value)
Allows change of pivot accuracy check 1.0 == none >1.0 relaxed. 
 
int status() const 
Returns status. 
 
void setSolveMode(int value)
Set solve mode e.g. 
 
CoinAbcAnyFactorization & operator=(const CoinAbcAnyFactorization &other)
= copy 
 
CoinFactorizationDouble * workArea_
Work area of numberRows_. 
 
virtual int * intWorkArea() const 
Returns int work area. 
 
virtual int replaceColumn(CoinIndexedVector *regionSparse, int pivotRow, double pivotCheck, bool skipBtranU=false, double acceptablePivot=1.0e-8)
Replaces one Column to basis, returns 0=OK, 1=Probably OK, 2=singular, 3=no room If skipBtranU is fal...
 
double relaxCheck_
Relax check on accuracy in replaceColumn. 
 
virtual double checkReplacePart1(CoinIndexedVector *, CoinIndexedVector *, int)
Checks if can replace one Column to basis, returns update alpha Fills in region for use later partial...
 
virtual int updateColumnTranspose(CoinIndexedVector ®ionSparse) const =0
Updates one column (BTRAN) from unpacked regionSparse. 
 
virtual void updateFullColumn(CoinIndexedVector ®ionSparse) const 
This version does FTRAN on array when indices not set up. 
 
CoinAbcDenseFactorization()
Default constructor. 
 
virtual int numberElements() const =0
Total number of elements in factorization. 
 
virtual int numberElements() const 
Total number of elements in factorization. 
 
int pivots() const 
Returns number of pivots since factorization. 
 
virtual int updateColumnFTPart1(CoinIndexedVector ®ionSparse)
Updates one column (FTRAN) from unpacked regionSparse Tries to do FT update number returned is negati...
 
int maximumRows_
Maximum rows ever (i.e. use to copy arrays etc) 
 
virtual void replaceColumnPart3(const AbcSimplex *model, CoinIndexedVector *regionSparse, CoinIndexedVector *tableauColumn, int pivotRow, double alpha)
Replaces one Column to basis, partial update already in U. 
 
virtual ~CoinAbcAnyFactorization()
Destructor. 
 
virtual int factor(AbcSimplex *model)
Does most of factorization returning status 0 - OK -99 - needs more memory -1 - singular - use number...
 
virtual int updateTwoColumnsFT(CoinIndexedVector ®ionFT, CoinIndexedVector ®ionOther)=0
does FTRAN on two unpacked columns 
 
virtual CoinBigIndex * starts() const 
Returns array to put basis starts in. 
 
virtual int * pivotRow() const 
Returns pivot row. 
 
virtual CoinFactorizationDouble * workArea() const 
Returns work area. 
 
int solveMode() const 
Get solve mode e.g. 
 
int * pivotRow_
Pivot row. 
 
virtual int updateColumn(CoinIndexedVector ®ionSparse) const 
This version has same effect as above with FTUpdate==false so number returned is always >=0...
 
CoinBigIndex maximumSpace_
Maximum length of iterating area. 
 
friend void CoinAbcDenseFactorizationUnitTest(const std::string &mpsDir)
 
virtual void updateFullColumnTranspose(CoinIndexedVector ®ionSparse) const 
Updates one column (BTRAN) from unpacked regionSparse. 
 
virtual void goSparse()
Sees whether to go sparse. 
 
virtual int * indices() const 
Returns array to put basis indices in. 
 
virtual int * indices() const =0
Returns array to put basis indices in. 
 
virtual double checkReplacePart1(CoinIndexedVector *, int)
Checks if can replace one Column to basis, returns update alpha Fills in region for use later partial...
 
virtual int * permute() const =0
Returns permute in. 
 
virtual void updateColumnFT(CoinIndexedVector ®ionSparseFT, CoinIndexedVector &, int)
Updates one column (FTRAN) from unpacked regionSparse Tries to do FT update number returned is negati...
 
int numberGoodU_
Number factorized in U (not row singletons) 
 
int numberGoodColumns() const 
Number of good columns in factorization. 
 
double pivotTolerance_
Pivot tolerance. 
 
CoinFactorizationDouble * elements_
Elements of factorization and updates length is maxR*maxR+maxSpace will always be long enough so can ...
 
double areaFactor() const 
Area factor. 
 
double maximumCoefficient() const 
Returns maximum absolute value in factorization. 
 
virtual void updateColumnTransposeCpu(CoinIndexedVector ®ionSparse, int whichCpu) const 
Updates one column (BTRAN) 
 
virtual int updateColumnTranspose(CoinIndexedVector ®ionSparse) const 
Updates one column (BTRAN) from unpacked regionSparse. 
 
virtual int checkReplacePart2(int pivotRow, double btranAlpha, double ftranAlpha, double ftAlpha, double acceptablePivot=1.0e-8)
Checks if can replace one Column to basis, returns 0=OK, 1=Probably OK, 2=singular, 3=no room, 5 max pivots. 
 
CoinBigIndex factorElements_
Number of elements after factorization. 
 
void setNumberRows(int value)
Set number of Rows after factorization. 
 
virtual int * numberInColumn() const 
Number of entries in each column. 
 
virtual void updateFullColumn(CoinIndexedVector ®ionSparse) const =0
This version does FTRAN on array when indices not set up. 
 
virtual void replaceColumnPart3(const AbcSimplex *model, CoinIndexedVector *regionSparse, CoinIndexedVector *tableauColumn, CoinIndexedVector *, int pivotRow, double alpha)
Replaces one Column to basis, partial update in vector. 
 
virtual void updateColumnFTPart2(CoinIndexedVector ®ionSparse)=0
Updates one column (FTRAN) from unpacked regionSparse Tries to do FT update number returned is negati...
 
int numberPivots_
Number pivots since last factorization. 
 
int maximumPivots_
Maximum number of pivots before factorization. 
 
virtual bool wantsTableauColumn() const 
Returns true if wants tableauColumn in replaceColumn. 
 
void clearArrays()
Get rid of all memory. 
 
double areaFactor_
Area factor. 
 
double minimumPivotTolerance() const 
Minimum pivot tolerance. 
 
double minimumPivotTolerance_
Minimum pivot tolerance. 
 
CoinAbcDenseFactorization & operator=(const CoinAbcDenseFactorization &other)
= copy 
 
void setPivots(int value)
Sets number of pivots since factorization. 
 
virtual void setUsefulInformation(const int *info, int whereFrom)
Useful information for factorization 0 - iteration number whereFrom is 0 for factorize and 1 for repl...
 
double getAccuracyCheck() const 
Returns status. 
 
virtual void preProcess()=0
PreProcesses column ordered copy of basis.