38#define SOPLEX_WITH_L_ROWS 1
289 R* vec2,
int* ridx2,
int& rn2, R eps2);
292 R* vec2,
int* ridx2,
int& rn2, R eps2,
293 R* vec3,
int* ridx3,
int& rn3, R eps3);
300 R* vec2, R* rhs2,
int* ridx2,
int rn2, R eps2);
306 int solveUleft(R eps, R* vec,
int* vecidx, R* rhs,
int* rhsidx,
int rhsn);
334 void setPivot(
const int p_stage,
const int p_col,
const int p_row,
const R val);
357 int updateRow(
int r,
int lv,
int prow,
int pcol, R pval, R eps);
388 R* forest,
int* forestNum,
int* forestIdx);
393 R* rhs2,
int* nonz, R eps, R* forest,
int* forestNum,
int* forestIdx);
401 int solveLeft2(R* vec1,
int* nonz, R* vec2, R eps, R* rhs1, R* rhs2);
406 R* rhs,
int* ridx,
int rn,
407 R* forest,
int* forestNum,
int* forestIdx);
411 R* rhs,
int* ridx,
int rn,
413 R* rhs2,
int* ridx2,
int rn2,
414 R* forest,
int* forestNum,
int* forestIdx);
417 R eps, R* vec,
int* idx,
418 R* rhs,
int* ridx,
int& rn,
419 R eps2, R* vec2,
int* idx2,
420 R* rhs2,
int* ridx2,
int& rn2,
421 R* forest,
int* forestNum,
int* forestIdx);
425 R* rhs,
int* ridx,
int rn,
427 R* rhs2,
int* ridx2,
int rn2,
429 R* rhs3,
int* ridx3,
int rn3,
430 R* forest,
int* forestNum,
int* forestIdx);
433 R eps, R* vec,
int* idx,
434 R* rhs,
int* ridx,
int& rn,
435 R eps2, R* vec2,
int* idx2,
436 R* rhs2,
int* ridx2,
int& rn2,
437 R eps3, R* vec3,
int* idx3,
438 R* rhs3,
int* ridx3,
int& rn3,
439 R* forest,
int* forestNum,
int* forestIdx);
442 R* rhs,
int* ridx,
int rn);
446 R* rhs,
int* ridx,
int rn);
450 R* rhs,
int* ridx,
int rn);
454 R* rhs,
int* ridx,
int rn,
456 R* rhs2,
int* ridx2,
int rn2);
460 R* rhs,
int* ridx,
int& rn,
462 R* rhs2,
int* ridx2,
int& rn2);
466 R* rhs,
int* ridx,
int rn,
468 R* rhs2,
int* ridx2,
int rn2,
470 R* rhs3,
int* ridx3,
int rn3);
474 R* rhs,
int* ridx,
int& rn,
476 R* rhs2,
int* ridx2,
int& rn2,
478 R* rhs3,
int* ridx3,
int& rn3);
482 void update(
int p_col, R* p_work,
const int* p_idx,
int num);
506#include "clufactor.hpp"
int mkwtz
markowitz number of pivot
int pos
position of pivot column in row
Pring & operator=(const Pring &)
blocked assignment operator
Pring(const Pring &)
blocked copy constructor
int idx
index of pivot row
Temporary data structures.
Pring * pivot_row
row index handlers for R linked list
int stage
stage of the structure
Pring * pivot_rowNZ
lists for rows to number of nonzeros
Temp & operator=(const Temp &)
blocked assignment operator
std::vector< R > s_max
maximum absolute value per row (or -1)
int * s_cact
lengths of columns of active submatrix
Temp(const Temp &)
blocked copy constructor
Pring * pivot_colNZ
lists for columns to number of nonzeros
void clear()
clears the structure
Pring * pivot_col
column index handlers for R linked list
void init(int p_dim)
initialization
Pring pivots
ring of selected pivot rows
Implementation of sparse LU factorization.
void solveUpdateRight(R *vec)
void selectPivots(R threshold)
R rowMemMult
factor of minimum Memory * number of nonzeros
int solveUpdateLeft(R eps, R *vec, int *nonz, int n)
int solveLeft2(R *vec1, int *nonz, R *vec2, R eps, R *rhs1, R *rhs2)
void eliminateRowSingletons()
R maxabs
maximum abs number in L and U
void vSolveRight4update3sparse(R eps, R *vec, int *idx, R *rhs, int *ridx, int &rn, R eps2, R *vec2, int *idx2, R *rhs2, int *ridx2, int &rn2, R eps3, R *vec3, int *idx3, R *rhs3, int *ridx3, int &rn3, R *forest, int *forestNum, int *forestIdx)
sparse version of above method
void solveUright2(R *work1, R *vec1, R *work2, R *vec2)
void setPivot(const int p_stage, const int p_col, const int p_row, const R val)
void solveUpdateLeft2(R *vec1, R *vec2)
R lMemMult
factor of minimum Memory * number of nonzeros
int solveUrightEps(R *vec, int *nonz, R eps, R *rhs)
void remaxCol(int p_col, int len)
int vSolveUpdateRight(R *vec, int *ridx, int n, R eps)
R colMemMult
factor of minimum Memory * number of nonzeros
void solveLleftNoNZ(R *vec)
int solveRight4update(R *vec, int *nonz, R eps, R *rhs, R *forest, int *forestNum, int *forestIdx)
int vSolveUright(R *vec, int *vidx, R *rhs, int *ridx, int rn, R eps)
void solveUleft(R *work, R *vec)
bool isConsistent() const
void vSolveUpdateRightNoNZ(R *vec, R)
int vSolveRight4update2(R eps, R *vec, int *idx, R *rhs, int *ridx, int rn, R *vec2, R eps2, R *rhs2, int *ridx2, int rn2, R *forest, int *forestNum, int *forestIdx)
void updateNoClear(int p_col, const R *p_work, const int *p_idx, int num)
void updateSolutionVectorLright(R change, int j, R &vec, int *idx, int &nnz)
const std::shared_ptr< Tolerances > tolerances() const
get tolerances
int vSolveRight4update3(R eps, R *vec, int *idx, R *rhs, int *ridx, int rn, R *vec2, R eps2, R *rhs2, int *ridx2, int rn2, R *vec3, R eps3, R *rhs3, int *ridx3, int rn3, R *forest, int *forestNum, int *forestIdx)
void solveLright2(R *vec1, R *vec2)
std::vector< R > diag
Array of pivot elements.
void vSolveRightNoNZ(R *vec, R eps, R *rhs, int *ridx, int rn)
void solveRight2(R *vec1, R *vec2, R *rhs1, R *rhs2)
void vSolveUrightNoNZ(R *vec, R *rhs, int *ridx, int rn, R eps)
void vSolveLright2(R *vec, int *ridx, int &rn, R eps, R *vec2, int *ridx2, int &rn2, R eps2)
int solveLleft2forest(R *vec1, int *, R *vec2, R)
void vSolveLeft3sparse(R eps, R *vec, int *idx, R *rhs, int *ridx, int &rn, R *vec2, int *idx2, R *rhs2, int *ridx2, int &rn2, R *vec3, int *idx3, R *rhs3, int *ridx3, int &rn3)
sparse version of solving 3 systems of equations
int solveLeftEps(R *vec, R *rhs, int *nonz, R eps)
void solveRight(R *vec, R *rhs)
R initMaxabs
maximum abs number in initail Matrix
int factorCount
Number of factorizations.
int solveRight2update(R *vec1, R *vec2, R *rhs1, R *rhs2, int *nonz, R eps, R *forest, int *forestNum, int *forestIdx)
int solveUright2eps(R *work1, R *vec1, R *work2, R *vec2, int *nonz, R eps)
std::shared_ptr< Tolerances > _tolerances
Tolerances for the factorization.
void solveUright(R *wrk, R *vec) const
Timer * factorTime
Time spent in factorizations.
void solveUpdateLeft(R *vec)
int makeLvec(int p_len, int p_row)
void eliminatePivot(int prow, int pos, R eps)
Perm col
column permutation matrices
Temp temp
Temporary storage.
int vSolveLeft(R eps, R *vec, int *idx, R *rhs, int *ridx, int rn)
int solveLleftForest(R eps, R *vec, int *nonz, int n)
Perm row
row permutation matrices
int vSolveLeft3(R eps, R *vec, int *idx, R *rhs, int *ridx, int rn, R *vec2, R *rhs2, int *ridx2, int rn2, R *vec3, R *rhs3, int *ridx3, int rn3)
void vSolveLright(R *vec, int *ridx, int &rn, R eps)
void setTolerances(std::shared_ptr< Tolerances > tolerances)
set tolerances
void solveLleft(R *vec) const
void solveLleftForestNoNZ(R *vec)
void solveUleft2(R *work1, R *vec1, R *work2, R *vec2)
int vSolveUright2(R *vec, int *vidx, R *rhs, int *ridx, int rn, R eps, R *vec2, R *rhs2, int *ridx2, int rn2, R eps2)
void forestReMaxCol(int col, int len)
int hugeValues
number of times huge values occurred during solve (only used in debug mode)
R * work
Working array: must always be left as 0!
void initFactorMatrix(const SVectorBase< R > **vec, const R eps)
SLinSolver< R >::Status stat
Status indicator.
int solveUleft(R eps, R *vec, int *vecidx, R *rhs, int *rhsidx, int rhsn)
int solveLleftForest(R *vec, int *, R)
void vSolveLright3(R *vec, int *ridx, int &rn, R eps, R *vec2, int *ridx2, int &rn2, R eps2, R *vec3, int *ridx3, int &rn3, R eps3)
void forestUpdate(int col, R *work, int num, int *nonz)
void solveLleft2(R *vec1, int *, R *vec2, R)
int solveLleft(R eps, R *vec, int *nonz, int rn)
void vSolveLeftNoNZ(R eps, R *vec, R *rhs, int *ridx, int rn)
int vSolveRight4update(R eps, R *vec, int *idx, R *rhs, int *ridx, int rn, R *forest, int *forestNum, int *forestIdx)
int thedim
dimension of factorized matrix
void eliminateColSingletons()
int solveLleftEps(R *vec, int *nonz, R eps)
void vSolveRight4update2sparse(R eps, R *vec, int *idx, R *rhs, int *ridx, int &rn, R eps2, R *vec2, int *idx2, R *rhs2, int *ridx2, int &rn2, R *forest, int *forestNum, int *forestIdx)
sparse version of above method
void eliminateNucleus(const R eps, const R threshold)
void forestMinColMem(int size)
void update(int p_col, R *p_work, const int *p_idx, int num)
void solveUleftNoNZ(R eps, R *vec, R *rhs, int *rhsidx, int rhsn)
void remaxRow(int p_row, int len)
void vSolveLeft2sparse(R eps, R *vec, int *idx, R *rhs, int *ridx, int &rn, R *vec2, int *idx2, R *rhs2, int *ridx2, int &rn2)
sparse version of solving 2 systems of equations
int vSolveLeft2(R eps, R *vec, int *idx, R *rhs, int *ridx, int rn, R *vec2, R *rhs2, int *ridx2, int rn2)
int updateRow(int r, int lv, int prow, int pcol, R pval, R eps)
int nzCnt
number of nonzeros in U
void solveUpdateRight2(R *vec1, R *vec2)
void solveLeft(R *vec, R *rhs)
void factor(const SVectorBase< R > **vec, R threshold, R eps)
Status
status flags of the SLinSolver class.
Wrapper for the system time query methods.
Everything should be within this namespace.
Sparse Linear Solver virtual base class.
Debugging, floating point type and parameter definitions.
Data structures for saving the working matrix and L factor.
int * rorig
original row permutation
int * row
column indices of L vectors
int startSize
size of array start
int updateType
type of updates to be used.
int size
size of arrays val and idx
int * ridx
indices of rows of L
int * rbeg
start of rows in rval and ridx
int * rperm
original row permutation
std::vector< R > val
values of L vectors
int * idx
indices of L vectors
int firstUpdate
number of first update L vector
std::vector< R > rval
values of rows of L
int * start
starting positions in val and idx
int firstUnused
number of first unused L vector
Data structures for saving the row and column permutations.
int * orig
orig[p] original index from p
int * perm
perm[i] permuted index from i
int * max
maximum available nonzeros per colunn: start[i] + max[i] == start[elem[i].next->idx] len[i] <= max[i]...
int * len
used nonzeros per column vector
int size
size of array idx
int used
used entries of array idx
Dring * elem
Array of ring elements.
std::vector< R > val
hold nonzero values: this is only initialized in the end of the factorization with DEFAULT updates.
Dring list
Double linked ringlist of VectorBase<R> indices in the order they appear in the column file
int * idx
hold row indices of nonzeros
int * start
starting positions in val and idx
int * max
maximum available nonzeros per row: start[i] + max[i] == start[elem[i].next->idx] len[i] <= max[i].
int * len
used nonzeros per row vectors
int size
size of arrays val and idx
int used
used entries of arrays idx and val
Dring * elem
Array of ring elements.
std::vector< R > val
hold nonzero values
Dring list
Double linked ringlist of VectorBase<R> indices in the order they appear in the row file
int * idx
hold column indices of nonzeros
int * start
starting positions in val and idx
Data structures for saving the working matrix and U factor.
struct soplex::CLUFactor::U::Col col
struct soplex::CLUFactor::U::Row row