# ClpCholeskyDense.hpp

Go to the documentation of this file.

    00001 /* $Id: ClpCholeskyDense.hpp 1910 2013-01-27 02:00:13Z stefan $ */
    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 Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines