25 #define LARGE_SET COIN_INT_MAX - 10 
   26 #define LARGE_UNSET (LARGE_SET + 1) 
  135 #define ABC_USE_FUNCTION_POINTERS 0 
  136 #define SMALL_PERMUTE 
  138 #ifdef ABC_USE_FUNCTION_POINTERS 
  140 #if ABC_USE_FUNCTION_POINTERS 
  155     return scatterPointersUColumnAddress_;
 
  237   inline bool forrestTomlin()
 const 
  239   { 
return doForrestTomlin_;}
 
  240   inline void setForrestTomlin(
bool value)
 
  241   { doForrestTomlin_=value;}
 
  336 #if COIN_BIG_DOUBLE == 1 
  354   void clearHiddenArrays();
 
  386 #ifdef ABC_ORDERED_FACTORIZATION 
  387   void permuteInForFtran(
CoinIndexedVector ®ionSparse, 
bool full = 
false) 
const;
 
  390   void permuteInForBtranAndMultiply(
CoinIndexedVector ®ionSparse, 
bool full = 
false) 
const;
 
  410   virtual int checkReplace ( 
const AbcSimplex * model,
 
  414                  double acceptablePivot = 1.0e-8);
 
  422               bool skipBtranU=
false,
 
  430 #ifdef ABC_LONG_FACTORIZATION 
  441 #ifdef ABC_LONG_FACTORIZATION 
  448 #ifdef MOVE_REPLACE_PART1A 
  456 #ifdef ABC_LONG_FACTORIZATION 
  468 #ifdef ABC_LONG_FACTORIZATION
 
  472     double acceptablePivot = 1.0e-8);
 
  479 #ifdef ABC_LONG_FACTORIZATION
 
  490 #ifdef ABC_LONG_FACTORIZATION
 
  494 #ifdef EARLY_FACTORIZE 
  495   virtual int replaceColumns(
const AbcSimplex *model,
 
  498     int firstPivot, 
int lastPivot, 
bool cleanUp);
 
  621 #ifdef EARLY_FACTORIZE 
  691 #define checkLinks(x) 
  700     firstCount[count] = index;
 
  701     nextCount[index] = next;
 
  704       lastCount[next] = index;
 
  713     assert(next != index);
 
  714     assert(last != index);
 
  716       lastCount[next] = last;
 
  718       nextCount[last] = next;
 
  722       firstCount[count] = next;
 
  734     firstCount[count] = index;
 
  737     assert(next != index);
 
  738     assert(last != index);
 
  739     nextCount[index] = next2;
 
  742       lastCount[next] = last;
 
  744       lastCount[next2] = index;
 
  746       nextCount[last] = next;
 
  748       int count = last + numberRows_ + 2;
 
  749       firstCount[count] = next;
 
  929 #undef ABC_DENSE_CODE 
  930 #define ABC_DENSE_CODE 0 
  945 #ifdef ABC_USE_FUNCTION_POINTERS 
 1045 #ifdef ABC_USE_FUNCTION_POINTERS 
 1059 #if COIN_BIG_DOUBLE == 1 
 1102 #ifdef ABC_USE_FUNCTION_POINTERS 
 1157 #if FACTORIZATION_STATISTICS 
 1158   double ftranTwiddleFactor1_;
 
 1159   double ftranTwiddleFactor2_;
 
 1173 #if FACTORIZATION_STATISTICS 
 1174   double ftranFTTwiddleFactor1_;
 
 1175   double ftranFTTwiddleFactor2_;
 
 1191 #if FACTORIZATION_STATISTICS 
 1192   double btranTwiddleFactor1_;
 
 1193   double btranTwiddleFactor2_;
 
 1208 #if FACTORIZATION_STATISTICS 
 1209   double ftranFullTwiddleFactor1_;
 
 1210   double ftranFullTwiddleFactor2_;
 
 1225 #if FACTORIZATION_STATISTICS 
 1226   double btranFullTwiddleFactor1_;
 
 1227   double btranFullTwiddleFactor2_;
 
 1261   inline bool gotLCopy()
 const { 
return true; }
 
 1264   inline bool gotRCopy()
 const { 
return true; }
 
 1267   inline bool gotUCopy()
 const { 
return true; }
 
 1270   inline bool gotSparse()
 const { 
return true; }
 
 1276   inline bool gotLCopy()
 const { 
return false; }
 
 1279   inline bool gotRCopy()
 const { 
return false; }
 
 1282   inline bool gotUCopy()
 const { 
return false; }
 
 1285   inline bool gotSparse()
 const { 
return false; }
 
double ftranFullAverageAfterL_
Next Row/Column with count. 
 
void scan(CoinIndexedVector *vector) const 
Scans region to find nonzeros. 
 
CoinIntArrayWithLength numberInColumnPlus_
Number in each Column including pivoted. 
 
CoinIntArrayWithLength indexColumnU_
Base address for U (may change) 
 
void(* scatterUpdate)(int, CoinFactorizationDouble, const CoinFactorizationDouble *, double *) SCATTER_ATTRIBUTE
 
void updateColumnTransposeRDensish(CoinIndexedVector *region) const 
Updates part of column transpose (BTRANR) when dense. 
 
void setYesGotLCopy()
Next Row/Column with count. 
 
int replaceColumnU(CoinIndexedVector *regionSparse, CoinBigIndex *deletedPosition, CoinSimplexInt *deletedColumns, CoinSimplexInt pivotRow)
Combines BtranU and store which elements are to be deleted returns number to be deleted. 
 
virtual CoinAbcAnyFactorization * clone() const 
Clone. 
 
CoinFactorizationDouble * elementRowUAddress_
Next Row/Column with count. 
 
CoinIntArrayWithLength firstCount_
First Row/Column with count of k, can tell which by offset - Rows then Columns. 
 
void gutsOfCopy(const CoinAbcTypeFactorization &other)
See if worth going sparse. 
 
CoinSimplexInt numberForrestTomlin() const 
Length of FT vector. 
 
double ftranCountAfterR_
Next Row/Column with count. 
 
CoinSimplexInt * indexRowRAddress_
Row indices for R. 
 
void updateColumnLSparse(CoinIndexedVector *region) const 
Updates part of column (FTRANL) when sparse. 
 
CoinSimplexInt * listAddress_
Next Row/Column with count. 
 
CoinIntArrayWithLength numberInColumn_
Number in each Column. 
 
int maximumPivots() const 
Maximum number of pivots between factorizations. 
 
void updateColumnTransposeR(CoinIndexedVector *region, CoinAbcStatistics &statistics) const 
Updates part of column transpose (BTRANR) 
 
CoinBigIndex numberL_
Number in L. 
 
void afterPivot(CoinSimplexInt pivotRow, CoinSimplexInt pivotColumn)
After pivoting. 
 
double ftranFTAverageAfterR_
Next Row/Column with count. 
 
void deleteLink(CoinSimplexInt index)
Deletes a link in chain of equal counts. 
 
virtual CoinSimplexInt updateColumnTranspose(CoinIndexedVector ®ionSparse) const 
Updates one column (BTRAN) from regionSparse2 regionSparse starts as zero and is zero at end Note - i...
 
void cleanup()
Cleans up at end of factorization. 
 
CoinBigIndex numberL() const 
Number in L. 
 
double ftranAverageAfterU_
Next Row/Column with count. 
 
CoinSimplexInt * lastColumnAddress_
Next Row/Column with count. 
 
bool gotSparse() const 
Next Row/Column with count. 
 
void updateColumnLDensish(CoinIndexedVector *region) const 
Updates part of column (FTRANL) when densish. 
 
CoinBigIndex lengthAreaL() const 
Returns length of L area. 
 
double btranFullAverageAfterL_
Next Row/Column with count. 
 
Abstract base class which also has some scalars so can be used from Dense or Simp. 
 
void printRegion(const CoinIndexedVector &vector, const char *where) const 
See if worth going sparse. 
 
CoinSimplexInt sparseThreshold() const 
get sparse threshold 
 
const double * denseVector(const CoinIndexedVector &vector) const 
Returns number in U area. 
 
CoinSimplexInt numberTrials_
Number of trials before rejection. 
 
double btranCountAfterU_
Next Row/Column with count. 
 
CoinBigIndexArrayWithLength startColumnL_
Start of each column in L. 
 
CoinSimplexInt checkPivot(CoinSimplexDouble saveFromU, CoinSimplexDouble oldPivot) const 
Returns accuracy status of replaceColumn returns 0=OK, 1=Probably OK, 2=singular. ...
 
CoinSimplexInt numberGoodL_
Number factorized in L. 
 
CoinFactorizationDouble * pivotRegionAddress_
Next Row/Column with count. 
 
CoinSimplexInt * nextRowAddress_
Next Row/Column with count. 
 
CoinFactorizationDoubleArrayWithLength elementU_
Elements of U. 
 
void updateColumnUSparse(CoinIndexedVector *regionSparse) const 
Updates part of column (FTRANU) when sparse. 
 
#define ABC_FAC_GOT_UCOPY
 
CoinBigIndex numberElementsL() const 
Returns number in L area. 
 
CoinSimplexInt * pivotLinkedForwardsAddress_
Next Row/Column with count. 
 
CoinSimplexInt numberBtranFullCounts_
Next Row/Column with count. 
 
virtual void updateFullColumn(CoinIndexedVector ®ionSparse) const 
Updates one full column (FTRAN) 
 
bool getColumnSpace(CoinSimplexInt iColumn, CoinSimplexInt extraNeeded)
Gets space for one Column with given length, may have to do compression (returns True if successful)...
 
CoinIntArrayWithLength permute_
Permutation vector for pivot row order. 
 
CoinFactorizationDoubleArrayWithLength pivotRegion_
Inverses of pivot values. 
 
CoinIntArrayWithLength indexRowU_
Row indices of U. 
 
CoinBigIndex lengthAreaU() const 
Returns length of U area. 
 
void setNoGotUCopy()
Next Row/Column with count. 
 
CoinSimplexInt * indexColumnUAddress_
Next Row/Column with count. 
 
CoinIntArrayWithLength nextRow_
Next Row in memory order. 
 
virtual bool wantsTableauColumn() const 
Returns true if wants tableauColumn in replaceColumn. 
 
CoinSimplexInt numberFtranFullCounts_
Next Row/Column with count. 
 
CoinSimplexInt lastSlack_
Next Row/Column with count. 
 
void toLongArray(CoinIndexedVector *vector, int which) const 
To a work array and associate vector. 
 
CoinSimplexInt * sparseAddress_
Next Row/Column with count. 
 
int numberRows() const 
Number of Rows after factorization. 
 
void updateColumnTransposeUSparse(CoinIndexedVector *region) const 
Updates part of column transpose (BTRANU) when sparse, assumes index is sorted i.e. 
 
CoinSimplexInt replaceColumnPFI(CoinIndexedVector *regionSparse, CoinSimplexInt pivotRow, CoinSimplexDouble alpha)
Replaces one Column to basis for PFI returns 0=OK, 1=Probably OK, 2=singular, 3=no room...
 
void updateTwoColumnsUDensish(CoinSimplexInt &numberNonZero1, CoinFactorizationDouble *COIN_RESTRICT region1, CoinSimplexInt *COIN_RESTRICT index1, CoinSimplexInt &numberNonZero2, CoinFactorizationDouble *COIN_RESTRICT region2, CoinSimplexInt *COIN_RESTRICT index2) const 
Updates part of 2 columns (FTRANU) real work. 
 
void show_self() const 
Debug show object (shows one representation) 
 
void updateColumnTransposeLByRow(CoinIndexedVector *region) const 
Updates part of column transpose (BTRANL) when densish by row. 
 
void updateColumnTransposePFI(CoinIndexedVector *region) const 
Updates part of column transpose PFI (BTRAN) (before rest) 
 
virtual CoinSimplexInt factor(AbcSimplex *model)
Does most of factorization. 
 
virtual int updateColumnFTPart1(CoinIndexedVector ®ionSparse)
Later take out return codes (apart from +- 1 on FT) 
 
void updateColumnL(CoinIndexedVector *region, CoinAbcStatistics &statistics) const 
Updates part of column (FTRANL) 
 
void sort() const 
Debug - sort so can compare. 
 
bool gotLCopy() const 
Next Row/Column with count. 
 
void gutsOfDestructor(CoinSimplexInt type=1)
The real work of constructors etc 0 just scalars, 1 bit normal. 
 
double ftranFullAverageAfterR_
Next Row/Column with count. 
 
CoinSimplexInt * pivotColumnAddress_
Next Row/Column with count. 
 
CoinSimplexInt sparseThreshold_
Below this use sparse technology - if 0 then no L row copy. 
 
CoinBigIndex * startColumnRAddress_
Next Row/Column with count. 
 
CoinSimplexDouble maximumCoefficient() const 
Returns maximum absolute value in factorization. 
 
CoinSimplexInt leadingDimension_
Leading dimension for dense. 
 
void separateLinks()
Separate out links with same row/column count. 
 
CoinFactorizationDouble * elementU() const 
Elements of U. 
 
CoinSimplexInt factorDense()
Does dense phase of factorization return code is <0 error, 0= finished. 
 
double ftranFullCountAfterR_
Next Row/Column with count. 
 
double ftranFTCountInput_
Next Row/Column with count. 
 
virtual CoinSimplexInt * indices() const 
Returns array to put basis indices in. 
 
virtual void getAreas(CoinSimplexInt numberRows, CoinSimplexInt numberColumns, CoinBigIndex maximumL, CoinBigIndex maximumU)
Gets space for a factorization, called by constructors. 
 
int wantToGoDense()
After pivoting - returns true if need to go dense. 
 
virtual CoinBigIndex * starts() const 
Returns pivot row. 
 
CoinIntArrayWithLength markRow_
Marks rows to be updated. 
 
CoinBigIndex * startRowUAddress_
Next Row/Column with count. 
 
CoinBigIndex numberCompressions_
Number of compressions done. 
 
int * array() const 
Get Array. 
 
void almostDestructor()
Delete all stuff (leaves as after CoinAbcFactorization()) 
 
CoinBigIndex * startColumnL() const 
Start of each column in L. 
 
CoinSimplexInt numberRowsLeft_
Number Rows left (numberRows-numberGood) 
 
void resetStatistics()
Reset all sparsity etc statistics. 
 
double btranAverageAfterR_
Next Row/Column with count. 
 
CoinFactorizationDouble * workAreaAddress_
Next Row/Column with count. 
 
void updateColumnTransposeL(CoinIndexedVector *region, CoinAbcStatistics &statistics) const 
Updates part of column transpose (BTRANL) 
 
bool gotRCopy() const 
Next Row/Column with count. 
 
CoinSimplexInt * pivotLOrder() const 
Returns address of permute region. 
 
CoinBigIndexArrayWithLength convertRowToColumnU_
Converts rows to columns in U. 
 
bool pivotOneOtherRow(CoinSimplexInt pivotRow, CoinSimplexInt pivotColumn)
Pivots when just one other row so faster? 
 
CoinSimplexInt * nextCountAddress_
Next Row/Column with count. 
 
void fromLongArray(CoinIndexedVector *vector) const 
From a work array and dis-associate vector. 
 
virtual void updateColumnCpu(CoinIndexedVector ®ionSparse, int whichCpu) const 
Updates one column (FTRAN) 
 
CoinSimplexInt * pivotLinkedForwards() const 
Returns address of permute region. 
 
virtual void updateColumnFTPart2(CoinIndexedVector ®ionSparse)
Later take out return codes (apart from +- 1 on FT) 
 
int numberRows_
Number of Rows in factorization. 
 
virtual double checkReplacePart1b(CoinIndexedVector *, int)
Checks if can replace one Column to basis, returns update alpha Fills in region for use later partial...
 
#define ABC_FAC_GOT_LCOPY
 
double btranAverageAfterL_
Next Row/Column with count. 
 
CoinSimplexInt numberRowsExtra_
Number of Rows after iterating. 
 
void updateColumnTransposeLDensish(CoinIndexedVector *region) const 
Updates part of column transpose (BTRANL) when densish by column. 
 
CoinBigIndex lengthU_
Length of U. 
 
double ftranFTCountAfterU_
Next Row/Column with count. 
 
void clearArrays()
Get rid of all memory. 
 
void updateColumnR(CoinIndexedVector *region, CoinAbcStatistics &statistics) const 
Updates part of column (FTRANR) without FT update. 
 
CoinIntArrayWithLength numberInRow_
Number in each Row. 
 
CoinSimplexInt * lastCount() const 
Previous Row/Column with count. 
 
CoinFactorizationDoubleArrayWithLength elementRowU_
Elements of U by row. 
 
CoinSimplexDouble adjustedAreaFactor() const 
Returns areaFactor but adjusted for dense. 
 
CoinBigIndex lastEntryByColumnU_
Last entry by column for U. 
 
CoinSimplexInt factorSparse()
Does sparse phase of factorization return code is <0 error, 0= finished. 
 
CoinSimplexInt numberFtranCounts_
Next Row/Column with count. 
 
void updatePartialUpdate(CoinIndexedVector &partialUpdate)
Update partial Ftran by R update. 
 
void setNumberElementsU(CoinBigIndex value)
Setss number in U area. 
 
double * denseVector() const 
Get the vector as a dense vector. 
 
CoinIntArrayWithLength saveColumn_
Columns left to do in a single pivot. 
 
CoinSimplexInt denseThreshold() const 
Gets dense threshold. 
 
CoinSimplexInt * firstCountAddress_
Next Row/Column with count. 
 
double * denseVector(CoinIndexedVector &vector) const 
Returns number in U area. 
 
CoinSimplexDouble conditionNumber() const 
Condition number - product of pivots after factorization. 
 
CoinSimplexInt * lastRowAddress_
Next Row/Column with count. 
 
CoinSimplexInt * saveColumnAddress_
Next Row/Column with count. 
 
CoinBigIndex lengthAreaL_
Length of area reserved for L. 
 
void goSparse2()
Later take out return codes (apart from +- 1 on FT) 
 
void updateColumnPFI(CoinIndexedVector *regionSparse) const 
Updates part of column PFI (FTRAN) (after rest) 
 
CoinFactorizationDoubleArrayWithLength denseArea_
Dense area. 
 
CoinSimplexInt numberU_
Number in U. 
 
CoinBigIndex * convertRowToColumnUAddress_
Next Row/Column with count. 
 
CoinBigIndex lastEntryByRowU_
Last entry by row for U. 
 
CoinFactorizationDouble * elementUAddress_
Next Row/Column with count. 
 
CoinIntArrayWithLength lastRow_
Previous Row in memory order. 
 
double preProcess3()
Return largest element. 
 
double ftranFullAverageAfterU_
Next Row/Column with count. 
 
double ftranCountAfterL_
Next Row/Column with count. 
 
CoinSimplexInt * firstCount() const 
For equal counts in factorization. 
 
CoinBigIndex * startColumnR() const 
Start of columns for R. 
 
void updateColumnU(CoinIndexedVector *region, CoinAbcStatistics &statistics) const 
Updates part of column (FTRANU) 
 
double CoinFactorizationDouble
 
CoinSimplexUnsignedInt * workArea2Address_
Next Row/Column with count. 
 
virtual void replaceColumnPart3(const AbcSimplex *model, CoinIndexedVector *regionSparse, CoinIndexedVector *tableauColumn, int pivotRow, double alpha)
Replaces one Column to basis, partial update already in U. 
 
CoinSimplexInt * pivotLinkedBackwardsAddress_
Next Row/Column with count. 
 
double ftranFullCountInput_
To decide how to solve. 
 
CoinBigIndex * startColumnU() const 
Start of each column in U. 
 
CoinSimplexInt * permute() const 
Returns address of permute region. 
 
virtual int checkReplacePart2(int pivotRow, CoinSimplexDouble 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. 
 
double ftranCountInput_
To decide how to solve. 
 
CoinSimplexInt messageLevel() const 
Level of detail of messages. 
 
CoinFactorizationDouble * denseAreaAddress_
Next Row/Column with count. 
 
void preProcess4()
Gets space for a factorization, called by constructors. 
 
double zeroTolerance_
Zero tolerance. 
 
CoinFactorizationDouble * array() const 
Get Array. 
 
bool reorderU()
Reorders U so contiguous and in order (if there is space) Returns true if it could. 
 
CoinBigIndex * array() const 
Get Array. 
 
virtual CoinSimplexInt updateColumn(CoinIndexedVector ®ionSparse) const 
This version has same effect as above with FTUpdate==false so number returned is always >=0...
 
CoinBigIndexArrayWithLength convertColumnToRowU_
Converts columns to rows in U. 
 
virtual CoinSimplexInt * numberInColumn() const 
Number of entries in each column. 
 
virtual void checkReplacePart1a(CoinIndexedVector *, int)
Checks if can replace one Column to basis, returns update alpha Fills in region for use later partial...
 
const double * denseVector(const CoinIndexedVector *vector) const 
Returns double * associated with vector. 
 
double btranFullCountInput_
To decide how to solve. 
 
CoinAbcTypeFactorization & operator=(const CoinAbcTypeFactorization &other)
= copy 
 
bool getColumnSpaceIterateR(CoinSimplexInt iColumn, CoinFactorizationDouble value, CoinSimplexInt iRow)
getColumnSpaceIterateR. 
 
double ftranFTAverageAfterU_
Next Row/Column with count. 
 
CoinSimplexInt * pivotLOrderAddress_
Next Row/Column with count. 
 
void setYesGotUCopy()
Next Row/Column with count. 
 
void updateColumnLDense(CoinIndexedVector *region) const 
Updates part of column (FTRANL) when dense (i.e. do as inner products) 
 
CoinIntArrayWithLength indexRowL_
Row indices of L. 
 
CoinSimplexInt numberBtranCounts_
Next Row/Column with count. 
 
CoinSimplexInt * lastCountAddress_
Previous Row/Column with count. 
 
virtual void updateColumnTransposeCpu(CoinIndexedVector ®ionSparse, int whichCpu) const 
Updates one column (BTRAN) 
 
virtual CoinBigIndex numberElements() const 
Total number of elements in factorization. 
 
CoinBigIndex * startRowLAddress_
Next Row/Column with count. 
 
bool getRowSpaceIterate(CoinSimplexInt iRow, CoinSimplexInt extraNeeded)
Gets space for one Row with given length while iterating,  may have to do compression (returns True i...
 
void setYesGotSparse()
Next Row/Column with count. 
 
void updateColumnTransposeUByColumn(CoinIndexedVector *region, CoinSimplexInt smallestIndex) const 
Updates part of column transpose (BTRANU) by column assumes index is sorted i.e. 
 
CoinIntArrayWithLength pivotColumn_
Pivot order for each Column. 
 
void doAddresses()
Set up addresses from arrays. 
 
CoinBigIndex baseL_
Base of L. 
 
CoinSimplexInt numberRowsSmall_
Size of small inverse. 
 
CoinBigIndex totalElements_
Number of elements in U (to go) or while iterating total overall. 
 
CoinBigIndex lengthR_
Length of R stuff. 
 
void goSparse()
makes a row copy of L for speed and to allow very sparse problems 
 
void pack(CoinIndexedVector *regionFrom, CoinIndexedVector *regionTo) const 
Later take out return codes (apart from +- 1 on FT) 
 
double btranCountAfterL_
Next Row/Column with count. 
 
CoinBigIndex baseL() const 
Base of L. 
 
virtual void makeNonSingular(CoinSimplexInt *sequence)
Makes a non-singular basis by replacing variables. 
 
CoinIntArrayWithLength sparse_
Sparse regions. 
 
double btranFullCountAfterR_
Next Row/Column with count. 
 
CoinSimplexInt numberRowsExtra() const 
Number of Rows after iterating. 
 
CoinFactorizationDouble * elementRAddress_
Elements of R. 
 
int pivot(CoinSimplexInt pivotRow, CoinSimplexInt pivotColumn, CoinBigIndex pivotRowPosition, CoinBigIndex pivotColumnPosition, CoinFactorizationDouble *COIN_RESTRICT work, CoinSimplexUnsignedInt *COIN_RESTRICT workArea2, CoinSimplexInt increment2, int *COIN_RESTRICT markRow)
0 fine, -99 singular, 2 dense 
 
void setNoGotSparse()
Next Row/Column with count. 
 
CoinIntArrayWithLength indexColumnL_
Index of column in row for L. 
 
CoinBigIndex * startRowL() const 
Start of each row in L. 
 
void pivotColumnSingleton(CoinSimplexInt pivotRow, CoinSimplexInt pivotColumn)
Does one pivot on Column Singleton in factorization (can't return false) 
 
CoinSimplexInt * permuteAddress_
Next Row/Column with count. 
 
void updateColumnUDensish(CoinIndexedVector *regionSparse) const 
Updates part of column (FTRANU) 
 
double ftranFTAverageAfterL_
Next Row/Column with count. 
 
double btranAverageAfterU_
Next Row/Column with count. 
 
bool storeFT(const CoinIndexedVector *regionFT)
Store update after doing L and R - retuns false if no room. 
 
bool gotUCopy() const 
Next Row/Column with count. 
 
virtual CoinSimplexInt * numberInRow() const 
Number of entries in each row. 
 
void checkConsistency()
Checks that row and column copies look OK. 
 
CoinFactorizationDouble * elementByRowL() const 
Elements in L (row copy) 
 
CoinSimplexInt * indexRowL() const 
Row indices of L. 
 
CoinBigIndex lengthAreaU_
Length of area reserved for U. 
 
double btranCountAfterR_
Next Row/Column with count. 
 
CoinSimplexInt * numberInColumnAddress_
Next Row/Column with count. 
 
void updateColumnTransposeUDensish(CoinIndexedVector *region, CoinSimplexInt smallestIndex) const 
Updates part of column transpose (BTRANU) when densish, assumes index is sorted i.e. 
 
CoinSimplexInt * pivotLinkedBackwards() const 
Forward and backward linked lists (numberRows_+2) 
 
CoinBigIndexArrayWithLength startRowU_
Start of each Row as pointer. 
 
CoinSimplexInt * indexColumnL() const 
Index of column in row for L. 
 
void modifyLink(CoinSimplexInt index, CoinSimplexInt count)
Modifies links in chain of equal counts. 
 
double ftranFullCountAfterU_
Next Row/Column with count. 
 
virtual CoinFactorizationDouble * elements() const 
Returns array to put basis elements in. 
 
CoinFactorizationDouble * elementLAddress_
Next Row/Column with count. 
 
virtual CoinFactorizationDouble * pivotRegion() const 
Returns address of pivot region. 
 
CoinFactorizationDoubleArrayWithLength elementL_
Elements of L. 
 
void checkSparse()
See if worth going sparse. 
 
double ftranFTCountAfterL_
Next Row/Column with count. 
 
CoinUnsignedIntArrayWithLength workArea2_
Second work area. 
 
CoinSimplexInt * indexColumnLAddress_
Next Row/Column with count. 
 
void fromLongArray(int which) const 
From a work array and dis-associate vector. 
 
virtual void postProcess(const CoinSimplexInt *sequence, CoinSimplexInt *pivotVariable)
Does post processing on valid factorization - putting variables on correct rows. 
 
CoinIntArrayWithLength lastColumn_
Previous Column in memory order. 
 
CoinSimplexInt initialNumberRows_
Rows first time nonzero. 
 
CoinBigIndexArrayWithLength startRowL_
Start of each row in L. 
 
CoinBigIndex * convertColumnToRowUAddress_
Next Row/Column with count. 
 
void setNoGotRCopy()
Next Row/Column with count. 
 
double btranFullAverageAfterR_
Next Row/Column with count. 
 
virtual int * pivotRow() const 
Returns pivot row. 
 
CoinBigIndex numberCompressions() const 
Number of compressions done. 
 
double ftranCountAfterU_
Next Row/Column with count. 
 
CoinBigIndex * startColumnLAddress_
Next Row/Column with count. 
 
CoinSimplexInt numberR_
Number in R. 
 
virtual double checkReplacePart1(CoinIndexedVector *regionSparse, int pivotRow)
Checks if can replace one Column to basis, returns update alpha Fills in region for use later partial...
 
void addLink(CoinSimplexInt index, CoinSimplexInt count)
Adds a link in chain of equal counts. 
 
CoinFactorizationLongDouble * version. 
 
CoinSimplexInt maximumRows_
Maximum rows (ever) (here to use double alignment) 
 
CoinSimplexInt * numberInColumnPlusAddress_
Next Row/Column with count. 
 
double btranFullCountAfterL_
Next Row/Column with count. 
 
CoinBigIndex * startColumnUAddress_
Next Row/Column with count. 
 
virtual CoinSimplexInt updateTwoColumnsFT(CoinIndexedVector ®ionFT, CoinIndexedVector ®ionOther)
Updates one column (FTRAN) from region2 Tries to do FT update number returned is negative if no room...
 
CoinBigIndex lengthAreaR_
length of area reserved for R 
 
CoinSimplexInt * nextCount() const 
Next Row/Column with count. 
 
void gutsOfInitialize(CoinSimplexInt type)
1 bit - tolerances etc, 2 more, 4 dummy arrays 
 
CoinSimplexInt * numberInRowAddress_
Next Row/Column with count. 
 
CoinBigIndex getColumnSpaceIterate(CoinSimplexInt iColumn, CoinFactorizationDouble value, CoinSimplexInt iRow)
getColumnSpaceIterate. 
 
CoinSimplexInt maximumRowsExtra() const 
Maximum of Rows after iterating. 
 
CoinBigIndex numberElementsR() const 
Returns number in R area. 
 
void updateColumnTransposeRSparse(CoinIndexedVector *region) const 
Updates part of column transpose (BTRANR) when sparse. 
 
CoinSimplexInt messageLevel_
Detail in messages. 
 
This deals with Factorization and Updates. 
 
#define FACTOR_CPU
This deals with Factorization and Updates. 
 
void updateColumnUDense(CoinIndexedVector *regionSparse) const 
Updates part of column (FTRANU) when dense (i.e. do as inner products) 
 
CoinBigIndex maximumU_
Maximum space used in U. 
 
void setNoGotLCopy()
Next Row/Column with count. 
 
void unpack(CoinIndexedVector *regionFrom, CoinIndexedVector *regionTo) const 
Later take out return codes (apart from +- 1 on FT) 
 
virtual void preProcess()
PreProcesses column ordered copy of basis. 
 
CoinBigIndex firstZeroed_
First place in funny copy zeroed out. 
 
virtual void updateFullColumnTranspose(CoinIndexedVector ®ionSparse) const 
Updates one full column (BTRAN) 
 
bool pivotRowSingleton(CoinSimplexInt pivotRow, CoinSimplexInt pivotColumn)
Does one pivot on Row Singleton in factorization. 
 
virtual CoinSimplexInt * pivotColumn() const 
Returns address of pivotColumn region (also used for permuting) 
 
virtual void checkMarkArrays() const 
Later take out return codes (apart from +- 1 on FT) 
 
double ftranAverageAfterL_
Next Row/Column with count. 
 
CoinSimplexInt maximumRowsExtra_
Maximum number of Rows after iterating. 
 
double ftranFullCountAfterL_
Next Row/Column with count. 
 
virtual void updateWeights(CoinIndexedVector ®ionSparse) const 
Updates one column for dual steepest edge weights (FTRAN) 
 
unsigned char CoinCheckZero
 
virtual ~CoinAbcTypeFactorization()
Destructor. 
 
CoinBigIndex numberElementsU() const 
Returns number in U area. 
 
CoinSimplexInt * indexRowUAddress_
Next Row/Column with count. 
 
CoinFactorizationDouble * version. 
 
CoinBigIndex lengthL_
Length of L. 
 
bool getRowSpace(CoinSimplexInt iRow, CoinSimplexInt extraNeeded)
Gets space for one Row with given length,  may have to do compression (returns True if successful)...
 
void updateColumnTransposeLSparse(CoinIndexedVector *region) const 
Updates part of column transpose (BTRANL) when sparse (by Row) 
 
CoinFactorizationDoubleArrayWithLength workArea_
First work area. 
 
CoinSimplexInt denseThreshold_
Dense threshold (here to use double alignment) 
 
virtual CoinSimplexInt updateColumnFT(CoinIndexedVector ®ionSparse)
Later take out return codes (apart from +- 1 on FT) 
 
CoinBigIndexArrayWithLength startColumnU_
Start of each column in U. 
 
double btranFullAverageAfterU_
Next Row/Column with count. 
 
CoinFactorizationDouble * elementByRowLAddress_
Next Row/Column with count. 
 
CoinSimplexInt * nextColumnAddress_
Next Row/Column with count. 
 
unsigned int CoinSimplexUnsignedInt
 
friend void CoinAbcFactorizationUnitTest(const std::string &mpsDir)
 
void setYesGotRCopy()
Next Row/Column with count. 
 
CoinSimplexInt numberFtranFTCounts_
Next Row/Column with count. 
 
CoinSimplexInt state_
State of saved version and what can be done 0 - nothing saved 1 - saved and can go back to previous s...
 
CoinAbcTypeFactorization()
Default constructor. 
 
CoinSimplexInt * indexRowU() const 
Row indices of U. 
 
CoinBigIndex sizeSparseArray_
Size in bytes of a sparseArray. 
 
double ftranFTCountAfterR_
Next Row/Column with count. 
 
double * denseVector(CoinIndexedVector *vector) const 
Returns double * associated with vector. 
 
double btranCountInput_
Next Row/Column with count. 
 
void setDenseThreshold(CoinSimplexInt value)
Sets dense threshold. 
 
double btranFullCountAfterU_
Next Row/Column with count. 
 
CoinSimplexInt maximumMaximumPivots_
Maximum maximum pivots. 
 
CoinSimplexInt * indexRowLAddress_
Next Row/Column with count. 
 
double ftranAverageAfterR_
Next Row/Column with count. 
 
CoinFactorizationDoubleArrayWithLength elementByRowL_
Elements in L (row copy) 
 
void updateColumnTransposeU(CoinIndexedVector *region, CoinSimplexInt smallestIndex, CoinAbcStatistics &statistics) const 
Updates part of column transpose (BTRANU), assumes index is sorted i.e. 
 
#define ABC_FAC_GOT_RCOPY
 
CoinCheckZero * markRowAddress_
Next Row/Column with count. 
 
#define ABC_FAC_GOT_SPARSE
 
CoinIntArrayWithLength nextColumn_
Next Column in memory order. 
 
int scan()
Scan dense region and set up indices (returns number found) 
 
bool spaceForForrestTomlin() const 
True if FT update and space.