00001
00002
00003
00004 #ifndef ClpCholeskyDense_H
00005 #define ClpCholeskyDense_H
00006
00007 #include "ClpCholeskyBase.hpp"
00008 class ClpMatrixBase;
00009
00010 class ClpCholeskyDense : public ClpCholeskyBase {
00011
00012 public:
00017 virtual int order(ClpInterior * model) ;
00022 virtual int symbolic();
00025 virtual int factorize(const CoinWorkDouble * diagonal, int * rowsDropped) ;
00027 virtual void solve (CoinWorkDouble * region) ;
00035 int reserveSpace(const ClpCholeskyBase * factor, int numberRows) ;
00037 CoinBigIndex space( int numberRows) const;
00039 void factorizePart2(int * rowsDropped) ;
00041 void factorizePart3(int * rowsDropped) ;
00043 void solveF1(longDouble * a,int n,CoinWorkDouble * region);
00044 void solveF2(longDouble * a,int n,CoinWorkDouble * region,CoinWorkDouble * region2);
00046 void solveB1(longDouble * a,int n,CoinWorkDouble * region);
00047 void solveB2(longDouble * a,int n,CoinWorkDouble * region,CoinWorkDouble * region2);
00048 int bNumber(const longDouble * array,int &, int&);
00050 inline longDouble * aMatrix() const
00051 { return sparseFactor_;}
00053 inline longDouble * diagonal() const
00054 { return diagonal_;}
00061 ClpCholeskyDense();
00063 virtual ~ClpCholeskyDense();
00065 ClpCholeskyDense(const ClpCholeskyDense&);
00067 ClpCholeskyDense& operator=(const ClpCholeskyDense&);
00069 virtual ClpCholeskyBase * clone() const ;
00073 private:
00077 bool borrowSpace_;
00079 };
00080
00081
00082 typedef struct{
00083 longDouble * diagonal_;
00084 longDouble * a;
00085 longDouble * work;
00086 int * rowsDropped;
00087 double doubleParameters_[1];
00088 int integerParameters_[2];
00089 int n;
00090 int numberBlocks;
00091 } ClpCholeskyDenseC;
00092
00093 extern "C" {
00094 void ClpCholeskySpawn(void *);
00095 }
00097 void
00098 ClpCholeskyCfactor(ClpCholeskyDenseC * thisStruct,
00099 longDouble * a, int n, int numberBlocks,
00100 longDouble * diagonal, longDouble * work, int * rowsDropped);
00101
00103 void
00104 ClpCholeskyCtriRec(ClpCholeskyDenseC * thisStruct,
00105 longDouble * aTri, int nThis,
00106 longDouble * aUnder, longDouble * diagonal,
00107 longDouble * work,
00108 int nLeft, int iBlock, int jBlock,
00109 int numberBlocks);
00111 void
00112 ClpCholeskyCrecTri(ClpCholeskyDenseC * thisStruct,
00113 longDouble * aUnder, int nTri, int nDo,
00114 int iBlock, int jBlock,longDouble * aTri,
00115 longDouble * diagonal, longDouble * work,
00116 int numberBlocks);
00121 void
00122 ClpCholeskyCrecRec(ClpCholeskyDenseC * thisStruct,
00123 longDouble * above, int nUnder, int nUnderK,
00124 int nDo, longDouble * aUnder, longDouble *aOther,
00125 longDouble * work,
00126 int iBlock, int jBlock,
00127 int numberBlocks);
00129 void
00130 ClpCholeskyCfactorLeaf(ClpCholeskyDenseC * thisStruct,
00131 longDouble * a, int n,
00132 longDouble * diagonal, longDouble * work,
00133 int * rowsDropped);
00135 void
00136 ClpCholeskyCtriRecLeaf(
00137 longDouble * aTri, longDouble * aUnder,
00138 longDouble * diagonal, longDouble * work,
00139 int nUnder);
00141 void
00142 ClpCholeskyCrecTriLeaf(
00143 longDouble * aUnder, longDouble * aTri,
00144 longDouble * work, int nUnder);
00149 void
00150 ClpCholeskyCrecRecLeaf(
00151 const longDouble * COIN_RESTRICT above,
00152 const longDouble * COIN_RESTRICT aUnder,
00153 longDouble * COIN_RESTRICT aOther,
00154 const longDouble * COIN_RESTRICT work,
00155 int nUnder);
00156 #endif