PIPS-NLP
sLinsys.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 SLINSYS_NLP
8 #define SLINSYS_NLP
9 
10 #include "NlpGenLinsys.h"
11 #include "DoubleLinearSolver.h"
12 #include "OoqpVectorHandle.h"
13 #include "DenseSymMatrix.h"
14 #include "DenseGenMatrix.h"
15 #include "SimpleVector.h"
16 #include "StochVector.h"
17 
18 #include <vector>
19 
20 #include "mpi.h"
21 
22 class sTree;
23 class sFactory;
24 class sData;
25 
26 class sLinsys : public NlpGenLinsys
27 {
28  public:
29  sLinsys(sFactory* factory, sData* prob);
30  sLinsys(sFactory* factory,
31  sData* prob,
32  OoqpVector* dd,
33  OoqpVector* dq,
35  OoqpVector* rhs,
36  OoqpVector* additiveDiag_=NULL);
37 
38  virtual ~sLinsys();
39 
40  virtual void factor(Data *prob, Variables *vars,RegularizationAlg *RegInfo);
41 
42  virtual void factor(Data *prob, Variables *vars);
43 
44  virtual int factor2(sData *prob, Variables *vars)=0;
45 
46  virtual void Lsolve ( sData *prob, OoqpVector& x )=0;
47  virtual void Dsolve ( sData *prob, OoqpVector& x )=0;
48  virtual void Ltsolve( sData *prob, OoqpVector& x )=0;
49  virtual void Ltsolve2( sData *prob, StochVector& x, SimpleVector& xp)=0;
50 
51 
52  virtual void solveCompressed( OoqpVector& rhs );
53  virtual void putXDiagonal( OoqpVector& xdiag_ )=0;
54  virtual void putSDiagonal( OoqpVector& sdiag_ )=0;
55  virtual void putYDualDiagonal( OoqpVector& ydiag_ )=0;
56  virtual void putZDiagonal( OoqpVector& zdiag )=0;
57 
58  virtual void setAdditiveDiagonal()=0;
59 
60  void joinRHS( OoqpVector& rhs_in, OoqpVector& rhs1_in,
61  OoqpVector& rhs2_in, OoqpVector& rhs3_in );
62 
63  void separateVars( OoqpVector& x_in, OoqpVector& y_in,
64  OoqpVector& z_in, OoqpVector& vars_in );
65 
66  void joinRHSXSYZ( OoqpVector& rhs_in, OoqpVector& rhs1_in,
67  OoqpVector& rhs2_in, OoqpVector& rhs3_in, OoqpVector& rhs4_in );
68 
69  void separateVarsXSYZ( OoqpVector& x_in, OoqpVector& s_in,
70  OoqpVector& y_in, OoqpVector& z_in, OoqpVector& vars_in);
71 
72 
73  virtual void sync()=0;
74  virtual void deleteChildren()=0;
75 
76  int negEigVal;
77 
78  protected:
79  sLinsys(){};
80 
81  int locnx, locmy, locmz;
82 
85 
86  public:
88  virtual void addLnizi(sData *prob, OoqpVector& z0, OoqpVector& zi);
89 
91  void LniTransMult(sData *prob,
92  OoqpVector& y,
93  double alpha, OoqpVector& x);
94 
95 
99  virtual void allocU(DenseGenMatrix ** Ut, int np);
100  virtual void allocV (DenseGenMatrix ** V, int np);
101  virtual void computeU_V(sData *prob, DenseGenMatrix* U, DenseGenMatrix* V);
102 
106  virtual void addTermToDenseSchurCompl(sData *prob,
107  DenseSymMatrix& SC);
108 
109  virtual void addColsToDenseSchurCompl(sData *prob,
110  DenseGenMatrix& out,
111  int startcol, int endcol);
112 
113  virtual void symAddColsToDenseSchurCompl(sData *prob,
114  double *out,
115  int startcol, int endcol);
119  virtual void addTermToSchurResidual(sData* prob,
120  SimpleVector& res,
121  SimpleVector& x);
122 
123  virtual int GetNegEigVal(){return solver->negEigVal;};
124 
125  virtual void _backSolve(sData *prob, OoqpVector& ParSol_ , OoqpVector& Vec_, StochVector* End_Par_Pos_);
126 
127  virtual void _addTargetParsLnizi(sData *prob, OoqpVector& ParSol_ , OoqpVector& Vec_, OoqpVector* goal_Par);
128 
129  virtual void _setupColOfBordMat( sData *prob, OoqpVector* rhs_St, const int ColIDX, bool &allzero,
130  const int aimlevel);
131 
132  virtual void _assembleSC( sData *prob, OoqpVector* rhs_St_in, const int ColIDX,
133  const int aimlevel, DenseSymMatrix& SC);
134  virtual void _setupYaddLniTx( sData *prob, OoqpVector& y_,
135  double alpha, SimpleVector& x, const int aimlevel);
136 
137  public:
138  MPI_Comm mpiComm;
140 
141  bool isActive;
142 };
143 
144 #endif
Definition: sFactory.h:32
Definition: NlpGenLinsys.h:43
Definition: Data.h:16
void joinRHSXSYZ(OoqpVector &rhs_in, OoqpVector &rhs1_in, OoqpVector &rhs2_in, OoqpVector &rhs3_in, OoqpVector &rhs4_in)
Definition: sLinsys.C:164
SymMatrix * kkt
Definition: sLinsys.h:87
sLinsys()
Definition: sLinsys.h:79
virtual void Ltsolve(sData *prob, OoqpVector &x)=0
Definition: sTree.h:17
virtual void factor(Data *prob, Variables *vars, RegularizationAlg *RegInfo)
Definition: sLinsys.C:189
virtual void Dsolve(sData *prob, OoqpVector &x)=0
OoqpVector * res
Definition: NlpGenLinsys.h:89
int locmz
Definition: sLinsys.h:79
sTree * stochNode
Definition: sLinsys.h:139
sData * data
Definition: sLinsys.h:84
int negEigVal
Definition: DoubleLinearSolver.h:56
virtual void _assembleSC(sData *prob, OoqpVector *rhs_St_in, const int ColIDX, const int aimlevel, DenseSymMatrix &SC)
Definition: sLinsys.C:1103
MPI_Comm mpiComm
Definition: sLinsys.h:138
int negEigVal
Definition: sLinsys.h:76
virtual void sync()=0
virtual int factor2(sData *prob, Variables *vars)=0
virtual void Lsolve(sData *prob, OoqpVector &x)=0
bool isActive
Definition: sLinsys.h:141
virtual void _addTargetParsLnizi(sData *prob, OoqpVector &ParSol_, OoqpVector &Vec_, OoqpVector *goal_Par)
Definition: sLinsys.C:1092
virtual void addTermToSchurResidual(sData *prob, SimpleVector &res, SimpleVector &x)
Definition: sLinsys.C:612
Definition: RegularizationAlg.h:12
void separateVarsXSYZ(OoqpVector &x_in, OoqpVector &s_in, OoqpVector &y_in, OoqpVector &z_in, OoqpVector &vars_in)
Definition: sLinsys.C:176
OoqpVector * nomegaInv
Definition: NlpGenLinsys.h:51
virtual void symAddColsToDenseSchurCompl(sData *prob, double *out, int startcol, int endcol)
Definition: sLinsys.C:986
virtual void solveCompressed(OoqpVector &rhs)
Definition: sLinsys.C:493
void joinRHS(OoqpVector &rhs_in, OoqpVector &rhs1_in, OoqpVector &rhs2_in, OoqpVector &rhs3_in)
Definition: sLinsys.C:142
virtual void Ltsolve2(sData *prob, StochVector &x, SimpleVector &xp)=0
virtual void putZDiagonal(OoqpVector &zdiag)=0
virtual ~sLinsys()
Definition: sLinsys.C:136
virtual void putYDualDiagonal(OoqpVector &ydiag_)=0
void LniTransMult(sData *prob, OoqpVector &y, double alpha, OoqpVector &x)
Definition: sLinsys.C:525
NlpGen * factory
Definition: NlpGenLinsys.h:61
virtual void putXDiagonal(OoqpVector &xdiag_)=0
virtual void _setupYaddLniTx(sData *prob, OoqpVector &y_, double alpha, SimpleVector &x, const int aimlevel)
Definition: sLinsys.C:1110
OoqpVector * dd
Definition: NlpGenLinsys.h:72
virtual void computeU_V(sData *prob, DenseGenMatrix *U, DenseGenMatrix *V)
Definition: sLinsys.C:338
Definition: DoubleLinearSolver.h:24
virtual void setAdditiveDiagonal()=0
Definition: DenseGenMatrix.h:17
virtual void allocU(DenseGenMatrix **Ut, int np)
Definition: sLinsys.C:372
Definition: DoubleMatrix.h:188
int locmy
Definition: sLinsys.h:79
Definition: OoqpVector.h:34
int locnx
Definition: sLinsys.h:79
virtual void _backSolve(sData *prob, OoqpVector &ParSol_, OoqpVector &Vec_, StochVector *End_Par_Pos_)
Definition: sLinsys.C:1087
Definition: sData.h:28
virtual void addTermToDenseSchurCompl(sData *prob, DenseSymMatrix &SC)
Definition: sLinsys.C:663
Definition: DenseSymMatrix.h:20
virtual void _setupColOfBordMat(sData *prob, OoqpVector *rhs_St, const int ColIDX, bool &allzero, const int aimlevel)
Definition: sLinsys.C:1097
virtual void addColsToDenseSchurCompl(sData *prob, DenseGenMatrix &out, int startcol, int endcol)
Definition: sLinsys.C:927
virtual void deleteChildren()=0
void separateVars(OoqpVector &x_in, OoqpVector &y_in, OoqpVector &z_in, OoqpVector &vars_in)
Definition: sLinsys.C:153
Definition: sLinsys.h:26
virtual void addLnizi(sData *prob, OoqpVector &z0, OoqpVector &zi)
Definition: sLinsys.C:423
virtual void allocV(DenseGenMatrix **V, int np)
Definition: sLinsys.C:390
OoqpVector * rhs
Definition: NlpGenLinsys.h:54
Definition: StochVector.h:19
OoqpVector * dq
Definition: NlpGenLinsys.h:72
DoubleLinearSolver * solver
Definition: sLinsys.h:83
Definition: Variables.h:23
Definition: SimpleVector.h:18
virtual void putSDiagonal(OoqpVector &sdiag_)=0
virtual int GetNegEigVal()
Definition: sLinsys.h:123