/build/buildd/clp-1.12.0/Clp/src/ClpCholeskyDense.hpp
Go to the documentation of this file.
00001 /* $Id: ClpCholeskyDense.hpp 1525 2010-02-26 17:27:59Z mjs $ */
00002 /* Copyright (C) 2003, International Business Machines Corporation
00003    and others.  All Rights Reserved. */
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_;
00052      }
00054      inline longDouble * diagonal() const {
00055           return diagonal_;
00056      }
00063      ClpCholeskyDense();
00065      virtual ~ClpCholeskyDense();
00067      ClpCholeskyDense(const ClpCholeskyDense&);
00069      ClpCholeskyDense& operator=(const ClpCholeskyDense&);
00071      virtual ClpCholeskyBase * clone() const ;
00075 private:
00079      bool borrowSpace_;
00081 };
00082 
00083 /* structure for C */
00084 typedef struct {
00085      longDouble * diagonal_;
00086      longDouble * a;
00087      longDouble * work;
00088      int * rowsDropped;
00089      double doubleParameters_[1]; /* corresponds to 10 */
00090      int integerParameters_[2]; /* corresponds to 34, nThreads */
00091      int n;
00092      int numberBlocks;
00093 } ClpCholeskyDenseC;
00094 
00095 extern "C" {
00096      void ClpCholeskySpawn(void *);
00097 }
00099 void
00100 ClpCholeskyCfactor(ClpCholeskyDenseC * thisStruct,
00101                    longDouble * a, int n, int numberBlocks,
00102                    longDouble * diagonal, longDouble * work, int * rowsDropped);
00103 
00105 void
00106 ClpCholeskyCtriRec(ClpCholeskyDenseC * thisStruct,
00107                    longDouble * aTri, int nThis,
00108                    longDouble * aUnder, longDouble * diagonal,
00109                    longDouble * work,
00110                    int nLeft, int iBlock, int jBlock,
00111                    int numberBlocks);
00113 void
00114 ClpCholeskyCrecTri(ClpCholeskyDenseC * thisStruct,
00115                    longDouble * aUnder, int nTri, int nDo,
00116                    int iBlock, int jBlock, longDouble * aTri,
00117                    longDouble * diagonal, longDouble * work,
00118                    int numberBlocks);
00123 void
00124 ClpCholeskyCrecRec(ClpCholeskyDenseC * thisStruct,
00125                    longDouble * above, int nUnder, int nUnderK,
00126                    int nDo, longDouble * aUnder, longDouble *aOther,
00127                    longDouble * work,
00128                    int iBlock, int jBlock,
00129                    int numberBlocks);
00131 void
00132 ClpCholeskyCfactorLeaf(ClpCholeskyDenseC * thisStruct,
00133                        longDouble * a, int n,
00134                        longDouble * diagonal, longDouble * work,
00135                        int * rowsDropped);
00137 void
00138 ClpCholeskyCtriRecLeaf(/*ClpCholeskyDenseC * thisStruct,*/
00139      longDouble * aTri, longDouble * aUnder,
00140      longDouble * diagonal, longDouble * work,
00141      int nUnder);
00143 void
00144 ClpCholeskyCrecTriLeaf(/*ClpCholeskyDenseC * thisStruct, */
00145      longDouble * aUnder, longDouble * aTri,
00146      /*longDouble * diagonal,*/ longDouble * work, int nUnder);
00151 void
00152 ClpCholeskyCrecRecLeaf(/*ClpCholeskyDenseC * thisStruct, */
00153      const longDouble * COIN_RESTRICT above,
00154      const longDouble * COIN_RESTRICT aUnder,
00155      longDouble * COIN_RESTRICT aOther,
00156      const longDouble * COIN_RESTRICT work,
00157      int nUnder);
00158 #endif