Ipopt
trunk
|
00001 // Copyright (C) 2007 International Business Machines and others. 00002 // All Rights Reserved. 00003 // This code is published under the Eclipse Public License. 00004 // 00005 // $Id$ 00006 // 00007 // Authors: Andreas Waechter IBM 2007-03-01 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 } // namespace Ipopt 00201 00202 #endif