- Main Page
- Namespaces
- Classes
- Files

- File List
- File Members

# /home/coin/SVN-release/Ipopt-3.5.1/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