• Main Page
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

/tmp/buildd/coinor-ipopt-3.8.3/Ipopt/src/Algorithm/IpLowRankAugSystemSolver.hpp

Go to the documentation of this file.
00001 // Copyright (C) 2005, 2006 International Business Machines and others.
00002 // All Rights Reserved.
00003 // This code is published under the Common Public License.
00004 //
00005 // $Id: IpLowRankAugSystemSolver.hpp 1692 2010-06-21 19:10:07Z andreasw $
00006 //
00007 // Authors:  Andreas Waechter                IBM    2005-12-27
00008 
00009 #ifndef __IP_LOWRANKAUGSYSTEMSOLVER_HPP__
00010 #define __IP_LOWRANKAUGSYSTEMSOLVER_HPP__
00011 
00012 #include "IpAugSystemSolver.hpp"
00013 #include "IpDenseGenMatrix.hpp"
00014 #include "IpMultiVectorMatrix.hpp"
00015 #include "IpDiagMatrix.hpp"
00016 
00017 namespace Ipopt
00018 {
00019 
00024   class LowRankAugSystemSolver : public AugSystemSolver
00025   {
00026   public:
00030     LowRankAugSystemSolver(AugSystemSolver& aug_system_solver);
00031 
00033     virtual ~LowRankAugSystemSolver();
00035 
00037     bool InitializeImpl(const OptionsList& options,
00038                         const std::string& prefix);
00039 
00043     virtual ESymSolverStatus Solve(
00044       const SymMatrix* W,
00045       double W_factor,
00046       const Vector* D_x,
00047       double delta_x,
00048       const Vector* D_s,
00049       double delta_s,
00050       const Matrix* J_c,
00051       const Vector* D_c,
00052       double delta_c,
00053       const Matrix* J_d,
00054       const Vector* D_d,
00055       double delta_d,
00056       const Vector& rhs_x,
00057       const Vector& rhs_s,
00058       const Vector& rhs_c,
00059       const Vector& rhs_d,
00060       Vector& sol_x,
00061       Vector& sol_s,
00062       Vector& sol_c,
00063       Vector& sol_d,
00064       bool check_NegEVals,
00065       Index numberOfNegEVals);
00066 
00073     virtual Index NumberOfNegEVals() const;
00074 
00078     virtual bool ProvidesInertia() const;
00079 
00086     virtual bool IncreaseQuality();
00087 
00088   private:
00098     LowRankAugSystemSolver();
00100     LowRankAugSystemSolver(const LowRankAugSystemSolver&);
00101 
00103     void operator=(const LowRankAugSystemSolver&);
00105 
00110     SmartPtr<AugSystemSolver> aug_system_solver_;
00111 
00120     TaggedObject::Tag w_tag_;
00122     double w_factor_;
00126     TaggedObject::Tag d_x_tag_;
00128     double delta_x_;
00132     TaggedObject::Tag d_s_tag_;
00134     double delta_s_;
00138     TaggedObject::Tag j_c_tag_;
00142     TaggedObject::Tag d_c_tag_;
00144     double delta_c_;
00148     TaggedObject::Tag j_d_tag_;
00152     TaggedObject::Tag d_d_tag_;
00154     double delta_d_;
00156 
00160     bool first_call_;
00161     SmartPtr<DenseGenMatrix> J1_;
00162     SmartPtr<DenseGenMatrix> J2_;
00163     SmartPtr<MultiVectorMatrix> Vtilde1_;
00164     SmartPtr<MultiVectorMatrix> Utilde2_;
00167     SmartPtr<DiagMatrix> Wdiag_;
00170     SmartPtr<const CompoundVectorSpace> compound_sol_vecspace_;
00172 
00180     Index num_neg_evals_;
00181 
00186     ESymSolverStatus UpdateFactorization(
00187       const SymMatrix* W,
00188       double W_factor,
00189       const Vector* D_x,
00190       double delta_x,
00191       const Vector* D_s,
00192       double delta_s,
00193       const Matrix& J_c,
00194       const Vector* D_c,
00195       double delta_c,
00196       const Matrix& J_d,
00197       const Vector* D_d,
00198       double delta_d,
00199       const Vector& proto_rhs_x,
00200       const Vector& proto_rhs_s,
00201       const Vector& proto_rhs_c,
00202       const Vector& proto_rhs_d,
00203       bool check_NegEVals,
00204       Index numberOfNegEVals);
00205 
00211     ESymSolverStatus SolveMultiVector(
00212       const Vector* D_x,
00213       double delta_x,
00214       const Vector* D_s,
00215       double delta_s,
00216       const Matrix& J_c,
00217       const Vector* D_c,
00218       double delta_c,
00219       const Matrix& J_d,
00220       const Vector* D_d,
00221       double delta_d,
00222       const Vector& proto_rhs_x,
00223       const Vector& proto_rhs_s,
00224       const Vector& proto_rhs_c,
00225       const Vector& proto_rhs_d,
00226       const MultiVectorMatrix& V,
00227       const SmartPtr<const Matrix>& P_LM,
00228       SmartPtr<MultiVectorMatrix>& V_x,
00229       SmartPtr<MultiVectorMatrix>& Vtilde1,
00230       SmartPtr<MultiVectorMatrix>& Vtilde1_x,
00231       bool check_NegEVals,
00232       Index numberOfNegEVals);
00233 
00237     bool AugmentedSystemRequiresChange(
00238       const SymMatrix* W,
00239       double W_factor,
00240       const Vector* D_x,
00241       double delta_x,
00242       const Vector* D_s,
00243       double delta_s,
00244       const Matrix& J_c,
00245       const Vector* D_c,
00246       double delta_c,
00247       const Matrix& J_d,
00248       const Vector* D_d,
00249       double delta_d);
00251 
00252   };
00253 
00254 } // namespace Ipopt
00255 
00256 #endif

Generated on Thu Jul 29 2010 19:56:08 by  doxygen 1.7.1