/home/coin/SVN-release/CoinAll-1.1.0/Ipopt/src/Algorithm/IpAugRestoSystemSolver.hpp

Go to the documentation of this file.
00001 // Copyright (C) 2004, 2006 International Business Machines and others.
00002 // All Rights Reserved.
00003 // This code is published under the Common Public License.
00004 //
00005 // $Id: IpAugRestoSystemSolver.hpp 735 2006-06-04 06:10:05Z andreasw $
00006 //
00007 // Authors:  Carl Laird, Andreas Waechter     IBM    2004-08-13
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 } // namespace Ipopt
00196 
00197 #endif

Generated on Sun Nov 14 14:06:34 2010 for Coin-All by  doxygen 1.4.7