Ipopt
trunk
|
00001 // Copyright (C) 2008, 2011 International Business Machines and others. 00002 // All Rights Reserved. 00003 // This code is published under the Eclipse Public License. 00004 // 00005 // $Id$ 00006 // 00007 // Authors: Andreas Waechter IBM 2008-09-05 00008 00009 #ifndef __IPINEXACTNEWTONNORMAL_HPP__ 00010 #define __IPINEXACTNEWTONNORMAL_HPP__ 00011 00012 #include "IpAlgStrategy.hpp" 00013 #include "IpAugSystemSolver.hpp" 00014 #include "IpInexactCq.hpp" 00015 00016 namespace Ipopt 00017 { 00021 class InexactNewtonNormalStep : public AlgorithmStrategyObject 00022 { 00023 public: 00027 InexactNewtonNormalStep(SmartPtr<AugSystemSolver> aug_solver); 00028 00030 virtual ~InexactNewtonNormalStep(); 00032 00034 virtual bool InitializeImpl(const OptionsList& options, 00035 const std::string& prefix); 00036 00042 virtual bool ComputeNewtonNormalStep(Vector& newton_x, Vector& newton_s); 00043 00046 static void RegisterOptions(SmartPtr<RegisteredOptions> roptions); 00048 00049 protected: 00051 InexactData& InexData() 00052 { 00053 InexactData& inexact_data = 00054 static_cast<InexactData&>(IpData().AdditionalData()); 00055 DBG_ASSERT(dynamic_cast<InexactData*>(&IpData().AdditionalData())); 00056 return inexact_data; 00057 } 00058 00060 InexactCq& InexCq() 00061 { 00062 InexactCq& inexact_cq = 00063 static_cast<InexactCq&>(IpCq().AdditionalCq()); 00064 DBG_ASSERT(dynamic_cast<InexactCq*>(&IpCq().AdditionalCq())); 00065 return inexact_cq; 00066 } 00067 00068 private: 00078 InexactNewtonNormalStep(); 00079 00081 InexactNewtonNormalStep(const InexactNewtonNormalStep&); 00082 00084 void operator=(const InexactNewtonNormalStep&); 00086 00088 SmartPtr<AugSystemSolver> aug_solver_; 00089 }; 00090 00091 } // namespace Ipopt 00092 00093 #endif