- Main Page
- Classes
- Files

- File List
- File Members

# src/LinAlg/IpExpansionMatrix.hpp

Go to the documentation of this file.

    00001 // Copyright (C) 2004, 2009 International Business Machines and others.
    00002 // All Rights Reserved.
    00003 // This code is published under the Eclipse Public License.
    00004 //
    00005 // $Id: IpExpansionMatrix.hpp 1861 2010-12-21 21:34:47Z andreasw $
    00006 //
    00007 // Authors:  Carl Laird, Andreas Waechter     IBM    2004-08-13
    00008
    00009 #ifndef __IPEXPANSIONMATRIX_HPP__
    00010 #define __IPEXPANSIONMATRIX_HPP__
    00011
    00012 #include "IpUtils.hpp"
    00013 #include "IpMatrix.hpp"
    00014
    00015 namespace Ipopt
    00016 {
    00017
    00019   class ExpansionMatrixSpace;
    00020
    00027   class ExpansionMatrix : public Matrix
    00028   {
    00029   public:
    00030
    00033
    00036     ExpansionMatrix(const ExpansionMatrixSpace* owner_space);
    00037
    00039     ~ExpansionMatrix();
    00041
    00049     const Index* ExpandedPosIndices() const;
    00050
    00059     const Index* CompressedPosIndices() const;
    00060
    00061   protected:
    00064     virtual void MultVectorImpl(Number alpha, const Vector &x, Number beta,
    00065                                 Vector &y) const;
    00066
    00067     virtual void TransMultVectorImpl(Number alpha, const Vector& x,
    00068                                      Number beta, Vector& y) const;
    00069
    00072     virtual void AddMSinvZImpl(Number alpha, const Vector& S, const Vector& Z,
    00073                                Vector& X) const;
    00074
    00077     virtual void SinvBlrmZMTdBrImpl(Number alpha, const Vector& S,
    00078                                     const Vector& R, const Vector& Z,
    00079                                     const Vector& D, Vector& X) const;
    00080
    00081     virtual void ComputeRowAMaxImpl(Vector& rows_norms, bool init) const;
    00082
    00083     virtual void ComputeColAMaxImpl(Vector& cols_norms, bool init) const;
    00084
    00085     virtual void PrintImpl(const Journalist& jnlst,
    00086                            EJournalLevel level,
    00087                            EJournalCategory category,
    00088                            const std::string& name,
    00089                            Index indent,
    00090                            const std::string& prefix) const
    00091     {
    00092       PrintImplOffset(jnlst, level, category, name, indent, prefix, 1, 1);
    00093     }
    00095
    00096     void PrintImplOffset(const Journalist& jnlst,
    00097                          EJournalLevel level,
    00098                          EJournalCategory category,
    00099                          const std::string& name,
    00100                          Index indent,
    00101                          const std::string& prefix,
    00102                          Index row_offset,
    00103                          Index col_offset) const;
    00104
    00105     friend class ParExpansionMatrix;
    00106
    00107   private:
    00117     ExpansionMatrix();
    00118
    00120     ExpansionMatrix(const ExpansionMatrix&);
    00121
    00123     void operator=(const ExpansionMatrix&);
    00125
    00126     const ExpansionMatrixSpace* owner_space_;
    00127
    00128   };
    00129
    00132   class ExpansionMatrixSpace : public MatrixSpace
    00133   {
    00134   public:
    00144     ExpansionMatrixSpace(Index NLargeVec,
    00145                          Index NSmallVec,
    00146                          const Index *ExpPos,
    00147                          const int offset = 0);
    00148
    00150     ~ExpansionMatrixSpace()
    00151     {
    00152       delete [] compressed_pos_;
    00153       delete [] expanded_pos_;
    00154     }
    00156
    00158     ExpansionMatrix* MakeNewExpansionMatrix() const
    00159     {
    00160       return new ExpansionMatrix(this);
    00161     }
    00162
    00165     virtual Matrix* MakeNew() const
    00166     {
    00167       return MakeNewExpansionMatrix();
    00168     }
    00169
    00176     const Index* ExpandedPosIndices() const
    00177     {
    00178       return expanded_pos_;
    00179     }
    00180
    00188     const Index* CompressedPosIndices() const
    00189     {
    00190       return compressed_pos_;
    00191     }
    00192
    00193   private:
    00194     Index *expanded_pos_;
    00195     Index *compressed_pos_;
    00196   };
    00197
    00198   /* inline methods */
    00199   inline
    00200   const Index* ExpansionMatrix::ExpandedPosIndices() const
    00201   {
    00202     return owner_space_->ExpandedPosIndices();
    00203   }
    00204
    00205   inline
    00206   const Index* ExpansionMatrix::CompressedPosIndices() const
    00207   {
    00208     return owner_space_->CompressedPosIndices();
    00209   }
    00210
    00211 } // namespace Ipopt
    00212 #endif

All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Defines