/home/coin/SVN-release/CoinAll-1.1.0/Ipopt/src/Algorithm/IpStdAugSystemSolver.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: IpStdAugSystemSolver.hpp 908 2007-03-01 17:40:32Z andreasw $
00006 //
00007 // Authors:  Carl Laird, Andreas Waechter     IBM    2004-08-13
00008 
00009 #ifndef __IP_STDAUGSYSTEMSOLVER_HPP__
00010 #define __IP_STDAUGSYSTEMSOLVER_HPP__
00011 
00012 #include "IpAugSystemSolver.hpp"
00013 #include "IpCompoundMatrix.hpp"
00014 #include "IpCompoundSymMatrix.hpp"
00015 #include "IpCompoundVector.hpp"
00016 #include "IpSumSymMatrix.hpp"
00017 #include "IpDiagMatrix.hpp"
00018 #include "IpIdentityMatrix.hpp"
00019 
00020 namespace Ipopt
00021 {
00027   class StdAugSystemSolver : public AugSystemSolver
00028   {
00029   public:
00033     StdAugSystemSolver(SymLinearSolver& LinSolver);
00034 
00036     virtual ~StdAugSystemSolver();
00038 
00040     bool InitializeImpl(const OptionsList& options,
00041                         const std::string& prefix);
00042 
00047     virtual ESymSolverStatus MultiSolve(
00048       const SymMatrix* W,
00049       double W_factor,
00050       const Vector* D_x,
00051       double delta_x,
00052       const Vector* D_s,
00053       double delta_s,
00054       const Matrix* J_c,
00055       const Vector* D_c,
00056       double delta_c,
00057       const Matrix* J_d,
00058       const Vector* D_d,
00059       double delta_d,
00060       std::vector<SmartPtr<const Vector> >& rhs_xV,
00061       std::vector<SmartPtr<const Vector> >& rhs_sV,
00062       std::vector<SmartPtr<const Vector> >& rhs_cV,
00063       std::vector<SmartPtr<const Vector> >& rhs_dV,
00064       std::vector<SmartPtr<Vector> >& sol_xV,
00065       std::vector<SmartPtr<Vector> >& sol_sV,
00066       std::vector<SmartPtr<Vector> >& sol_cV,
00067       std::vector<SmartPtr<Vector> >& sol_dV,
00068       bool check_NegEVals,
00069       Index numberOfNegEVals);
00070 
00077     virtual Index NumberOfNegEVals() const;
00078 
00082     virtual bool ProvidesInertia() const;
00083 
00090     virtual bool IncreaseQuality();
00091 
00092   private:
00102     StdAugSystemSolver();
00104     StdAugSystemSolver(const StdAugSystemSolver&);
00105 
00107     void operator=(const StdAugSystemSolver&);
00109 
00110 
00114     void CreateAugmentedSpace(const SymMatrix& W,
00115                               const Matrix& J_c,
00116                               const Matrix& J_d,
00117                               const Vector& proto_x,
00118                               const Vector& proto_s,
00119                               const Vector& proto_c,
00120                               const Vector& proto_d);
00121 
00122 
00126     void CreateAugmentedSystem(const SymMatrix* W,
00127                                double W_factor,
00128                                const Vector* D_x,
00129                                double delta_x,
00130                                const Vector* D_s,
00131                                double delta_s,
00132                                const Matrix& J_c,
00133                                const Vector* D_c,
00134                                double delta_c,
00135                                const Matrix& J_d,
00136                                const Vector* D_d,
00137                                double delta_d,
00138                                const Vector& proto_x,
00139                                const Vector& proto_s,
00140                                const Vector& proto_c,
00141                                const Vector& proto_d);
00142 
00145     bool AugmentedSystemRequiresChange(const SymMatrix* W,
00146                                        double W_factor,
00147                                        const Vector* D_x,
00148                                        double delta_x,
00149                                        const Vector* D_s,
00150                                        double delta_s,
00151                                        const Matrix& J_c,
00152                                        const Vector* D_c,
00153                                        double delta_c,
00154                                        const Matrix& J_d,
00155                                        const Vector* D_d,
00156                                        double delta_d);
00157 
00161     SmartPtr<SymLinearSolver> linsolver_;
00162 
00164     SmartPtr<CompoundSymMatrixSpace> augmented_system_space_;
00165     SmartPtr<SumSymMatrixSpace> sumsym_space_x_;
00166     SmartPtr<DiagMatrixSpace> diag_space_x_;
00167     SmartPtr<DiagMatrixSpace> diag_space_s_;
00168     SmartPtr<DiagMatrixSpace> diag_space_c_;
00169     SmartPtr<IdentityMatrixSpace> ident_space_ds_;
00170     SmartPtr<DiagMatrixSpace> diag_space_d_;
00171 
00172     SmartPtr<CompoundVectorSpace> augmented_vector_space_;
00173 
00182     TaggedObject::Tag w_tag_;
00184     double w_factor_;
00188     TaggedObject::Tag d_x_tag_;
00190     double delta_x_;
00194     TaggedObject::Tag d_s_tag_;
00196     double delta_s_;
00200     TaggedObject::Tag j_c_tag_;
00204     TaggedObject::Tag d_c_tag_;
00206     double delta_c_;
00210     TaggedObject::Tag j_d_tag_;
00214     TaggedObject::Tag d_d_tag_;
00216     double delta_d_;
00217 
00224     TaggedObject::Tag augsys_tag_;
00226 
00233     SmartPtr<CompoundSymMatrix> augmented_system_;
00234 
00238     SmartPtr<const SymMatrix> old_w_;
00239 
00244     bool warm_start_same_structure_;
00246   };
00247 
00248 } // namespace Ipopt
00249 
00250 #endif

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