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

Generated on Fri Sep 26 07:44:13 2008 for SimTKcore by  doxygen 1.5.6