• Main Page
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

/build/buildd/coinor-ipopt-3.8.3/Ipopt/src/LinAlg/TMatrices/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 Common Public License.
00004 //
00005 // $Id: IpSymTMatrix.hpp 1280 2008-08-10 21:19:31Z 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

Generated on Sat Oct 16 2010 02:54:51 by  doxygen 1.7.1