Clp trunk
ClpCholeskyDense.hpp
Go to the documentation of this file.
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
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Defines