coin-Bcp
ClpCholeskyDense.hpp
Go to the documentation of this file.
1 /* $Id: ClpCholeskyDense.hpp 2385 2019-01-06 19:43:06Z unxusr $ */
2 /*
3  Copyright (C) 2003, International Business Machines Corporation
4  and others. All Rights Reserved.
5 
6  This code is licensed under the terms of the Eclipse Public License (EPL).
7 */
8 #ifndef ClpCholeskyDense_H
9 #define ClpCholeskyDense_H
10 
11 #include "ClpCholeskyBase.hpp"
12 class ClpMatrixBase;
13 
15 
16 public:
21  virtual int order(ClpInterior *model);
26  virtual int symbolic();
29  virtual int factorize(const CoinWorkDouble *diagonal, int *rowsDropped);
31  virtual void solve(CoinWorkDouble *region);
39  int reserveSpace(const ClpCholeskyBase *factor, int numberRows);
41  int space(int numberRows) const;
43  void factorizePart2(int *rowsDropped);
45  void factorizePart3(int *rowsDropped);
47  void solveF1(longDouble *a, int n, CoinWorkDouble *region);
48  void solveF2(longDouble *a, int n, CoinWorkDouble *region, CoinWorkDouble *region2);
50  void solveB1(longDouble *a, int n, CoinWorkDouble *region);
51  void solveB2(longDouble *a, int n, CoinWorkDouble *region, CoinWorkDouble *region2);
52  int bNumber(const longDouble *array, int &, int &);
54  inline longDouble *aMatrix() const
55  {
56  return sparseFactor_;
57  }
59  inline longDouble *diagonal() const
60  {
61  return diagonal_;
62  }
70  virtual ~ClpCholeskyDense();
76  virtual ClpCholeskyBase *clone() const;
79 private:
85 };
86 
87 /* structure for C */
88 typedef struct {
93  double doubleParameters_[1]; /* corresponds to 10 */
94  int integerParameters_[2]; /* corresponds to 34, nThreads */
95  int n;
98 
99 extern "C" {
100 void ClpCholeskySpawn(void *);
101 }
103 void ClpCholeskyCfactor(ClpCholeskyDenseC *thisStruct,
104  longDouble *a, int n, int numberBlocks,
105  longDouble *diagonal, longDouble *work, int *rowsDropped);
106 
108 void ClpCholeskyCtriRec(ClpCholeskyDenseC *thisStruct,
109  longDouble *aTri, int nThis,
110  longDouble *aUnder, longDouble *diagonal,
111  longDouble *work,
112  int nLeft, int iBlock, int jBlock,
113  int numberBlocks);
115 void ClpCholeskyCrecTri(ClpCholeskyDenseC *thisStruct,
116  longDouble *aUnder, int nTri, int nDo,
117  int iBlock, int jBlock, longDouble *aTri,
118  longDouble *diagonal, longDouble *work,
119  int numberBlocks);
124 void ClpCholeskyCrecRec(ClpCholeskyDenseC *thisStruct,
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);
132  longDouble *a, int n,
133  longDouble *diagonal, longDouble *work,
134  int *rowsDropped);
136 void ClpCholeskyCtriRecLeaf(/*ClpCholeskyDenseC * thisStruct,*/
137  longDouble *aTri, longDouble *aUnder,
138  longDouble *diagonal, longDouble *work,
139  int nUnder);
141 void ClpCholeskyCrecTriLeaf(/*ClpCholeskyDenseC * thisStruct, */
142  longDouble *aUnder, longDouble *aTri,
143  /*longDouble * diagonal,*/ longDouble *work, int nUnder);
148 void ClpCholeskyCrecRecLeaf(/*ClpCholeskyDenseC * thisStruct, */
149  const longDouble *COIN_RESTRICT above,
150  const longDouble *COIN_RESTRICT aUnder,
151  longDouble *COIN_RESTRICT aOther,
152  const longDouble *COIN_RESTRICT work,
153  int nUnder);
154 #endif
155 
156 /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2
157 */
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_
double CoinWorkDouble
Definition: CoinTypes.hpp:53
void ClpCholeskyCtriRecLeaf(longDouble *aTri, longDouble *aUnder, longDouble *diagonal, longDouble *work, int nUnder)
Leaf recursive triangle rectangle update.
longDouble * aMatrix() const
A.
void solveB2(longDouble *a, int n, CoinWorkDouble *region, CoinWorkDouble *region2)
Reserves space.
#define COIN_RESTRICT
Abstract base class for Clp Matrices.
ClpCholeskyDense & operator=(const ClpCholeskyDense &)
Assignment.
virtual ~ClpCholeskyDense()
Destructor.
int space(int numberRows) const
Returns space needed.
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.