00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef __IP_STDAUGSYSTEMSOLVER_HPP__
00010 #define __IP_STDAUGSYSTEMSOLVER_HPP__
00011
00012 #include "IpAugSystemSolver.hpp"
00013 #include "IpGenKKTSolverInterface.hpp"
00014
00015 namespace Ipopt
00016 {
00022 class GenAugSystemSolver : public AugSystemSolver
00023 {
00024 public:
00028 GenAugSystemSolver(GenKKTSolverInterface& SolverInterface);
00029
00031 virtual ~GenAugSystemSolver();
00033
00035 bool InitializeImpl(const OptionsList& options,
00036 const std::string& prefix);
00037
00042 virtual ESymSolverStatus MultiSolve(
00043 const SymMatrix* W,
00044 double W_factor,
00045 const Vector* D_x,
00046 double delta_x,
00047 const Vector* D_s,
00048 double delta_s,
00049 const Matrix* J_c,
00050 const Vector* D_c,
00051 double delta_c,
00052 const Matrix* J_d,
00053 const Vector* D_d,
00054 double delta_d,
00055 std::vector<SmartPtr<const Vector> >& rhs_xV,
00056 std::vector<SmartPtr<const Vector> >& rhs_sV,
00057 std::vector<SmartPtr<const Vector> >& rhs_cV,
00058 std::vector<SmartPtr<const Vector> >& rhs_dV,
00059 std::vector<SmartPtr<Vector> >& sol_xV,
00060 std::vector<SmartPtr<Vector> >& sol_sV,
00061 std::vector<SmartPtr<Vector> >& sol_cV,
00062 std::vector<SmartPtr<Vector> >& sol_dV,
00063 bool check_NegEVals,
00064 Index numberOfNegEVals);
00065
00072 virtual Index NumberOfNegEVals() const;
00073
00077 virtual bool ProvidesInertia() const;
00078
00085 virtual bool IncreaseQuality();
00086
00087 private:
00097 GenAugSystemSolver();
00099 GenAugSystemSolver(const GenAugSystemSolver&);
00100
00102 void operator=(const GenAugSystemSolver&);
00104
00107 bool AugmentedSystemChanged(const SymMatrix* W,
00108 double W_factor,
00109 const Vector* D_x,
00110 double delta_x,
00111 const Vector* D_s,
00112 double delta_s,
00113 const Matrix& J_c,
00114 const Vector* D_c,
00115 double delta_c,
00116 const Matrix& J_d,
00117 const Vector* D_d,
00118 double delta_d);
00119
00120 void UpdateTags(const SymMatrix* W,
00121 double W_factor,
00122 const Vector* D_x,
00123 double delta_x,
00124 const Vector* D_s,
00125 double delta_s,
00126 const Matrix& J_c,
00127 const Vector* D_c,
00128 double delta_c,
00129 const Matrix& J_d,
00130 const Vector* D_d,
00131 double delta_d);
00132
00136 SmartPtr<GenKKTSolverInterface> solver_interface_;
00137
00146 TaggedObject::Tag w_tag_;
00148 double w_factor_;
00152 TaggedObject::Tag d_x_tag_;
00154 double delta_x_;
00158 TaggedObject::Tag d_s_tag_;
00160 double delta_s_;
00164 TaggedObject::Tag j_c_tag_;
00168 TaggedObject::Tag d_c_tag_;
00170 double delta_c_;
00174 TaggedObject::Tag j_d_tag_;
00178 TaggedObject::Tag d_d_tag_;
00180 double delta_d_;
00182
00186 Number* dx_vals_copy_;
00187 Number* ds_vals_copy_;
00188 Number* dc_vals_copy_;
00189 Number* dd_vals_copy_;
00191
00196 bool warm_start_same_structure_;
00198 };
00199
00200 }
00201
00202 #endif