Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef __IPSUMSYMMATRIX_HPP__
00010 #define __IPSUMSYMMATRIX_HPP__
00011
00012 #include "IpUtils.hpp"
00013 #include "IpSymMatrix.hpp"
00014
00015 namespace Ipopt
00016 {
00017
00018
00019 class SumSymMatrixSpace;
00020
00024 class SumSymMatrix : public SymMatrix
00025 {
00026 public:
00027
00030
00034 SumSymMatrix(const SumSymMatrixSpace* owner_space);
00035
00037 ~SumSymMatrix();
00039
00042 void SetTerm(Index iterm, Number factor, const SymMatrix& matrix);
00043
00046 void GetTerm(Index iterm, Number& factor, SmartPtr<const SymMatrix>& matrix) const;
00047
00049 Index NTerms() const;
00050
00051 protected:
00054 virtual void MultVectorImpl(Number alpha, const Vector& x,
00055 Number beta, Vector& y) const;
00056
00059 virtual bool HasValidNumbersImpl() const;
00060
00061 virtual void ComputeRowAMaxImpl(Vector& rows_norms, bool init) const;
00062
00063 virtual void ComputeColAMaxImpl(Vector& cols_norms, bool init) const;
00064
00065 virtual void PrintImpl(const Journalist& jnlst,
00066 EJournalLevel level,
00067 EJournalCategory category,
00068 const std::string& name,
00069 Index indent,
00070 const std::string& prefix) const;
00072
00073 private:
00083 SumSymMatrix();
00084
00086 SumSymMatrix(const SumSymMatrix&);
00087
00089 void operator=(const SumSymMatrix&);
00091
00093 std::vector<Number> factors_;
00094
00096 std::vector<SmartPtr<const SymMatrix> > matrices_;
00097
00099 const SumSymMatrixSpace* owner_space_;
00100 };
00101
00103 class SumSymMatrixSpace : public SymMatrixSpace
00104 {
00105 public:
00110 SumSymMatrixSpace(Index ndim, Index nterms)
00111 :
00112 SymMatrixSpace(ndim),
00113 nterms_(nterms)
00114 {}
00115
00117 ~SumSymMatrixSpace()
00118 {}
00120
00124 Index NTerms() const
00125 {
00126 return nterms_;
00127 }
00129
00133 void SetTermSpace(Index term_idx, const SymMatrixSpace& space);
00134
00136 SmartPtr<const SymMatrixSpace> GetTermSpace(Index term_idx) const;
00137
00139 SumSymMatrix* MakeNewSumSymMatrix() const;
00140
00143 virtual SymMatrix* MakeNewSymMatrix() const;
00144
00145 private:
00146 Index nterms_;
00147
00148 std::vector< SmartPtr<const SymMatrixSpace> > term_spaces_;
00149 };
00150
00151 }
00152 #endif