source: trunk/Clp/src/ClpCholeskyDense.hpp @ 1525

Last change on this file since 1525 was 1525, checked in by mjs, 10 years ago

Formatted .cpp, .hpp, .c, .h files with "astyle -A4 -p". This matches the formatting used in the grand CBC reorganization.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.6 KB
Line 
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"
8class ClpMatrixBase;
9
10class ClpCholeskyDense : public ClpCholeskyBase {
11
12public:
13     /**@name Virtual methods that the derived classes provides  */
14     /**@{*/
15     /** Orders rows and saves pointer to matrix.and model.
16      Returns non-zero if not enough memory */
17     virtual int order(ClpInterior * model) ;
18     /** Does Symbolic factorization given permutation.
19         This is called immediately after order.  If user provides this then
20         user must provide factorize and solve.  Otherwise the default factorization is used
21         returns non-zero if not enough memory */
22     virtual int symbolic();
23     /** Factorize - filling in rowsDropped and returning number dropped.
24         If return code negative then out of memory */
25     virtual int factorize(const CoinWorkDouble * diagonal, int * rowsDropped) ;
26     /** Uses factorization to solve. */
27     virtual void solve (CoinWorkDouble * region) ;
28     /**@}*/
29
30     /**@name Non virtual methods for ClpCholeskyDense  */
31     /**@{*/
32     /** Reserves space.
33         If factor not NULL then just uses passed space
34      Returns non-zero if not enough memory */
35     int reserveSpace(const ClpCholeskyBase * factor, int numberRows) ;
36     /** Returns space needed */
37     CoinBigIndex space( int numberRows) const;
38     /** part 2 of Factorize - filling in rowsDropped */
39     void factorizePart2(int * rowsDropped) ;
40     /** part 2 of Factorize - filling in rowsDropped - blocked */
41     void factorizePart3(int * rowsDropped) ;
42     /** Forward part of solve */
43     void solveF1(longDouble * a, int n, CoinWorkDouble * region);
44     void solveF2(longDouble * a, int n, CoinWorkDouble * region, CoinWorkDouble * region2);
45     /** Backward part of solve */
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&);
49     /** A */
50     inline longDouble * aMatrix() const {
51          return sparseFactor_;
52     }
53     /** Diagonal */
54     inline longDouble * diagonal() const {
55          return diagonal_;
56     }
57     /**@}*/
58
59
60     /**@name Constructors, destructor */
61     /**@{*/
62     /** Default constructor. */
63     ClpCholeskyDense();
64     /** Destructor  */
65     virtual ~ClpCholeskyDense();
66     /** Copy */
67     ClpCholeskyDense(const ClpCholeskyDense&);
68     /** Assignment */
69     ClpCholeskyDense& operator=(const ClpCholeskyDense&);
70     /** Clone */
71     virtual ClpCholeskyBase * clone() const ;
72     /**@}*/
73
74
75private:
76     /**@name Data members */
77     /**@{*/
78     /** Just borrowing space */
79     bool borrowSpace_;
80     /**@}*/
81};
82
83/* structure for C */
84typedef struct {
85     longDouble * diagonal_;
86     longDouble * a;
87     longDouble * work;
88     int * rowsDropped;
89     double doubleParameters_[1]; /* corresponds to 10 */
90     int integerParameters_[2]; /* corresponds to 34, nThreads */
91     int n;
92     int numberBlocks;
93} ClpCholeskyDenseC;
94
95extern "C" {
96     void ClpCholeskySpawn(void *);
97}
98/**Non leaf recursive factor */
99void
100ClpCholeskyCfactor(ClpCholeskyDenseC * thisStruct,
101                   longDouble * a, int n, int numberBlocks,
102                   longDouble * diagonal, longDouble * work, int * rowsDropped);
103
104/**Non leaf recursive triangle rectangle update */
105void
106ClpCholeskyCtriRec(ClpCholeskyDenseC * thisStruct,
107                   longDouble * aTri, int nThis,
108                   longDouble * aUnder, longDouble * diagonal,
109                   longDouble * work,
110                   int nLeft, int iBlock, int jBlock,
111                   int numberBlocks);
112/**Non leaf recursive rectangle triangle update */
113void
114ClpCholeskyCrecTri(ClpCholeskyDenseC * thisStruct,
115                   longDouble * aUnder, int nTri, int nDo,
116                   int iBlock, int jBlock, longDouble * aTri,
117                   longDouble * diagonal, longDouble * work,
118                   int numberBlocks);
119/** Non leaf recursive rectangle rectangle update,
120    nUnder is number of rows in iBlock,
121    nUnderK is number of rows in kBlock
122*/
123void
124ClpCholeskyCrecRec(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);
130/**Leaf recursive factor */
131void
132ClpCholeskyCfactorLeaf(ClpCholeskyDenseC * thisStruct,
133                       longDouble * a, int n,
134                       longDouble * diagonal, longDouble * work,
135                       int * rowsDropped);
136/**Leaf recursive triangle rectangle update */
137void
138ClpCholeskyCtriRecLeaf(/*ClpCholeskyDenseC * thisStruct,*/
139     longDouble * aTri, longDouble * aUnder,
140     longDouble * diagonal, longDouble * work,
141     int nUnder);
142/**Leaf recursive rectangle triangle update */
143void
144ClpCholeskyCrecTriLeaf(/*ClpCholeskyDenseC * thisStruct, */
145     longDouble * aUnder, longDouble * aTri,
146     /*longDouble * diagonal,*/ longDouble * work, int nUnder);
147/** Leaf recursive rectangle rectangle update,
148    nUnder is number of rows in iBlock,
149    nUnderK is number of rows in kBlock
150*/
151void
152ClpCholeskyCrecRecLeaf(/*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
Note: See TracBrowser for help on using the repository browser.