# IpSymTMatrix.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 Eclipse Public License.
    00004 //
    00005 // $Id: IpSymTMatrix.hpp 1861 2010-12-21 21:34:47Z andreasw $
    00006 //
    00007 // Authors:  Carl Laird, Andreas Waechter     IBM    2004-08-13
    00008
    00009 #ifndef __IPSYMTMATRIX_HPP__
    00010 #define __IPSYMTMATRIX_HPP__
    00011
    00012 #include "IpUtils.hpp"
    00013 #include "IpSymMatrix.hpp"
    00014
    00015 namespace Ipopt
    00016 {
    00017
    00018   /* forward declarations */
    00019   class SymTMatrixSpace;
    00020
    00042   class SymTMatrix : public SymMatrix
    00043   {
    00044   public:
    00045
    00048
    00051     SymTMatrix(const SymTMatrixSpace* owner_space);
    00052
    00054     ~SymTMatrix();
    00056
    00064     void SetValues(const Number* Values);
    00066
    00070     Index Nonzeros() const;
    00071
    00076     const Index* Irows() const;
    00077
    00082     const Index* Jcols() const;
    00083
    00088     Number* Values();
    00093     const Number* Values() const;
    00095
    00099     void FillStruct(ipfint* Irn, ipfint* Jcn) const;
    00100
    00102     void FillValues(Number* Values) const;
    00104
    00105   protected:
    00108     virtual void MultVectorImpl(Number alpha, const Vector& x, Number beta,
    00109                                 Vector& y) const;
    00110
    00113     virtual bool HasValidNumbersImpl() const;
    00114
    00115     virtual void ComputeRowAMaxImpl(Vector& rows_norms, bool init) const;
    00116
    00117     virtual void PrintImpl(const Journalist& jnlst,
    00118                            EJournalLevel level,
    00119                            EJournalCategory category,
    00120                            const std::string& name,
    00121                            Index indent,
    00122                            const std::string& prefix) const;
    00124
    00125   private:
    00135     SymTMatrix();
    00136
    00138     SymTMatrix(const SymTMatrix&);
    00139
    00141     void operator=(const SymTMatrix&);
    00143
    00147     const SymTMatrixSpace* owner_space_;
    00148
    00150     Number* values_;
    00151
    00153     bool initialized_;
    00154
    00155   };
    00156
    00161   class SymTMatrixSpace : public SymMatrixSpace
    00162   {
    00163   public:
    00174     SymTMatrixSpace(Index dim, Index nonZeros, const Index* iRows,
    00175                     const Index* jCols);
    00176
    00178     ~SymTMatrixSpace();
    00180
    00183     virtual SymMatrix* MakeNewSymMatrix() const
    00184     {
    00185       return MakeNewSymTMatrix();
    00186     }
    00187
    00189     SymTMatrix* MakeNewSymTMatrix() const
    00190     {
    00191       return new SymTMatrix(this);
    00192     }
    00193
    00197     Index Nonzeros() const
    00198     {
    00199       return nonZeros_;
    00200     }
    00201
    00203     const Index* Irows() const
    00204     {
    00205       return iRows_;
    00206     }
    00207
    00209     const Index* Jcols() const
    00210     {
    00211       return jCols_;
    00212     }
    00214
    00215   private:
    00219     Number* AllocateInternalStorage() const;
    00220
    00222     void FreeInternalStorage(Number* values) const;
    00224
    00225     const Index nonZeros_;
    00226     Index* iRows_;
    00227     Index* jCols_;
    00228
    00229     friend class SymTMatrix;
    00230   };
    00231
    00232   /* Inline Methods */
    00233   inline
    00234   Index SymTMatrix::Nonzeros() const
    00235   {
    00236     return owner_space_->Nonzeros();
    00237   }
    00238
    00239   inline
    00240   const Index* SymTMatrix::Irows() const
    00241   {
    00242     return owner_space_->Irows();
    00243   }
    00244
    00245   inline
    00246   const Index* SymTMatrix::Jcols() const
    00247   {
    00248     return owner_space_->Jcols();
    00249   }
    00250
    00251
    00252 } // namespace Ipopt
    00253 #endif

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines