Clp trunk
|
00001 /* $Id$ */ 00002 /* 00003 Copyright (C) 2003, International Business Machines Corporation 00004 and others. All Rights Reserved. 00005 00006 This code is licensed under the terms of the Eclipse Public License (EPL). 00007 */ 00008 #ifndef ClpCholeskyDense_H 00009 #define ClpCholeskyDense_H 00010 00011 #include "ClpCholeskyBase.hpp" 00012 class ClpMatrixBase; 00013 00014 class ClpCholeskyDense : public ClpCholeskyBase { 00015 00016 public: 00021 virtual int order(ClpInterior * model) ; 00026 virtual int symbolic(); 00029 virtual int factorize(const CoinWorkDouble * diagonal, int * rowsDropped) ; 00031 virtual void solve (CoinWorkDouble * region) ; 00039 int reserveSpace(const ClpCholeskyBase * factor, int numberRows) ; 00041 CoinBigIndex space( int numberRows) const; 00043 void factorizePart2(int * rowsDropped) ; 00045 void factorizePart3(int * rowsDropped) ; 00047 void solveF1(longDouble * a, int n, CoinWorkDouble * region); 00048 void solveF2(longDouble * a, int n, CoinWorkDouble * region, CoinWorkDouble * region2); 00050 void solveB1(longDouble * a, int n, CoinWorkDouble * region); 00051 void solveB2(longDouble * a, int n, CoinWorkDouble * region, CoinWorkDouble * region2); 00052 int bNumber(const longDouble * array, int &, int&); 00054 inline longDouble * aMatrix() const { 00055 return sparseFactor_; 00056 } 00058 inline longDouble * diagonal() const { 00059 return diagonal_; 00060 } 00067 ClpCholeskyDense(); 00069 virtual ~ClpCholeskyDense(); 00071 ClpCholeskyDense(const ClpCholeskyDense&); 00073 ClpCholeskyDense& operator=(const ClpCholeskyDense&); 00075 virtual ClpCholeskyBase * clone() const ; 00079 private: 00083 bool borrowSpace_; 00085 }; 00086 00087 /* structure for C */ 00088 typedef struct { 00089 longDouble * diagonal_; 00090 longDouble * a; 00091 longDouble * work; 00092 int * rowsDropped; 00093 double doubleParameters_[1]; /* corresponds to 10 */ 00094 int integerParameters_[2]; /* corresponds to 34, nThreads */ 00095 int n; 00096 int numberBlocks; 00097 } ClpCholeskyDenseC; 00098 00099 extern "C" { 00100 void ClpCholeskySpawn(void *); 00101 } 00103 void 00104 ClpCholeskyCfactor(ClpCholeskyDenseC * thisStruct, 00105 longDouble * a, int n, int numberBlocks, 00106 longDouble * diagonal, longDouble * work, int * rowsDropped); 00107 00109 void 00110 ClpCholeskyCtriRec(ClpCholeskyDenseC * thisStruct, 00111 longDouble * aTri, int nThis, 00112 longDouble * aUnder, longDouble * diagonal, 00113 longDouble * work, 00114 int nLeft, int iBlock, int jBlock, 00115 int numberBlocks); 00117 void 00118 ClpCholeskyCrecTri(ClpCholeskyDenseC * thisStruct, 00119 longDouble * aUnder, int nTri, int nDo, 00120 int iBlock, int jBlock, longDouble * aTri, 00121 longDouble * diagonal, longDouble * work, 00122 int numberBlocks); 00127 void 00128 ClpCholeskyCrecRec(ClpCholeskyDenseC * thisStruct, 00129 longDouble * above, int nUnder, int nUnderK, 00130 int nDo, longDouble * aUnder, longDouble *aOther, 00131 longDouble * work, 00132 int iBlock, int jBlock, 00133 int numberBlocks); 00135 void 00136 ClpCholeskyCfactorLeaf(ClpCholeskyDenseC * thisStruct, 00137 longDouble * a, int n, 00138 longDouble * diagonal, longDouble * work, 00139 int * rowsDropped); 00141 void 00142 ClpCholeskyCtriRecLeaf(/*ClpCholeskyDenseC * thisStruct,*/ 00143 longDouble * aTri, longDouble * aUnder, 00144 longDouble * diagonal, longDouble * work, 00145 int nUnder); 00147 void 00148 ClpCholeskyCrecTriLeaf(/*ClpCholeskyDenseC * thisStruct, */ 00149 longDouble * aUnder, longDouble * aTri, 00150 /*longDouble * diagonal,*/ longDouble * work, int nUnder); 00155 void 00156 ClpCholeskyCrecRecLeaf(/*ClpCholeskyDenseC * thisStruct, */ 00157 const longDouble * COIN_RESTRICT above, 00158 const longDouble * COIN_RESTRICT aUnder, 00159 longDouble * COIN_RESTRICT aOther, 00160 const longDouble * COIN_RESTRICT work, 00161 int nUnder); 00162 #endif