25 #define LARGE_SET COIN_INT_MAX-10
26 #define LARGE_UNSET (LARGE_SET+1)
117 #define ABC_USE_FUNCTION_POINTERS 0
118 #define SMALL_PERMUTE
120 #ifdef ABC_USE_FUNCTION_POINTERS
122 #if ABC_USE_FUNCTION_POINTERS
136 {
return scatterPointersUColumnAddress_;}
198 inline bool forrestTomlin()
const
200 {
return doForrestTomlin_;}
201 inline void setForrestTomlin(
bool value)
202 { doForrestTomlin_=value;}
273 #if COIN_BIG_DOUBLE==1
291 void clearHiddenArrays();
313 #ifdef ABC_ORDERED_FACTORIZATION
317 void permuteInForBtranAndMultiply(
CoinIndexedVector & regionSparse,
bool full=
false)
const ;
337 virtual int checkReplace (
const AbcSimplex * model,
341 double acceptablePivot = 1.0e-8);
349 bool skipBtranU=
false,
357 #ifdef ABC_LONG_FACTORIZATION
367 #ifdef ABC_LONG_FACTORIZATION
373 #ifdef MOVE_REPLACE_PART1A
381 #ifdef ABC_LONG_FACTORIZATION
392 #ifdef ABC_LONG_FACTORIZATION
396 double acceptablePivot = 1.0e-8);
403 #ifdef ABC_LONG_FACTORIZATION
414 #ifdef ABC_LONG_FACTORIZATION
418 #ifdef EARLY_FACTORIZE
419 virtual int replaceColumns (
const AbcSimplex * model,
422 int firstPivot,
int lastPivot,
bool cleanUp);
539 #ifdef EARLY_FACTORIZE
608 # define checkLinks(x)
616 firstCount[count] = index;
617 nextCount[index] = next;
620 lastCount[next] = index;
628 assert (next!=index);
629 assert (last!=index);
631 lastCount[next] = last;
633 nextCount[last] = next;
637 firstCount[count]=next;
648 firstCount[count] = index;
651 assert (next!=index);
652 assert (last!=index);
653 nextCount[index] = next2;
656 lastCount[next] = last;
658 lastCount[next2] = index;
660 nextCount[last] = next;
662 int count=last+numberRows_+2;
663 firstCount[count]=next;
827 #undef ABC_DENSE_CODE
828 #define ABC_DENSE_CODE 0
844 #ifdef ABC_USE_FUNCTION_POINTERS
944 #ifdef ABC_USE_FUNCTION_POINTERS
958 #if COIN_BIG_DOUBLE==1
1001 #ifdef ABC_USE_FUNCTION_POINTERS
1056 #if FACTORIZATION_STATISTICS
1057 double ftranTwiddleFactor1_;
1058 double ftranTwiddleFactor2_;
1072 #if FACTORIZATION_STATISTICS
1073 double ftranFTTwiddleFactor1_;
1074 double ftranFTTwiddleFactor2_;
1090 #if FACTORIZATION_STATISTICS
1091 double btranTwiddleFactor1_;
1092 double btranTwiddleFactor2_;
1107 #if FACTORIZATION_STATISTICS
1108 double ftranFullTwiddleFactor1_;
1109 double ftranFullTwiddleFactor2_;
1124 #if FACTORIZATION_STATISTICS
1125 double btranFullTwiddleFactor1_;
1126 double btranFullTwiddleFactor2_;
1156 inline bool gotLCopy()
const {
return true;}
1159 inline bool gotRCopy()
const {
return true;}
1162 inline bool gotUCopy()
const {
return true;}
1165 inline bool gotSparse()
const {
return true;}
1171 inline bool gotLCopy()
const {
return false;}
1174 inline bool gotRCopy()
const {
return false;}
1177 inline bool gotUCopy()
const {
return false;}
1180 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)
typedef void(COINLINKAGE_CB *clp_callback)(Clp_Simplex *model
typedef for user call back.
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.