00001
00002
00003 #ifndef ClpCholeskyDense_H
00004 #define ClpCholeskyDense_H
00005
00006 #include "ClpCholeskyBase.hpp"
00007 class ClpMatrixBase;
00008
00012 class ClpCholeskyDense : public ClpCholeskyBase {
00013
00014 public:
00019 virtual int order(ClpInterior * model) ;
00024 virtual int symbolic();
00027 virtual int factorize(const double * diagonal, int * rowsDropped) ;
00029 virtual void solve (double * region) ;
00031
00037 int reserveSpace(const ClpCholeskyBase * factor, int numberRows) ;
00039 CoinBigIndex space( int numberRows) const;
00041 void factorizePart2(int * rowsDropped) ;
00043 void factorizePart3(int * rowsDropped) ;
00045 void factor(longDouble * a, int n, int numberBlocks,
00046 longDouble * diagonal, longDouble * work, int * rowsDropped);
00048 void triRec(longDouble * aTri, int nThis, longDouble * aUnder, longDouble * diagonal, longDouble * work,
00049 int nLeft, int iBlock, int jBlock,
00050 int numberBlocks);
00052 void recTri(longDouble * aUnder, int nTri, int nDo,
00053 int iBlock, int jBlock,longDouble * aTri,
00054 longDouble * diagonal, longDouble * work,
00055 int numberBlocks);
00060 void recRec(longDouble * above, int nUnder, int nUnderK,
00061 int nDo, longDouble * aUnder, longDouble *aOther,
00062 longDouble * work,
00063 int iBlock, int jBlock,
00064 int numberBlocks);
00066 void factorLeaf(longDouble * a, int n,
00067 longDouble * diagonal, longDouble * work, int * rowsDropped);
00069 void triRecLeaf(longDouble * aTri, longDouble * aUnder,
00070 longDouble * diagonal, longDouble * work,
00071 int nUnder);
00073 void recTriLeaf(longDouble * aUnder, longDouble * aTri,
00074 longDouble * diagonal, longDouble * work, int nUnder);
00079 void recRecLeaf(const longDouble * COIN_RESTRICT above,
00080 const longDouble * COIN_RESTRICT aUnder,
00081 longDouble * COIN_RESTRICT aOther,
00082 const longDouble * COIN_RESTRICT work,
00083 int nUnder);
00085 void solveF1(longDouble * a,int n,double * region);
00086 void solveF2(longDouble * a,int n,double * region,double * region2);
00088 void solveB1(longDouble * a,int n,double * region);
00089 void solveB2(longDouble * a,int n,double * region,double * region2);
00091 void solveLong (longDouble * region) ;
00093 void solveF1Long(longDouble * a,int n,longDouble * region);
00094 void solveF2Long(longDouble * a,int n,longDouble * region,longDouble * region2);
00096 void solveB1Long(longDouble * a,int n,longDouble * region);
00097 void solveB2Long(longDouble * a,int n,longDouble * region,longDouble * region2);
00099 void solveLongWork (longWork * region) ;
00101 void solveF1LongWork(longDouble * a,int n,longWork * region);
00102 void solveF2LongWork(longDouble * a,int n,longWork * region,longWork * region2);
00104 void solveB1LongWork(longDouble * a,int n,longWork * region);
00105 void solveB2LongWork(longDouble * a,int n,longWork * region,longWork * region2);
00106 int bNumber(const longDouble * array,int &, int&);
00108 inline longDouble * aMatrix() const
00109 { return sparseFactor_;}
00111 inline longDouble * diagonal() const
00112 { return diagonal_;}
00114
00115
00119 ClpCholeskyDense();
00121 virtual ~ClpCholeskyDense();
00122
00123 ClpCholeskyDense(const ClpCholeskyDense&);
00124
00125 ClpCholeskyDense& operator=(const ClpCholeskyDense&);
00127 virtual ClpCholeskyBase * clone() const ;
00129
00130
00131 private:
00134
00135 bool borrowSpace_;
00137 };
00138
00139 #endif