Clp 1.17.5
Loading...
Searching...
No Matches
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"
12class ClpMatrixBase;
13
15
16public:
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;
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 }
76 virtual ClpCholeskyBase *clone() const;
79private:
85};
86
87/* structure for C */
88typedef struct {
93 double doubleParameters_[1]; /* corresponds to 10 */
94 int integerParameters_[2]; /* corresponds to 34, nThreads */
95 int n;
98
99extern "C" {
100void ClpCholeskySpawn(void *);
101}
104 longDouble *a, int n, int numberBlocks,
105 longDouble *diagonal, longDouble *work, int *rowsDropped);
106
109 longDouble *aTri, int nThis,
110 longDouble *aUnder, longDouble *diagonal,
111 longDouble *work,
112 int nLeft, int iBlock, int jBlock,
113 int numberBlocks);
116 longDouble *aUnder, int nTri, int nDo,
117 int iBlock, int jBlock, longDouble *aTri,
118 longDouble *diagonal, longDouble *work,
119 int numberBlocks);
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);
136void ClpCholeskyCtriRecLeaf(/*ClpCholeskyDenseC * thisStruct,*/
137 longDouble *aTri, longDouble *aUnder,
138 longDouble *diagonal, longDouble *work,
139 int nUnder);
141void ClpCholeskyCrecTriLeaf(/*ClpCholeskyDenseC * thisStruct, */
142 longDouble *aUnder, longDouble *aTri,
143 /*longDouble * diagonal,*/ longDouble *work, int nUnder);
148void ClpCholeskyCrecRecLeaf(/*ClpCholeskyDenseC * thisStruct, */
149 const longDouble *COIN_RESTRICT above,
150 const longDouble *COIN_RESTRICT aUnder,
152 const longDouble *COIN_RESTRICT work,
153 int nUnder);
154#endif
155
156/* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2
157*/
double longDouble
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,...
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.
void ClpCholeskyCtriRecLeaf(longDouble *aTri, longDouble *aUnder, longDouble *diagonal, longDouble *work, int nUnder)
Leaf recursive triangle rectangle update.
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...
void ClpCholeskyCrecTriLeaf(longDouble *aUnder, longDouble *aTri, longDouble *work, int nUnder)
Leaf recursive rectangle triangle update.
void ClpCholeskyCfactor(ClpCholeskyDenseC *thisStruct, longDouble *a, int n, int numberBlocks, longDouble *diagonal, longDouble *work, int *rowsDropped)
Non leaf recursive factor.
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.
void ClpCholeskyCfactorLeaf(ClpCholeskyDenseC *thisStruct, longDouble *a, int n, longDouble *diagonal, longDouble *work, int *rowsDropped)
Leaf recursive factor.
void ClpCholeskySpawn(void *)
#define COIN_RESTRICT
Base class for Clp Cholesky factorization Will do better factorization.
longDouble * diagonal_
Diagonal.
longDouble * sparseFactor_
sparseFactor.
int numberRows() const
Return number of rows.
char * rowsDropped() const
rowsDropped - which rows are gone
void factorizePart3(int *rowsDropped)
part 2 of Factorize - filling in rowsDropped - blocked
ClpCholeskyDense()
Default constructor.
int reserveSpace(const ClpCholeskyBase *factor, int numberRows)
Reserves space.
virtual ClpCholeskyBase * clone() const
Clone.
longDouble * aMatrix() const
A.
void solveB1(longDouble *a, int n, CoinWorkDouble *region)
Backward part of solve.
ClpCholeskyDense(const ClpCholeskyDense &)
Copy.
int space(int numberRows) const
Returns space needed.
int bNumber(const longDouble *array, int &, int &)
virtual int factorize(const CoinWorkDouble *diagonal, int *rowsDropped)
Factorize - filling in rowsDropped and returning number dropped.
void factorizePart2(int *rowsDropped)
part 2 of Factorize - filling in rowsDropped
void solveF2(longDouble *a, int n, CoinWorkDouble *region, CoinWorkDouble *region2)
ClpCholeskyDense & operator=(const ClpCholeskyDense &)
Assignment.
bool borrowSpace_
Just borrowing space.
virtual int order(ClpInterior *model)
Orders rows and saves pointer to matrix.and model.
void solveF1(longDouble *a, int n, CoinWorkDouble *region)
Forward part of solve.
virtual int symbolic()
Does Symbolic factorization given permutation.
virtual ~ClpCholeskyDense()
Destructor
void solveB2(longDouble *a, int n, CoinWorkDouble *region, CoinWorkDouble *region2)
longDouble * diagonal() const
Diagonal.
virtual void solve(CoinWorkDouble *region)
Uses factorization to solve.
This solves LPs using interior point methods.
Abstract base class for Clp Matrices.