PIPS-NLP
sLinsysRoot.h
Go to the documentation of this file.
1 /* PIPS
2  Authors: Cosmin Petra and Miles Lubin
3  See license and copyright information in the documentation */
4 
5 /* 2015. Modified by Nai-Yuan Chiang for NLP*/
6 
7 #ifndef SROOTLINSYS_NLP
8 #define SROOTLINSYS_NLP
9 
10 #include "sLinsys.h"
11 
12 class sFactory;
13 class sData;
14 class RegularizationAlg;
15 
16 // DEBUG only
17 //#include "ScaDenSymMatrix.h"
18 
22 class sLinsysRoot : public sLinsys {
23  protected:
24  sLinsysRoot() { };
25 
26  virtual void createChildren(sData* prob);
27  virtual void deleteChildren();
28 
29  virtual SymMatrix* createKKT (sData* prob) = 0;
30  virtual DoubleLinearSolver*
31  createSolver (sData* prob,
32  SymMatrix* kktmat) = 0;
33  public:
34  std::vector<sLinsys*> children;
36  public:
37 
38  sLinsysRoot(sFactory * factory_, sData * prob_, bool createChild = true);
40  sData* prob_,
41  OoqpVector* dd_, OoqpVector* dq_, OoqpVector* nomegaInv_,
42  OoqpVector* rhs_, OoqpVector* additiveDiag_, bool createChild = true);
43 
44  virtual int factor2(sData *prob, Variables *vars);
45 
46  /* Atoms methods of FACTOR2 for a non-leaf linear system */
47  virtual void initializeKKT(sData* prob, Variables* vars);
48  virtual void reduceKKT();
49  virtual int factorizeKKT();
50  virtual void finalizeKKT(sData* prob, Variables* vars)=0;
51 
52 
53  virtual void Lsolve ( sData *prob, OoqpVector& x );
54  virtual void Dsolve ( sData *prob, OoqpVector& x );
55  virtual void Ltsolve( sData *prob, OoqpVector& x );
56 
57  virtual void Ltsolve2( sData *prob, StochVector& x, SimpleVector& xp);
58 
59  virtual void solveReduced( sData *prob, SimpleVector& b)=0;
60 
61  virtual void putXDiagonal( OoqpVector& xdiag_ );
62  virtual void putSDiagonal( OoqpVector& sdiag_ );
63  virtual void putYDualDiagonal( OoqpVector& ydiag );
64  virtual void putZDiagonal( OoqpVector& zdiag );
65 
66  virtual void setAdditiveDiagonal( );
67 
68  virtual void AddChild(sLinsys* child);
69 
70  void sync();
71  public:
72  virtual ~sLinsysRoot();
73 
74  public: //utilities
75  void myAtPutZeros(DenseSymMatrix* mat);
76  void myAtPutZeros(DenseSymMatrix* mat,
77  int row, int col,
78  int rowExtent, int colExtent);
80  int row, int col, int drow, int dcol,
81  MPI_Comm comm);
82  protected: //buffers
83 
88 
89 #ifdef STOCH_TESTING
90  protected:
91  static void dumpRhs(int proc, const char* nameToken, SimpleVector& rhs);
92  static void dumpMatrix(int scen, int proc, const char* nameToken, DenseSymMatrix& M);
93 #endif
94 #ifdef TIMING
95  protected:
96  void afterFactor();
97 #endif
98 
99  public:
100  virtual void UpdateMatrices( Data * prob_in,int const updateLevel=2);
101 
103 
104  std::map<int,int> LocQMap;
105  std::map<int,int> LocBMap;
106 
107  virtual void setXDiagonal( OoqpVector& xdiag );
108  virtual void setSDiagonal( OoqpVector& sdiag );
109  virtual void setYDiagonal( OoqpVector& ydiag );
110  virtual void setZDiagonal( OoqpVector& zdiag );
111 
112 };
113 
114 #endif
115 
virtual void Lsolve(sData *prob, OoqpVector &x)
Definition: sLinsysRoot.C:281
Definition: sFactory.h:32
OoqpVector * xDiag
Definition: sLinsysRoot.h:85
void sync()
Definition: sLinsysRoot.C:657
virtual void createChildren(sData *prob)
Definition: sLinsysRoot.C:462
Definition: Data.h:16
virtual void finalizeKKT(sData *prob, Variables *vars)=0
virtual void setAdditiveDiagonal()
Definition: sLinsysRoot.C:633
virtual void setXDiagonal(OoqpVector &xdiag)
Definition: sLinsysRoot.C:581
virtual int factorizeKKT()
Definition: sLinsysRoot.C:725
virtual void UpdateMatrices(Data *prob_in, int const updateLevel=2)
Definition: sLinsysRoot.C:899
virtual void AddChild(sLinsys *child)
Definition: sLinsysRoot.C:651
virtual void deleteChildren()
Definition: sLinsysRoot.C:521
sLinsysRoot()
Definition: sLinsysRoot.h:24
std::map< int, int > LocQMap
Definition: sLinsysRoot.h:104
OoqpVector * sDiag
Definition: sLinsysRoot.h:87
std::map< int, int > LocBMap
Definition: sLinsysRoot.h:105
void submatrixAllReduce(DenseSymMatrix *A, int row, int col, int drow, int dcol, MPI_Comm comm)
Definition: sLinsysRoot.C:780
OoqpVector * zDiag
Definition: sLinsysRoot.h:84
virtual void setYDiagonal(OoqpVector &ydiag)
Definition: sLinsysRoot.C:607
Definition: RegularizationAlg.h:12
virtual void putZDiagonal(OoqpVector &zdiag)
Definition: sLinsysRoot.C:569
bool firstBUpdate
Definition: sLinsysRoot.h:102
bool firstQUpdate
Definition: sLinsysRoot.h:102
virtual void putYDualDiagonal(OoqpVector &ydiag)
Definition: sLinsysRoot.C:556
virtual DoubleLinearSolver * createSolver(sData *prob, SymMatrix *kktmat)=0
virtual ~sLinsysRoot()
Definition: sLinsysRoot.C:139
virtual void initializeKKT(sData *prob, Variables *vars)
Definition: sLinsysRoot.C:697
void myAtPutZeros(DenseSymMatrix *mat)
Definition: sLinsysRoot.C:772
virtual int factor2(sData *prob, Variables *vars)
Definition: sLinsysRoot.C:169
NlpGen * factory
Definition: NlpGenLinsys.h:61
virtual void Ltsolve(sData *prob, OoqpVector &x)
Definition: sLinsysRoot.C:379
std::vector< sLinsys * > children
Definition: sLinsysRoot.h:34
Definition: sLinsysRoot.h:22
virtual void Dsolve(sData *prob, OoqpVector &x)
Definition: sLinsysRoot.C:437
virtual void putSDiagonal(OoqpVector &sdiag_)
Definition: sLinsysRoot.C:543
Definition: DoubleLinearSolver.h:24
int dumpRhs(SimpleVector &v)
Definition: DoubleMatrix.h:188
Definition: OoqpVector.h:34
Definition: sData.h:28
virtual void setZDiagonal(OoqpVector &zdiag)
Definition: sLinsysRoot.C:620
virtual void Ltsolve2(sData *prob, StochVector &x, SimpleVector &xp)
Definition: sLinsysRoot.C:356
virtual void solveReduced(sData *prob, SimpleVector &b)=0
Definition: DenseSymMatrix.h:20
OoqpVector * yDiag
Definition: sLinsysRoot.h:86
int iAmDistrib
Definition: sLinsysRoot.h:35
Definition: sLinsys.h:26
virtual void setSDiagonal(OoqpVector &sdiag)
Definition: sLinsysRoot.C:594
OoqpVector * rhs
Definition: NlpGenLinsys.h:54
Definition: StochVector.h:19
Definition: Variables.h:23
virtual SymMatrix * createKKT(sData *prob)=0
Definition: SimpleVector.h:18
virtual void putXDiagonal(OoqpVector &xdiag_)
Definition: sLinsysRoot.C:530
virtual void reduceKKT()
Definition: sLinsysRoot.C:703