00001 // Copyright (C) 2008 International Business Machines and others. 00002 // All Rights Reserved. 00003 // This code is published under the Common Public License. 00004 // 00005 // $Id: IpInexactNewtonNormal.hpp 1390 2009-01-06 16:55:52Z andreasw $ 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 00041 virtual bool ComputeNewtonNormalStep(Vector& newton_x, Vector& newton_s); 00042 00045 static void RegisterOptions(SmartPtr<RegisteredOptions> roptions); 00047 00048 protected: 00050 InexactData& InexData() 00051 { 00052 InexactData& inexact_data = 00053 static_cast<InexactData&>(IpData().AdditionalData()); 00054 DBG_ASSERT(dynamic_cast<InexactData*>(&IpData().AdditionalData())); 00055 return inexact_data; 00056 } 00057 00059 InexactCq& InexCq() 00060 { 00061 InexactCq& inexact_cq = 00062 static_cast<InexactCq&>(IpCq().AdditionalCq()); 00063 DBG_ASSERT(dynamic_cast<InexactCq*>(&IpCq().AdditionalCq())); 00064 return inexact_cq; 00065 } 00066 00067 private: 00077 InexactNewtonNormalStep(); 00078 00080 InexactNewtonNormalStep(const InexactNewtonNormalStep&); 00081 00083 void operator=(const InexactNewtonNormalStep&); 00085 00087 SmartPtr<AugSystemSolver> aug_solver_; 00088 }; 00089 00090 } // namespace Ipopt 00091 00092 #endif