00001
00002
00003
00004
00005
00006
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
00088 typedef struct {
00089 longDouble * diagonal_;
00090 longDouble * a;
00091 longDouble * work;
00092 int * rowsDropped;
00093 double doubleParameters_[1];
00094 int integerParameters_[2];
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(
00143 longDouble * aTri, longDouble * aUnder,
00144 longDouble * diagonal, longDouble * work,
00145 int nUnder);
00147 void
00148 ClpCholeskyCrecTriLeaf(
00149 longDouble * aUnder, longDouble * aTri,
00150 longDouble * work, int nUnder);
00155 void
00156 ClpCholeskyCrecRecLeaf(
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