# IpTransposeMatrix.hpp

Go to the documentation of this file.

    00001 // Copyright (C) 2008 International Business Machines and others.
    00002 // All Rights Reserved.
    00003 // This code is published under the Eclipse Public License.
    00004 //
    00005 // $Id: IpTransposeMatrix.hpp 1861 2010-12-21 21:34:47Z andreasw $
    00006 //
    00007 // Authors:  Andreas Waechter              IBM    2008-08-25
    00008
    00009 #ifndef __IPTRANSPOSEMATRIX_HPP__
    00010 #define __IPTRANSPOSEMATRIX_HPP__
    00011
    00012 #include "IpMatrix.hpp"
    00013
    00014 namespace Ipopt
    00015 {
    00016
    00017   /* forward declarations */
    00018   class TransposeMatrixSpace;
    00019
    00023   class TransposeMatrix : public Matrix
    00024   {
    00025   public:
    00026
    00029
    00032     TransposeMatrix(const TransposeMatrixSpace* owner_space);
    00033
    00035     ~TransposeMatrix()
    00036     {}
    00037
    00038     SmartPtr<const Matrix> OrigMatrix() const
    00039     {
    00040       return ConstPtr(orig_matrix_);
    00041     }
    00043
    00044   protected:
    00047     virtual void MultVectorImpl(Number alpha, const Vector& x,
    00048                                 Number beta, Vector& y) const
    00049     {
    00050       DBG_ASSERT(IsValid(orig_matrix_));
    00051       orig_matrix_->TransMultVector(alpha, x, beta, y);
    00052     }
    00053
    00054     virtual void TransMultVectorImpl(Number alpha, const Vector& x,
    00055                                      Number beta, Vector& y) const
    00056     {
    00057       DBG_ASSERT(IsValid(orig_matrix_));
    00058       orig_matrix_->MultVector(alpha, x, beta, y);
    00059     }
    00060
    00063     virtual bool HasValidNumbersImpl() const
    00064     {
    00065       DBG_ASSERT(IsValid(orig_matrix_));
    00066       return orig_matrix_->HasValidNumbers();
    00067     }
    00068
    00069     virtual void ComputeRowAMaxImpl(Vector& rows_norms, bool init) const
    00070     {
    00071       DBG_ASSERT(IsValid(orig_matrix_));
    00072       orig_matrix_->ComputeColAMax(rows_norms, init);
    00073     }
    00074
    00075     virtual void ComputeColAMaxImpl(Vector& rows_norms, bool init) const
    00076     {
    00077       DBG_ASSERT(IsValid(orig_matrix_));
    00078       orig_matrix_->ComputeRowAMax(rows_norms, init);
    00079     }
    00080
    00081     virtual void PrintImpl(const Journalist& jnlst,
    00082                            EJournalLevel level,
    00083                            EJournalCategory category,
    00084                            const std::string& name,
    00085                            Index indent,
    00086                            const std::string& prefix) const;
    00088
    00089   private:
    00099     TransposeMatrix();
    00100
    00102     TransposeMatrix(const TransposeMatrix&);
    00103
    00105     void operator=(const TransposeMatrix&);
    00107
    00109     SmartPtr<Matrix> orig_matrix_;
    00110   };
    00111
    00113   class TransposeMatrixSpace : public MatrixSpace
    00114   {
    00115   public:
    00119     TransposeMatrixSpace(const MatrixSpace* orig_matrix_space)
    00120         :
    00121         MatrixSpace(orig_matrix_space->NCols(), orig_matrix_space->NRows()),
    00122         orig_matrix_space_(orig_matrix_space)
    00123     {}
    00124
    00126     virtual ~TransposeMatrixSpace()
    00127     {}
    00129
    00132     virtual Matrix* MakeNew() const
    00133     {
    00134       return MakeNewTransposeMatrix();
    00135     }
    00136
    00138     TransposeMatrix* MakeNewTransposeMatrix() const
    00139     {
    00140       return new TransposeMatrix(this);
    00141     }
    00142
    00143     Matrix* MakeNewOrigMatrix() const
    00144     {
    00145       return orig_matrix_space_->MakeNew();
    00146     }
    00147
    00148   private:
    00158     TransposeMatrixSpace();
    00159
    00161     TransposeMatrixSpace(const TransposeMatrixSpace&);
    00162
    00164     void operator=(const TransposeMatrixSpace&);
    00166
    00168     SmartPtr<const MatrixSpace> orig_matrix_space_;
    00169   };
    00170
    00171 } // namespace Ipopt
    00172 #endif

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines