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; }
CoinBigIndex numberL_
Number in L.
CoinBigIndex * array() const
Get Array.
double btranAverageAfterL_
double ftranFTCountAfterU_
void updateColumnTransposeRDensish(CoinIndexedVector *region) const
Updates part of column transpose (BTRANR) when dense.
CoinIntArrayWithLength lastRow_
Previous Row in memory order.
CoinBigIndexArrayWithLength startRowL_
Start of each row in L.
double ftranAverageAfterL_
void gutsOfInitialize(CoinSimplexInt type)
1 bit - tolerances etc, 2 more, 4 dummy arrays
void updateColumnTransposeUSparse(CoinIndexedVector *region) const
Updates part of column transpose (BTRANU) when sparse, assumes index is sorted i.e.
double ftranFTCountAfterR_
int numberRows_
Number of Rows in factorization.
CoinBigIndex * startColumnR() const
Start of columns for R.
CoinIntArrayWithLength indexRowL_
Row indices of L.
CoinBigIndex * startColumnLAddress_
CoinSimplexInt maximumMaximumPivots_
Maximum maximum pivots.
double btranFullCountAfterU_
CoinSimplexInt * nextColumnAddress_
double * denseVector(CoinIndexedVector &vector) const
void updatePartialUpdate(CoinIndexedVector &partialUpdate)
Update partial Ftran by R update.
CoinSimplexInt numberFtranFullCounts_
CoinSimplexInt numberGoodL_
Number factorized in L.
virtual void getAreas(CoinSimplexInt numberRows, CoinSimplexInt numberColumns, CoinBigIndex maximumL, CoinBigIndex maximumU)
Gets space for a factorization, called by constructors.
CoinSimplexInt * indexColumnL() const
Index of column in row for L.
void setDenseThreshold(CoinSimplexInt value)
Sets dense threshold.
CoinFactorizationDoubleArrayWithLength pivotRegion_
Inverses of pivot values.
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.
CoinSimplexInt maximumRowsExtra_
Maximum number of Rows after iterating.
CoinBigIndex numberElementsL() const
Returns number in L area.
CoinSimplexInt numberRowsExtra_
Number of Rows after iterating.
CoinSimplexInt denseThreshold_
Dense threshold (here to use double alignment)
CoinAbcTypeFactorization()
Default constructor.
void updateColumnTransposeL(CoinIndexedVector *region, CoinAbcStatistics &statistics) const
Updates part of column transpose (BTRANL)
double btranFullCountAfterR_
CoinSimplexInt * indexColumnLAddress_
virtual void checkMarkArrays() const
CoinIntArrayWithLength firstCount_
First Row/Column with count of k, can tell which by offset - Rows then Columns.
CoinBigIndex * startRowLAddress_
CoinBigIndex sizeSparseArray_
Size in bytes of a sparseArray.
double ftranFullCountAfterU_
virtual CoinAbcAnyFactorization * clone() const
Clone.
CoinIntArrayWithLength markRow_
Marks rows to be updated.
void fromLongArray(CoinIndexedVector *vector) const
From a work array and dis-associate vector.
double ftranFTAverageAfterL_
CoinIntArrayWithLength lastColumn_
Previous Column in memory order.
void deleteLink(CoinSimplexInt index)
Deletes a link in chain of equal counts.
CoinSimplexInt numberTrials_
Number of trials before rejection.
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...
CoinSimplexInt * numberInColumnAddress_
void setNumberElementsU(CoinBigIndex value)
Setss number in U area.
CoinBigIndex lengthL_
Length of L.
CoinFactorizationDoubleArrayWithLength elementRowU_
Elements of U by row.
CoinIntArrayWithLength indexColumnU_
Base address for U (may change)
CoinSimplexInt * lastCount() const
Previous Row/Column with count.
CoinFactorizationDouble * elementUAddress_
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.
CoinFactorizationDouble * elementU() const
Elements of U.
CoinBigIndex firstZeroed_
First place in funny copy zeroed out.
Abstract base class which also has some scalars so can be used from Dense or Simp.
#define ABC_FAC_GOT_SPARSE
bool getRowSpaceIterate(CoinSimplexInt iRow, CoinSimplexInt extraNeeded)
Gets space for one Row with given length while iterating, may have to do compression (returns True i...
CoinBigIndex * startRowUAddress_
void addLink(CoinSimplexInt index, CoinSimplexInt count)
Adds a link in chain of equal counts.
friend void CoinAbcFactorizationUnitTest(const std::string &mpsDir)
CoinSimplexInt * firstCountAddress_
void updateColumnUDensish(CoinIndexedVector *regionSparse) const
Updates part of column (FTRANU)
double preProcess3()
Return largest element.
CoinSimplexInt numberBtranCounts_
CoinSimplexInt * lastCountAddress_
Previous Row/Column with count.
CoinBigIndex lengthAreaR_
length of area reserved for R
virtual CoinSimplexInt factor(AbcSimplex *model)
Does most of factorization.
CoinIntArrayWithLength numberInRow_
Number in each Row.
void checkConsistency()
Checks that row and column copies look OK.
CoinBigIndex baseL() const
Base of L.
CoinSimplexInt * pivotLinkedForwards() const
double btranFullCountAfterL_
virtual CoinSimplexInt * numberInRow() const
Number of entries in each row.
const double * denseVector(const CoinIndexedVector &vector) const
void separateLinks()
Separate out links with same row/column count.
void updateColumnTransposeR(CoinIndexedVector *region, CoinAbcStatistics &statistics) const
Updates part of column transpose (BTRANR)
CoinBigIndexArrayWithLength startColumnU_
Start of each column in U.
CoinBigIndex * convertColumnToRowUAddress_
double * denseVector() const
Get the vector as a dense vector.
CoinBigIndex * startColumnL() const
Start of each column in L.
int numberRows() const
Number of Rows after factorization.
bool pivotRowSingleton(CoinSimplexInt pivotRow, CoinSimplexInt pivotColumn)
Does one pivot on Row Singleton in factorization.
void updateColumnTransposeLDensish(CoinIndexedVector *region) const
Updates part of column transpose (BTRANL) when densish by column.
virtual void updateColumnTransposeCpu(CoinIndexedVector ®ionSparse, int whichCpu) const
Updates one column (BTRAN)
CoinSimplexInt factorDense()
Does dense phase of factorization return code is <0 error, 0= finished.
CoinSimplexInt * sparseAddress_
virtual void updateColumnFTPart2(CoinIndexedVector ®ionSparse)
CoinBigIndex lengthR_
Length of R stuff.
double ftranFullAverageAfterU_
virtual void updateWeights(CoinIndexedVector ®ionSparse) const
Updates one column for dual steepest edge weights (FTRAN)
void checkSparse()
See if worth going sparse.
void doAddresses()
Set up addresses from arrays.
bool spaceForForrestTomlin() const
True if FT update and space.
void pivotColumnSingleton(CoinSimplexInt pivotRow, CoinSimplexInt pivotColumn)
Does one pivot on Column Singleton in factorization (can't return false)
double ftranAverageAfterR_
CoinIntArrayWithLength numberInColumnPlus_
Number in each Column including pivoted.
CoinBigIndex * startColumnU() const
Start of each column in U.
double ftranFullCountAfterL_
CoinSimplexInt messageLevel() const
Level of detail of messages.
CoinSimplexInt lastSlack_
CoinBigIndex * startRowL() const
Start of each row in L.
void afterPivot(CoinSimplexInt pivotRow, CoinSimplexInt pivotColumn)
After pivoting.
CoinSimplexInt numberForrestTomlin() const
Length of FT vector.
double ftranFullAverageAfterL_
CoinSimplexInt numberU_
Number in U.
double ftranAverageAfterU_
CoinSimplexInt leadingDimension_
Leading dimension for dense.
virtual void preProcess()
PreProcesses column ordered copy of basis.
CoinSimplexInt numberRowsSmall_
Size of small inverse.
double btranAverageAfterR_
bool reorderU()
Reorders U so contiguous and in order (if there is space) Returns true if it could.
CoinSimplexInt * pivotLinkedBackwards() const
Forward and backward linked lists (numberRows_+2)
virtual int * pivotRow() const
Returns pivot row.
CoinFactorizationDoubleArrayWithLength elementL_
Elements of L.
CoinSimplexInt numberFtranCounts_
double ftranFTCountAfterL_
CoinFactorizationDouble * pivotRegionAddress_
CoinBigIndex lengthAreaL() const
Returns length of L area.
void clearArrays()
Get rid of all memory.
void(* scatterUpdate)(int, CoinFactorizationDouble, const CoinFactorizationDouble *, double *) SCATTER_ATTRIBUTE
virtual CoinSimplexInt updateColumn(CoinIndexedVector ®ionSparse) const
This version has same effect as above with FTUpdate==false so number returned is always >=0...
virtual CoinSimplexInt * numberInColumn() const
Number of entries in each column.
void unpack(CoinIndexedVector *regionFrom, CoinIndexedVector *regionTo) const
CoinBigIndex lastEntryByColumnU_
Last entry by column for U.
void updateColumnTransposeLByRow(CoinIndexedVector *region) const
Updates part of column transpose (BTRANL) when densish by row.
CoinBigIndex lastEntryByRowU_
Last entry by row for U.
void updateColumnUDense(CoinIndexedVector *regionSparse) const
Updates part of column (FTRANU) when dense (i.e. do as inner products)
virtual CoinSimplexInt updateColumnTranspose(CoinIndexedVector ®ionSparse) const
Updates one column (BTRAN) from regionSparse2 regionSparse starts as zero and is zero at end Note - i...
double ftranFTAverageAfterR_
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.
CoinSimplexInt maximumRows_
Maximum rows (ever) (here to use double alignment)
double ftranFTAverageAfterU_
CoinSimplexInt * permuteAddress_
#define ABC_FAC_GOT_UCOPY
CoinBigIndex * convertRowToColumnUAddress_
CoinFactorizationDouble * array() const
Get Array.
CoinIntArrayWithLength nextColumn_
Next Column in memory order.
double ftranFTCountInput_
CoinSimplexInt * nextCount() const
Next Row/Column with count.
double CoinFactorizationDouble
void updateColumnTransposeUDensish(CoinIndexedVector *region, CoinSimplexInt smallestIndex) const
Updates part of column transpose (BTRANU) when densish, assumes index is sorted i.e.
CoinBigIndex numberL() const
Number in L.
void fromLongArray(int which) const
From a work array and dis-associate vector.
CoinSimplexInt * indexRowL() const
Row indices of L.
CoinSimplexUnsignedInt * workArea2Address_
double ftranCountInput_
To decide how to solve.
virtual int updateColumnFTPart1(CoinIndexedVector ®ionSparse)
CoinIntArrayWithLength pivotColumn_
Pivot order for each Column.
virtual CoinSimplexInt * pivotColumn() const
Returns address of pivotColumn region (also used for permuting)
CoinFactorizationDouble * elementByRowLAddress_
virtual CoinSimplexInt updateColumnFT(CoinIndexedVector ®ionSparse)
Later take out return codes (apart from +- 1 on FT)
CoinBigIndex baseL_
Base of L.
CoinBigIndexArrayWithLength convertColumnToRowU_
Converts columns to rows in U.
CoinIntArrayWithLength numberInColumn_
Number in each Column.
CoinSimplexInt * pivotColumnAddress_
void gutsOfCopy(const CoinAbcTypeFactorization &other)
virtual CoinFactorizationDouble * elements() const
Returns array to put basis elements in.
int scan()
Scan dense region and set up indices (returns number found)
void updateColumnTransposeLSparse(CoinIndexedVector *region) const
Updates part of column transpose (BTRANL) when sparse (by Row)
CoinFactorizationDoubleArrayWithLength workArea_
First work area.
double btranFullAverageAfterL_
CoinBigIndex maximumU_
Maximum space used in U.
CoinIntArrayWithLength indexRowU_
Row indices of U.
CoinSimplexInt * nextCountAddress_
Next Row/Column with count.
CoinSimplexInt * pivotLOrderAddress_
CoinBigIndex lengthU_
Length of U.
CoinSimplexInt * saveColumnAddress_
CoinSimplexInt * indexRowRAddress_
Row indices for R.
void updateColumnL(CoinIndexedVector *region, CoinAbcStatistics &statistics) const
Updates part of column (FTRANL)
void updateColumnTransposeRSparse(CoinIndexedVector *region) const
Updates part of column transpose (BTRANR) when sparse.
CoinBigIndexArrayWithLength startRowU_
Start of each Row as pointer.
CoinSimplexInt initialNumberRows_
Rows first time nonzero.
CoinSimplexInt * indexRowLAddress_
CoinSimplexInt * nextRowAddress_
virtual void updateFullColumnTranspose(CoinIndexedVector ®ionSparse) const
Updates one full column (BTRAN)
void updateColumnLDense(CoinIndexedVector *region) const
Updates part of column (FTRANL) when dense (i.e. do as inner products)
CoinFactorizationDouble * elementRAddress_
Elements of R.
void updateColumnR(CoinIndexedVector *region, CoinAbcStatistics &statistics) const
Updates part of column (FTRANR) without FT update.
CoinFactorizationDouble * elementRowUAddress_
CoinSimplexDouble adjustedAreaFactor() const
Returns areaFactor but adjusted for dense.
CoinSimplexInt * permute() const
Returns address of permute region.
CoinSimplexInt * indexColumnUAddress_
CoinBigIndex totalElements_
Number of elements in U (to go) or while iterating total overall.
CoinIntArrayWithLength nextRow_
Next Row in memory order.
CoinSimplexInt checkPivot(CoinSimplexDouble saveFromU, CoinSimplexDouble oldPivot) const
Returns accuracy status of replaceColumn returns 0=OK, 1=Probably OK, 2=singular. ...
unsigned char CoinCheckZero
CoinFactorizationDouble * workAreaAddress_
CoinUnsignedIntArrayWithLength workArea2_
Second work area.
CoinBigIndexArrayWithLength startColumnL_
Start of each column in L.
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 toLongArray(CoinIndexedVector *vector, int which) const
To a work array and associate vector.
void resetStatistics()
Reset all sparsity etc statistics.
void updateColumnLSparse(CoinIndexedVector *region) const
Updates part of column (FTRANL) when sparse.
virtual CoinFactorizationDouble * pivotRegion() const
Returns address of pivot region.
CoinSimplexInt numberRowsLeft_
Number Rows left (numberRows-numberGood)
CoinAbcTypeFactorization & operator=(const CoinAbcTypeFactorization &other)
= copy
CoinSimplexDouble conditionNumber() const
Condition number - product of pivots after factorization.
CoinSimplexInt * pivotLinkedForwardsAddress_
CoinIntArrayWithLength sparse_
Sparse regions.
virtual ~CoinAbcTypeFactorization()
Destructor.
CoinSimplexInt state_
State of saved version and what can be done 0 - nothing saved 1 - saved and can go back to previous s...
CoinSimplexInt * lastColumnAddress_
virtual void checkReplacePart1a(CoinIndexedVector *, int)
void updateColumnU(CoinIndexedVector *region, CoinAbcStatistics &statistics) const
Updates part of column (FTRANU)
virtual void postProcess(const CoinSimplexInt *sequence, CoinSimplexInt *pivotVariable)
Does post processing on valid factorization - putting variables on correct rows.
CoinFactorizationDouble * elementLAddress_
CoinBigIndex numberElementsU() const
Returns number in U area.
CoinSimplexInt * numberInColumnPlusAddress_
void sort() const
Debug - sort so can compare.
double ftranFullCountAfterR_
CoinFactorizationDouble * denseAreaAddress_
CoinSimplexInt * pivotLOrder() const
double btranAverageAfterU_
void pack(CoinIndexedVector *regionFrom, CoinIndexedVector *regionTo) const
CoinSimplexInt * lastRowAddress_
void printRegion(const CoinIndexedVector &vector, const char *where) const
virtual void updateColumnCpu(CoinIndexedVector ®ionSparse, int whichCpu) const
Updates one column (FTRAN)
CoinFactorizationDouble * version.
bool storeFT(const CoinIndexedVector *regionFT)
Store update after doing L and R - retuns false if no room.
CoinFactorizationDouble * elementByRowL() const
Elements in L (row copy)
CoinSimplexInt numberRowsExtra() const
Number of Rows after iterating.
void scan(CoinIndexedVector *vector) const
Scans region to find nonzeros.
void updateColumnTransposeUByColumn(CoinIndexedVector *region, CoinSimplexInt smallestIndex) const
Updates part of column transpose (BTRANU) by column assumes index is sorted i.e.
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...
CoinFactorizationDoubleArrayWithLength elementU_
Elements of U.
virtual CoinBigIndex numberElements() const
Total number of elements in factorization.
CoinFactorizationDoubleArrayWithLength denseArea_
Dense area.
#define ABC_FAC_GOT_RCOPY
double ftranFullAverageAfterR_
bool pivotOneOtherRow(CoinSimplexInt pivotRow, CoinSimplexInt pivotColumn)
Pivots when just one other row so faster?
CoinSimplexInt numberFtranFTCounts_
void cleanup()
Cleans up at end of factorization.
CoinFactorizationLongDouble * version.
void updateColumnTransposePFI(CoinIndexedVector *region) const
Updates part of column transpose PFI (BTRAN) (before rest)
#define FACTOR_CPU
This deals with Factorization and Updates.
virtual void replaceColumnPart3(const AbcSimplex *model, CoinIndexedVector *regionSparse, CoinIndexedVector *tableauColumn, int pivotRow, double alpha)
Replaces one Column to basis, partial update already in U.
This deals with Factorization and Updates.
CoinSimplexInt messageLevel_
Detail in messages.
CoinBigIndex lengthAreaU() const
Returns length of U area.
CoinBigIndex * startColumnRAddress_
virtual void updateFullColumn(CoinIndexedVector ®ionSparse) const
Updates one full column (FTRAN)
CoinBigIndex lengthAreaL_
Length of area reserved for L.
virtual double checkReplacePart1b(CoinIndexedVector *, int)
int * array() const
Get Array.
void modifyLink(CoinSimplexInt index, CoinSimplexInt count)
Modifies links in chain of equal counts.
virtual bool wantsTableauColumn() const
Returns true if wants tableauColumn in replaceColumn.
CoinBigIndex * startColumnUAddress_
CoinIntArrayWithLength saveColumn_
Columns left to do in a single pivot.
void updateColumnTransposeU(CoinIndexedVector *region, CoinSimplexInt smallestIndex, CoinAbcStatistics &statistics) const
Updates part of column transpose (BTRANU), assumes index is sorted i.e.
void updateColumnLDensish(CoinIndexedVector *region) const
Updates part of column (FTRANL) when densish.
double btranFullCountInput_
To decide how to solve.
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...
CoinSimplexInt sparseThreshold_
Below this use sparse technology - if 0 then no L row copy.
CoinSimplexInt numberR_
Number in R.
void gutsOfDestructor(CoinSimplexInt type=1)
The real work of constructors etc 0 just scalars, 1 bit normal.
CoinSimplexInt * indexRowUAddress_
CoinFactorizationDoubleArrayWithLength elementByRowL_
Elements in L (row copy)
void updateColumnUSparse(CoinIndexedVector *regionSparse) const
Updates part of column (FTRANU) when sparse.
CoinBigIndex getColumnSpaceIterate(CoinSimplexInt iColumn, CoinFactorizationDouble value, CoinSimplexInt iRow)
getColumnSpaceIterate.
bool getColumnSpaceIterateR(CoinSimplexInt iColumn, CoinFactorizationDouble value, CoinSimplexInt iRow)
getColumnSpaceIterateR.
int wantToGoDense()
After pivoting - returns true if need to go dense.
CoinCheckZero * markRowAddress_
CoinBigIndex lengthAreaU_
Length of area reserved for U.
CoinSimplexInt * firstCount() const
For equal counts in factorization.
CoinIntArrayWithLength permute_
Permutation vector for pivot row order.
double btranFullAverageAfterU_
#define ABC_FAC_GOT_LCOPY
virtual void makeNonSingular(CoinSimplexInt *sequence)
Makes a non-singular basis by replacing variables.
CoinSimplexInt factorSparse()
Does sparse phase of factorization return code is <0 error, 0= finished.
void show_self() const
Debug show object (shows one representation)
bool getColumnSpace(CoinSimplexInt iColumn, CoinSimplexInt extraNeeded)
Gets space for one Column with given length, may have to do compression (returns True if successful)...
void goSparse()
makes a row copy of L for speed and to allow very sparse problems
double * denseVector(CoinIndexedVector *vector) const
Returns double * associated with vector.
CoinSimplexInt maximumRowsExtra() const
Maximum of Rows after iterating.
CoinSimplexInt denseThreshold() const
Gets dense threshold.
CoinSimplexInt * numberInRowAddress_
CoinBigIndex numberElementsR() const
Returns number in R area.
double btranFullAverageAfterR_
CoinBigIndex numberCompressions() const
Number of compressions done.
CoinSimplexDouble maximumCoefficient() const
Returns maximum absolute value in factorization.
CoinSimplexInt sparseThreshold() const
get sparse threshold
CoinSimplexInt * indexRowU() const
Row indices of U.
double ftranFullCountInput_
To decide how to solve.
virtual CoinSimplexInt * indices() const
Returns array to put basis indices in.
CoinSimplexInt * pivotLinkedBackwardsAddress_
CoinSimplexInt numberBtranFullCounts_
int maximumPivots() const
Maximum number of pivots between factorizations.
double zeroTolerance_
Zero tolerance.
CoinIntArrayWithLength indexColumnL_
Index of column in row for L.
virtual CoinBigIndex * starts() const
Returns pivot row.
void almostDestructor()
Delete all stuff (leaves as after CoinAbcFactorization())
CoinBigIndexArrayWithLength convertRowToColumnU_
Converts rows to columns in U.
void updateColumnPFI(CoinIndexedVector *regionSparse) const
Updates part of column PFI (FTRAN) (after rest)
CoinBigIndex numberCompressions_
Number of compressions done.
bool getRowSpace(CoinSimplexInt iRow, CoinSimplexInt extraNeeded)
Gets space for one Row with given length, may have to do compression (returns True if successful)...
unsigned int CoinSimplexUnsignedInt
CoinSimplexInt * listAddress_
const double * denseVector(const CoinIndexedVector *vector) const
Returns double * associated with vector.