ClpCholeskyDense.hpp
Go to the documentation of this file.
1 /* $Id: ClpCholeskyDense.hpp 1525 2010-02-26 17:27:59Z mjs $ */
2 /* Copyright (C) 2003, International Business Machines Corporation
3  and others. All Rights Reserved. */
4 #ifndef ClpCholeskyDense_H
5 #define ClpCholeskyDense_H
6 
7 #include "ClpCholeskyBase.hpp"
8 class ClpMatrixBase;
9 
11 
12 public:
17  virtual int order(ClpInterior * model) ;
22  virtual int symbolic();
25  virtual int factorize(const CoinWorkDouble * diagonal, int * rowsDropped) ;
27  virtual void solve (CoinWorkDouble * region) ;
35  int reserveSpace(const ClpCholeskyBase * factor, int numberRows) ;
37  CoinBigIndex space( int numberRows) const;
39  void factorizePart2(int * rowsDropped) ;
41  void factorizePart3(int * rowsDropped) ;
43  void solveF1(longDouble * a, int n, CoinWorkDouble * region);
44  void solveF2(longDouble * a, int n, CoinWorkDouble * region, CoinWorkDouble * region2);
46  void solveB1(longDouble * a, int n, CoinWorkDouble * region);
47  void solveB2(longDouble * a, int n, CoinWorkDouble * region, CoinWorkDouble * region2);
48  int bNumber(const longDouble * array, int &, int&);
50  inline longDouble * aMatrix() const {
51  return sparseFactor_;
52  }
54  inline longDouble * diagonal() const {
55  return diagonal_;
56  }
65  virtual ~ClpCholeskyDense();
71  virtual ClpCholeskyBase * clone() const ;
75 private:
81 };
82 
83 /* structure for C */
84 typedef struct {
88  int * rowsDropped;
89  double doubleParameters_[1]; /* corresponds to 10 */
90  int integerParameters_[2]; /* corresponds to 34, nThreads */
91  int n;
94 
95 extern "C" {
96  void ClpCholeskySpawn(void *);
97 }
99 void
101  longDouble * a, int n, int numberBlocks,
102  longDouble * diagonal, longDouble * work, int * rowsDropped);
103 
105 void
107  longDouble * aTri, int nThis,
108  longDouble * aUnder, longDouble * diagonal,
109  longDouble * work,
110  int nLeft, int iBlock, int jBlock,
111  int numberBlocks);
113 void
115  longDouble * aUnder, int nTri, int nDo,
116  int iBlock, int jBlock, longDouble * aTri,
117  longDouble * diagonal, longDouble * work,
118  int numberBlocks);
123 void
125  longDouble * above, int nUnder, int nUnderK,
126  int nDo, longDouble * aUnder, longDouble *aOther,
127  longDouble * work,
128  int iBlock, int jBlock,
129  int numberBlocks);
131 void
133  longDouble * a, int n,
134  longDouble * diagonal, longDouble * work,
135  int * rowsDropped);
137 void
138 ClpCholeskyCtriRecLeaf(/*ClpCholeskyDenseC * thisStruct,*/
139  longDouble * aTri, longDouble * aUnder,
140  longDouble * diagonal, longDouble * work,
141  int nUnder);
143 void
144 ClpCholeskyCrecTriLeaf(/*ClpCholeskyDenseC * thisStruct, */
145  longDouble * aUnder, longDouble * aTri,
146  /*longDouble * diagonal,*/ longDouble * work, int nUnder);
151 void
152 ClpCholeskyCrecRecLeaf(/*ClpCholeskyDenseC * thisStruct, */
153  const longDouble * COIN_RESTRICT above,
154  const longDouble * COIN_RESTRICT aUnder,
155  longDouble * COIN_RESTRICT aOther,
156  const longDouble * COIN_RESTRICT work,
157  int nUnder);
158 #endif
void solveF2(longDouble *a, int n, CoinWorkDouble *region, CoinWorkDouble *region2)
Reserves space.
longDouble * sparseFactor_
sparseFactor.
void ClpCholeskyCrecRec(ClpCholeskyDenseC *thisStruct, longDouble *above, int nUnder, int nUnderK, int nDo, longDouble *aUnder, longDouble *aOther, longDouble *work, int iBlock, int jBlock, int numberBlocks)
Non leaf recursive rectangle rectangle update, nUnder is number of rows in iBlock, nUnderK is number of rows in kBlock.
virtual int order(ClpInterior *model)
Orders rows and saves pointer to matrix.and model.
int numberRows() const
Return number of rows.
longDouble * diagonal() const
Diagonal.
char * rowsDropped() const
rowsDropped - which rows are gone
int reserveSpace(const ClpCholeskyBase *factor, int numberRows)
Reserves space.
int bNumber(const longDouble *array, int &, int &)
Reserves space.
void ClpCholeskyCrecRecLeaf(const longDouble *COIN_RESTRICT above, const longDouble *COIN_RESTRICT aUnder, longDouble *COIN_RESTRICT aOther, const longDouble *COIN_RESTRICT work, int nUnder)
Leaf recursive rectangle rectangle update, nUnder is number of rows in iBlock, nUnderK is number of r...
Base class for Clp Cholesky factorization Will do better factorization.
void factorizePart3(int *rowsDropped)
part 2 of Factorize - filling in rowsDropped - blocked
This solves LPs using interior point methods.
Definition: ClpInterior.hpp:72
void factorizePart2(int *rowsDropped)
part 2 of Factorize - filling in rowsDropped
ClpCholeskyDense()
Default constructor.
longDouble * diagonal_
void ClpCholeskyCtriRecLeaf(longDouble *aTri, longDouble *aUnder, longDouble *diagonal, longDouble *work, int nUnder)
Leaf recursive triangle rectangle update.
longDouble * aMatrix() const
A.
CoinBigIndex space(int numberRows) const
Returns space needed.
void solveB2(longDouble *a, int n, CoinWorkDouble *region, CoinWorkDouble *region2)
Reserves space.
Abstract base class for Clp Matrices.
ClpCholeskyDense & operator=(const ClpCholeskyDense &)
Assignment.
virtual ~ClpCholeskyDense()
Destructor.
virtual ClpCholeskyBase * clone() const
Clone.
void ClpCholeskyCfactor(ClpCholeskyDenseC *thisStruct, longDouble *a, int n, int numberBlocks, longDouble *diagonal, longDouble *work, int *rowsDropped)
Non leaf recursive factor.
bool borrowSpace_
Just borrowing space.
virtual int symbolic()
Does Symbolic factorization given permutation.
void ClpCholeskyCfactorLeaf(ClpCholeskyDenseC *thisStruct, longDouble *a, int n, longDouble *diagonal, longDouble *work, int *rowsDropped)
Leaf recursive factor.
virtual void solve(CoinWorkDouble *region)
Uses factorization to solve.
void ClpCholeskySpawn(void *)
void solveB1(longDouble *a, int n, CoinWorkDouble *region)
Backward part of solve.
longDouble * diagonal_
Diagonal.
void ClpCholeskyCrecTriLeaf(longDouble *aUnder, longDouble *aTri, longDouble *work, int nUnder)
Leaf recursive rectangle triangle update.
void ClpCholeskyCtriRec(ClpCholeskyDenseC *thisStruct, longDouble *aTri, int nThis, longDouble *aUnder, longDouble *diagonal, longDouble *work, int nLeft, int iBlock, int jBlock, int numberBlocks)
Non leaf recursive triangle rectangle update.
double longDouble
void ClpCholeskyCrecTri(ClpCholeskyDenseC *thisStruct, longDouble *aUnder, int nTri, int nDo, int iBlock, int jBlock, longDouble *aTri, longDouble *diagonal, longDouble *work, int numberBlocks)
Non leaf recursive rectangle triangle update.
virtual int factorize(const CoinWorkDouble *diagonal, int *rowsDropped)
Factorize - filling in rowsDropped and returning number dropped.
void solveF1(longDouble *a, int n, CoinWorkDouble *region)
Forward part of solve.