Ipopt
trunk
|
00001 // Copyright 2009, 2011 Hans Pirnay 00002 // All Rights Reserved. 00003 // This code is published under the Eclipse Public License. 00004 // 00005 // Date : 2009-05-08 00006 00007 #ifndef __ASINDEXSCHURDATA_HPP__ 00008 #define __ASINDEXSCHURDATA_HPP__ 00009 00010 #include "SensSchurData.hpp" 00011 00012 namespace Ipopt 00013 { 00014 00015 class IndexSchurData : public SchurData 00016 { 00020 public: 00021 00022 IndexSchurData(); 00023 00024 IndexSchurData(const std::vector<Index> idx, const std::vector<Index> val); 00025 00026 virtual ~IndexSchurData(); 00027 00028 virtual SmartPtr<SchurData> MakeNewSchurDataCopy() const; 00029 00030 virtual Index GetNRowsAdded() const; 00031 00032 virtual void SetData_Flag(Index dim, const Index* flags, Number v=1.0); 00033 00034 virtual void SetData_Flag(Index dim, const Index* flags, const Number* values); 00035 00036 virtual Index SetData_Index(Index dim, const Index* index, Number v=1.0); 00037 00038 virtual void SetData_List(const std::vector<Index>& list, Number v=1.0); 00039 00040 virtual void GetRow(Index i, IteratesVector& v) const; 00041 00042 virtual void GetMultiplyingVectors(Index i, std::vector<Index>& indices, std::vector<Number>& factors) const; 00043 00044 virtual void Multiply(const IteratesVector& v, Vector& u) const; 00045 00046 virtual void TransMultiply(const Vector& u, IteratesVector& v) const; 00047 00048 virtual void PrintImpl(const Journalist& jnlst, 00049 EJournalLevel level, 00050 EJournalCategory category, 00051 const std::string& name, 00052 Index indent, 00053 const std::string& prefix) const; 00054 00064 void AddData_Flag(Index dim, Index* flags, std::vector<Index>& delta_u_sort, Index v); 00065 00066 void AddData_List(std::vector<Index> cols, std::vector<Index>& delta_u_sort, Index& new_du_size, Index v); 00067 00068 const std::vector<Index>* GetColIndices() const; 00069 00070 private: 00071 00075 Index* GetVectorLengths(const IteratesVector& v) const; 00076 00077 std::vector<Index> idx_; 00078 std::vector<Index> val_; 00079 }; 00080 00081 } 00082 00083 #endif