- Main Page
- Namespaces
- Classes
- Files

- File List
- File Members

# /home/coin/SVN-release/Ipopt-3.2.1/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 759 2006-07-07 03:07:08Z 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 {
    00022
    00023   DECLARE_STD_EXCEPTION(FATAL_ERROR_IN_LINEAR_SOLVER);
    00024
    00030   class StdAugSystemSolver : public AugSystemSolver
    00031   {
    00032   public:
    00036     StdAugSystemSolver(SymLinearSolver& LinSolver);
    00037
    00039     virtual ~StdAugSystemSolver();
    00041
    00043     bool InitializeImpl(const OptionsList& options,
    00044                         const std::string& prefix);
    00045
    00050     virtual ESymSolverStatus MultiSolve(
    00051       const SymMatrix* W,
    00052       double W_factor,
    00053       const Vector* D_x,
    00054       double delta_x,
    00055       const Vector* D_s,
    00056       double delta_s,
    00057       const Matrix* J_c,
    00058       const Vector* D_c,
    00059       double delta_c,
    00060       const Matrix* J_d,
    00061       const Vector* D_d,
    00062       double delta_d,
    00063       std::vector<SmartPtr<const Vector> >& rhs_xV,
    00064       std::vector<SmartPtr<const Vector> >& rhs_sV,
    00065       std::vector<SmartPtr<const Vector> >& rhs_cV,
    00066       std::vector<SmartPtr<const Vector> >& rhs_dV,
    00067       std::vector<SmartPtr<Vector> >& sol_xV,
    00068       std::vector<SmartPtr<Vector> >& sol_sV,
    00069       std::vector<SmartPtr<Vector> >& sol_cV,
    00070       std::vector<SmartPtr<Vector> >& sol_dV,
    00071       bool check_NegEVals,
    00072       Index numberOfNegEVals);
    00073
    00080     virtual Index NumberOfNegEVals() const;
    00081
    00085     virtual bool ProvidesInertia() const;
    00086
    00093     virtual bool IncreaseQuality();
    00094
    00095   private:
    00105     StdAugSystemSolver();
    00107     StdAugSystemSolver(const StdAugSystemSolver&);
    00108
    00110     void operator=(const StdAugSystemSolver&);
    00112
    00113
    00117     void CreateAugmentedSpace(const SymMatrix& W,
    00118                               const Matrix& J_c,
    00119                               const Matrix& J_d,
    00120                               const Vector& proto_x,
    00121                               const Vector& proto_s,
    00122                               const Vector& proto_c,
    00123                               const Vector& proto_d);
    00124
    00125
    00129     void CreateAugmentedSystem(const SymMatrix* W,
    00130                                double W_factor,
    00131                                const Vector* D_x,
    00132                                double delta_x,
    00133                                const Vector* D_s,
    00134                                double delta_s,
    00135                                const Matrix& J_c,
    00136                                const Vector* D_c,
    00137                                double delta_c,
    00138                                const Matrix& J_d,
    00139                                const Vector* D_d,
    00140                                double delta_d,
    00141                                const Vector& proto_x,
    00142                                const Vector& proto_s,
    00143                                const Vector& proto_c,
    00144                                const Vector& proto_d);
    00145
    00148     bool AugmentedSystemRequiresChange(const SymMatrix* W,
    00149                                        double W_factor,
    00150                                        const Vector* D_x,
    00151                                        double delta_x,
    00152                                        const Vector* D_s,
    00153                                        double delta_s,
    00154                                        const Matrix& J_c,
    00155                                        const Vector* D_c,
    00156                                        double delta_c,
    00157                                        const Matrix& J_d,
    00158                                        const Vector* D_d,
    00159                                        double delta_d);
    00160
    00164     SmartPtr<SymLinearSolver> linsolver_;
    00165
    00167     SmartPtr<CompoundSymMatrixSpace> augmented_system_space_;
    00168     SmartPtr<SumSymMatrixSpace> sumsym_space_x_;
    00169     SmartPtr<DiagMatrixSpace> diag_space_x_;
    00170     SmartPtr<DiagMatrixSpace> diag_space_s_;
    00171     SmartPtr<DiagMatrixSpace> diag_space_c_;
    00172     SmartPtr<IdentityMatrixSpace> ident_space_ds_;
    00173     SmartPtr<DiagMatrixSpace> diag_space_d_;
    00174
    00175     SmartPtr<CompoundVectorSpace> augmented_vector_space_;
    00176
    00185     TaggedObject::Tag w_tag_;
    00187     double w_factor_;
    00191     TaggedObject::Tag d_x_tag_;
    00193     double delta_x_;
    00197     TaggedObject::Tag d_s_tag_;
    00199     double delta_s_;
    00203     TaggedObject::Tag j_c_tag_;
    00207     TaggedObject::Tag d_c_tag_;
    00209     double delta_c_;
    00213     TaggedObject::Tag j_d_tag_;
    00217     TaggedObject::Tag d_d_tag_;
    00219     double delta_d_;
    00220
    00227     TaggedObject::Tag augsys_tag_;
    00229
    00236     SmartPtr<CompoundSymMatrix> augmented_system_;
    00237
    00241     SmartPtr<const SymMatrix> old_w_;
    00242
    00247     bool warm_start_same_structure_;
    00249   };
    00250
    00251 } // namespace Ipopt
    00252
    00253 #endif