00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef __IP_AUGRESTOSYSTEMSOLVER_HPP__
00010 #define __IP_AUGRESTOSYSTEMSOLVER_HPP__
00011
00012 #include "IpAugSystemSolver.hpp"
00013
00014 namespace Ipopt
00015 {
00016
00023 class AugRestoSystemSolver: public AugSystemSolver
00024 {
00025 public:
00034 AugRestoSystemSolver(AugSystemSolver& orig_aug_solver,
00035 bool skip_orig_aug_solver_init=true);
00036
00038 virtual ~AugRestoSystemSolver();
00040
00042 bool InitializeImpl(const OptionsList& options,
00043 const std::string& prefix);
00044
00049 virtual ESymSolverStatus Solve(
00050 const SymMatrix* W,
00051 double W_factor,
00052 const Vector* D_x,
00053 double delta_x,
00054 const Vector* D_s,
00055 double delta_s,
00056 const Matrix* J_c,
00057 const Vector* D_c,
00058 double delta_c,
00059 const Matrix* J_d,
00060 const Vector* D_d,
00061 double delta_d,
00062 const Vector& rhs_x,
00063 const Vector& rhs_s,
00064 const Vector& rhs_c,
00065 const Vector& rhs_d,
00066 Vector& sol_x,
00067 Vector& sol_s,
00068 Vector& sol_c,
00069 Vector& sol_d,
00070 bool check_NegEVals,
00071 Index numberOfNegEVals);
00072
00076 virtual Index NumberOfNegEVals() const
00077 {
00078 return orig_aug_solver_->NumberOfNegEVals();
00079 }
00080
00084 virtual bool ProvidesInertia() const
00085 {
00086 return orig_aug_solver_->ProvidesInertia();
00087 }
00088
00095 virtual bool IncreaseQuality()
00096 {
00097 return orig_aug_solver_->IncreaseQuality();
00098 }
00099
00100 private:
00110 AugRestoSystemSolver();
00111
00113 AugRestoSystemSolver(const AugRestoSystemSolver&);
00114
00116 void operator=(const AugRestoSystemSolver&);
00118
00121 CachedResults< SmartPtr<Vector> > neg_omega_c_plus_D_c_cache_;
00122 CachedResults< SmartPtr<Vector> > neg_omega_d_plus_D_d_cache_;
00123 CachedResults< SmartPtr<Vector> > sigma_tilde_n_c_inv_cache_;
00124 CachedResults< SmartPtr<Vector> > sigma_tilde_p_c_inv_cache_;
00125 CachedResults< SmartPtr<Vector> > sigma_tilde_n_d_inv_cache_;
00126 CachedResults< SmartPtr<Vector> > sigma_tilde_p_d_inv_cache_;
00127 CachedResults< SmartPtr<Vector> > d_x_plus_wr_d_cache_;
00128 CachedResults< SmartPtr<Vector> > rhs_cR_cache_;
00129 CachedResults< SmartPtr<Vector> > rhs_dR_cache_;
00131
00134 SmartPtr<const Vector> Neg_Omega_c_plus_D_c(
00135 const SmartPtr<const Vector>& sigma_tilde_n_c_inv,
00136 const SmartPtr<const Vector>& sigma_tilde_p_c_inv,
00137 const Vector* D_c,
00138 const Vector& any_vec_in_c);
00139
00140 SmartPtr<const Vector> Neg_Omega_d_plus_D_d(
00141 const Matrix& Pd_L,
00142 const SmartPtr<const Vector>& sigma_tilde_n_d_inv,
00143 const Matrix& neg_Pd_U,
00144 const SmartPtr<const Vector>& sigma_tilde_p_d_inv,
00145 const Vector* D_d,
00146 const Vector& any_vec_in_d);
00147
00149 SmartPtr<const Vector> Sigma_tilde_n_c_inv(
00150 const SmartPtr<const Vector>& sigma_tilde_n_c,
00151 Number delta_x,
00152 const Vector& any_vec_in_n_c);
00153
00154 SmartPtr<const Vector> Sigma_tilde_p_c_inv(
00155 const SmartPtr<const Vector>& sigma_tilde_p_c,
00156 Number delta_x,
00157 const Vector& any_vec_in_p_c);
00158
00159 SmartPtr<const Vector> Sigma_tilde_n_d_inv(
00160 const SmartPtr<const Vector>& sigma_tilde_n_d,
00161 Number delta_x,
00162 const Vector& any_vec_in_n_d);
00163
00164 SmartPtr<const Vector> Sigma_tilde_p_d_inv(
00165 const SmartPtr<const Vector>& sigma_tilde_p_d,
00166 Number delta_x,
00167 const Vector& any_vec_in_p_d);
00168
00169 SmartPtr<const Vector> D_x_plus_wr_d(
00170 const SmartPtr<const Vector>& CD_x0,
00171 Number factor,
00172 const Vector& wr_d);
00173
00174 SmartPtr<const Vector> Rhs_cR(
00175 const Vector& rhs_c,
00176 const SmartPtr<const Vector>& sigma_tilde_n_c_inv,
00177 const Vector& rhs_n_c,
00178 const SmartPtr<const Vector>& sigma_tilde_p_c_inv,
00179 const Vector& rhs_p_c);
00180
00181 SmartPtr<const Vector> Rhs_dR(
00182 const Vector& rhs_d,
00183 const SmartPtr<const Vector>& sigma_tilde_n_d_inv,
00184 const Vector& rhs_n_d,
00185 const Matrix& pd_L,
00186 const SmartPtr<const Vector>& sigma_tilde_p_d_inv,
00187 const Vector& rhs_p_d,
00188 const Matrix& pd_U);
00190
00191 SmartPtr<AugSystemSolver> orig_aug_solver_;
00192 bool skip_orig_aug_solver_init_;
00193 };
00194
00195 }
00196
00197 #endif