00001 // Copyright (C) 2008 International Business Machines and others. 00002 // All Rights Reserved. 00003 // This code is published under the Common Public License. 00004 // 00005 // $Id: IpInexactPDTerminationTester.hpp 1702 2010-06-29 13:16:53Z andreasw $ 00006 // 00007 // Authors: Andreas Waechter IBM 2008-09-19 00008 00009 #ifndef __IPINEXACTPDTERMINATIONTESTER_HPP__ 00010 #define __IPINEXACTPDTERMINATIONTESTER_HPP__ 00011 00012 #include "IpIterativeSolverTerminationTester.hpp" 00013 00014 namespace Ipopt 00015 { 00016 00020 class InexactPDTerminationTester: public IterativeSolverTerminationTester 00021 { 00022 public: 00027 InexactPDTerminationTester(); 00028 00030 virtual ~InexactPDTerminationTester(); 00032 00033 /* overloaded from AlgorithmStrategyObject */ 00034 virtual bool InitializeImpl(const OptionsList& options, 00035 const std::string& prefix); 00036 00039 static void RegisterOptions(SmartPtr<RegisteredOptions> roptions); 00041 00044 virtual bool InitializeSolve(); 00045 00052 virtual ETerminationTest TestTermination(Index ndim, const Number* sol, 00053 const Number* resid, Index iter, 00054 Number norm2_rhs); 00055 00058 virtual void Clear(); 00059 00062 virtual Index GetSolverIterations() const 00063 { 00064 return last_iter_; 00065 } 00066 00067 private: 00077 InexactPDTerminationTester& operator=(const InexactPDTerminationTester&); 00079 00083 Number tcc_psi_; 00085 Number tcc_theta_; 00088 Number tcc_theta_mu_exponent_; 00090 Number tcc_zeta_; 00092 Number tt_kappa1_; 00094 Number tt_kappa2_; 00096 Number tt_eps2_; 00098 Number tt_eps3_; 00101 Number rho_; 00103 Number inexact_desired_pd_residual_; 00105 Index inexact_desired_pd_residual_iter_; 00107 bool requires_scaling_; 00109 00113 SmartPtr<const Vector> curr_Av_c_; 00114 SmartPtr<const Vector> curr_Av_d_; 00115 Number c_norm_; 00116 Number c_plus_Av_norm_; 00117 Number v_norm_scaled_; 00118 SmartPtr<const Vector> curr_grad_barrier_obj_x_; 00119 SmartPtr<const Vector> curr_grad_barrier_obj_s_; 00120 SmartPtr<const Matrix> curr_jac_c_; 00121 SmartPtr<const Matrix> curr_jac_d_; 00122 SmartPtr<const Vector> curr_scaling_slacks_; 00123 SmartPtr<Vector> curr_nabla_phi_plus_ATy_x_; 00124 SmartPtr<Vector> curr_nabla_phi_plus_ATy_s_; 00125 Number curr_Av_norm_; 00126 Number curr_tt1_norm_; 00127 Number curr_tt2_norm_; 00128 SmartPtr<const Vector> curr_Wv_x_; 00129 SmartPtr<const Vector> curr_Wv_s_; 00130 bool try_tt2_; 00132 00136 Number last_Av_norm_; 00137 Number last_tt1_norm_; 00139 00141 Index last_iter_; 00142 }; 00143 00144 } // namespace Ipopt 00145 00146 #endif