Ipopt Documentation  
IpStdAugSystemSolver.hpp
Go to the documentation of this file.
1 // Copyright (C) 2004, 2006 International Business Machines and others.
2 // All Rights Reserved.
3 // This code is published under the Eclipse Public License.
4 //
5 // Authors: Carl Laird, Andreas Waechter IBM 2004-08-13
6 
7 #ifndef __IP_STDAUGSYSTEMSOLVER_HPP__
8 #define __IP_STDAUGSYSTEMSOLVER_HPP__
9 
10 #include "IpAugSystemSolver.hpp"
11 #include "IpCompoundMatrix.hpp"
12 #include "IpCompoundSymMatrix.hpp"
13 #include "IpCompoundVector.hpp"
14 #include "IpSumSymMatrix.hpp"
15 #include "IpDiagMatrix.hpp"
16 #include "IpIdentityMatrix.hpp"
17 
18 namespace Ipopt
19 {
26 {
27 public:
29 
32  SymLinearSolver& LinSolver
33  );
34 
36  virtual ~StdAugSystemSolver();
38 
39  bool InitializeImpl(
40  const OptionsList& options,
41  const std::string& prefix
42  );
43 
49  const SymMatrix* W,
50  Number W_factor,
51  const Vector* D_x,
52  Number delta_x,
53  const Vector* D_s,
54  Number delta_s,
55  const Matrix* J_c,
56  const Vector* D_c,
57  Number delta_c,
58  const Matrix* J_d,
59  const Vector* D_d,
60  Number delta_d,
61  std::vector<SmartPtr<const Vector> >& rhs_xV,
62  std::vector<SmartPtr<const Vector> >& rhs_sV,
63  std::vector<SmartPtr<const Vector> >& rhs_cV,
64  std::vector<SmartPtr<const Vector> >& rhs_dV,
65  std::vector<SmartPtr<Vector> >& sol_xV,
66  std::vector<SmartPtr<Vector> >& sol_sV,
67  std::vector<SmartPtr<Vector> >& sol_cV,
68  std::vector<SmartPtr<Vector> >& sol_dV,
69  bool check_NegEVals,
70  Index numberOfNegEVals
71  );
72 
81  virtual Index NumberOfNegEVals() const;
82 
87  virtual bool ProvidesInertia() const;
88 
97  virtual bool IncreaseQuality();
98 
99 private:
109 
112 
115  const StdAugSystemSolver&
116  );
117 
119  void operator=(
120  const StdAugSystemSolver&
121  );
123 
131  const SymMatrix& W,
132  const Matrix& J_c,
133  const Matrix& J_d,
134  const Vector& proto_x,
135  const Vector& proto_s,
136  const Vector& proto_c,
137  const Vector& proto_d
138  );
139 
147  const SymMatrix* W,
148  Number W_factor,
149  const Vector* D_x,
150  Number delta_x,
151  const Vector* D_s,
152  Number delta_s,
153  const Matrix& J_c,
154  const Vector* D_c,
155  Number delta_c,
156  const Matrix& J_d,
157  const Vector* D_d,
158  Number delta_d,
159  const Vector& proto_x,
160  const Vector& proto_s,
161  const Vector& proto_c,
162  const Vector& proto_d
163  );
164 
169  const SymMatrix* W,
170  Number W_factor,
171  const Vector* D_x,
172  Number delta_x,
173  const Vector* D_s,
174  Number delta_s,
175  const Matrix& J_c,
176  const Vector* D_c,
177  Number delta_c,
178  const Matrix& J_d,
179  const Vector* D_d,
180  Number delta_d
181  );
182 
187 
196 
198 
203 
209 
212 
218 
221 
227 
230 
236 
242 
245 
251 
257 
260 
270 
279 
286 
288 
294 };
295 
296 } // namespace Ipopt
297 
298 #endif
Number delta_x_
Most recent value of delta_x from Set method.
ESymSolverStatus
Enum to report outcome of a linear solve.
bool InitializeImpl(const OptionsList &options, const std::string &prefix)
overloaded from AlgorithmStrategyObject
TaggedObject::Tag d_x_tag_
Tag for D_x vector, representing the diagonal matrix D_x.
void CreateAugmentedSpace(const SymMatrix &W, const Matrix &J_c, const Matrix &J_d, const Vector &proto_x, const Vector &proto_s, const Vector &proto_c, const Vector &proto_d)
Create the matrix space for the Compound Sym Matrix that represents the augmented system...
Number w_factor_
Most recent value of W_factor.
bool warm_start_same_structure_
Flag indicating whether the TNLP with identical structure has already been solved before...
StdAugSystemSolver()
Default constructor.
SmartPtr< DiagMatrixSpace > diag_space_x_
SmartPtr< IdentityMatrixSpace > ident_space_ds_
SmartPtr< SumSymMatrixSpace > sumsym_space_x_
Vector Base Class.
Definition: IpVector.hpp:47
SmartPtr< DiagMatrixSpace > diag_space_d_
bool AugmentedSystemRequiresChange(const SymMatrix *W, Number W_factor, const Vector *D_x, Number delta_x, const Vector *D_s, Number delta_s, const Matrix &J_c, const Vector *D_c, Number delta_c, const Matrix &J_d, const Vector *D_d, Number delta_d)
Check the internal tags and decide if the passed variables are different from what is in the augmente...
SmartPtr< CompoundVectorSpace > augmented_vector_space_
ipindex Index
Type of all indices of vectors, matrices etc.
Definition: IpTypes.hpp:20
TaggedObject::Tag j_c_tag_
Tag for J_c matrix.
This file contains a base class for all exceptions and a set of macros to help with exceptions...
virtual bool IncreaseQuality()
Request to increase quality of solution for next solve.
This is the base class for all derived symmetric matrix types.
Definition: IpSymMatrix.hpp:20
Template class for Smart Pointers.
Definition: IpSmartPtr.hpp:164
void operator=(const StdAugSystemSolver &)
Default Assignment Operator.
This class stores a list of user set options.
Base class for Solver for the augmented system.
virtual bool ProvidesInertia() const
Query whether inertia is computed by linear solver.
Number delta_d_
Most recent value of delta_d from Set method.
Matrix Base Class.
Definition: IpMatrix.hpp:27
Number delta_c_
Most recent value of delta_c from set method.
TaggedObject::Tag augsys_tag_
This is the tag of the matrix storing the augmented system.
Number delta_s_
Most recent value of delta_s from Set method.
TaggedObject::Tag d_d_tag_
Tag for D_d vector, representing the diagonal matrix D_d.
SmartPtr< CompoundSymMatrixSpace > augmented_system_space_
Spaces for piecing together the augmented system.
ipnumber Number
Type of all numbers.
Definition: IpTypes.hpp:17
SmartPtr< DiagMatrixSpace > diag_space_s_
TaggedObject::Tag d_c_tag_
Tag for D_c vector, representing the diagonal matrix D_c.
TaggedObject::Tag j_d_tag_
Tag for J_d matrix.
TaggedObject::Tag w_tag_
Tag for W matrix.
virtual Index NumberOfNegEVals() const
Number of negative eigenvalues detected during last solve.
SmartPtr< DiagMatrixSpace > diag_space_c_
unsigned int Tag
Type for the Tag values.
Solver for the augmented system for triple type matrices.
Base class for all derived symmetric linear solvers.
SmartPtr< CompoundSymMatrix > augmented_system_
The resulting augmented matrix.
virtual ~StdAugSystemSolver()
Destructor.
virtual ESymSolverStatus MultiSolve(const SymMatrix *W, Number W_factor, const Vector *D_x, Number delta_x, const Vector *D_s, Number delta_s, const Matrix *J_c, const Vector *D_c, Number delta_c, const Matrix *J_d, const Vector *D_d, Number delta_d, std::vector< SmartPtr< const Vector > > &rhs_xV, std::vector< SmartPtr< const Vector > > &rhs_sV, std::vector< SmartPtr< const Vector > > &rhs_cV, std::vector< SmartPtr< const Vector > > &rhs_dV, std::vector< SmartPtr< Vector > > &sol_xV, std::vector< SmartPtr< Vector > > &sol_sV, std::vector< SmartPtr< Vector > > &sol_cV, std::vector< SmartPtr< Vector > > &sol_dV, bool check_NegEVals, Index numberOfNegEVals)
Set up the augmented system and solve it for a set of given right hand side - implementation for GenT...
TaggedObject::Tag d_s_tag_
Tag for D_s vector, representing the diagonal matrix D_s.
void CreateAugmentedSystem(const SymMatrix *W, Number W_factor, const Vector *D_x, Number delta_x, const Vector *D_s, Number delta_s, const Matrix &J_c, const Vector *D_c, Number delta_c, const Matrix &J_d, const Vector *D_d, Number delta_d, const Vector &proto_x, const Vector &proto_s, const Vector &proto_c, const Vector &proto_d)
Create the new compound sym matrix that represents the augmented system.
SmartPtr< SymLinearSolver > linsolver_
The linear solver object that is to be used to solve the linear systems.
SmartPtr< const SymMatrix > old_w_
A copy of a previous W used in the augmented_system_.