You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
162 lines
3.9 KiB
162 lines
3.9 KiB
// Copyright (C) 2004, 2008 International Business Machines and others.
|
|
// All Rights Reserved.
|
|
// This code is published under the Eclipse Public License.
|
|
//
|
|
// $Id: IpSymMatrix.hpp 2269 2013-05-05 11:32:40Z stefan $
|
|
//
|
|
// Authors: Carl Laird, Andreas Waechter IBM 2004-08-13
|
|
|
|
#ifndef __IPSYMMATRIX_HPP__
|
|
#define __IPSYMMATRIX_HPP__
|
|
|
|
#include "IpUtils.hpp"
|
|
#include "IpMatrix.hpp"
|
|
|
|
namespace Ipopt
|
|
{
|
|
|
|
/* forward declarations */
|
|
class SymMatrixSpace;
|
|
|
|
/** This is the base class for all derived symmetric matrix types.
|
|
*/
|
|
class SymMatrix : public Matrix
|
|
{
|
|
public:
|
|
/** @name Constructor/Destructor */
|
|
//@{
|
|
/** Constructor, taking the owner_space.
|
|
*/
|
|
inline
|
|
SymMatrix(const SymMatrixSpace* owner_space);
|
|
|
|
/** Destructor */
|
|
virtual ~SymMatrix()
|
|
{}
|
|
//@}
|
|
|
|
/** @name Information about the size of the matrix */
|
|
//@{
|
|
/** Dimension of the matrix (number of rows and columns) */
|
|
inline
|
|
Index Dim() const;
|
|
//@}
|
|
|
|
inline
|
|
SmartPtr<const SymMatrixSpace> OwnerSymMatrixSpace() const;
|
|
|
|
protected:
|
|
/** @name Overloaded methods from Matrix. */
|
|
//@{
|
|
/** Since the matrix is
|
|
* symmetric, it is only necessary to implement the
|
|
* MultVectorImpl method in a class that inherits from this base
|
|
* class. If the TransMultVectorImpl is called, this base class
|
|
* automatically calls MultVectorImpl instead. */
|
|
virtual void TransMultVectorImpl(Number alpha, const Vector& x, Number beta,
|
|
Vector& y) const
|
|
{
|
|
// Since this matrix is symetric, this is the same operation as
|
|
// MultVector
|
|
MultVector(alpha, x, beta, y);
|
|
}
|
|
/** Since the matrix is symmetric, the row and column max norms
|
|
* are identical */
|
|
virtual void ComputeColAMaxImpl(Vector& cols_norms, bool init) const
|
|
{
|
|
ComputeRowAMaxImpl(cols_norms, init);
|
|
}
|
|
//@}
|
|
|
|
private:
|
|
/** Copy of the owner space ptr as a SymMatrixSpace instead
|
|
* of a MatrixSpace
|
|
*/
|
|
const SymMatrixSpace* owner_space_;
|
|
};
|
|
|
|
|
|
/** SymMatrixSpace base class, corresponding to the SymMatrix base
|
|
* class. */
|
|
class SymMatrixSpace : public MatrixSpace
|
|
{
|
|
public:
|
|
/** @name Constructors/Destructors */
|
|
//@{
|
|
/** Constructor, given the dimension (identical to the number of
|
|
* rows and columns).
|
|
*/
|
|
SymMatrixSpace(Index dim)
|
|
:
|
|
MatrixSpace(dim,dim)
|
|
{}
|
|
|
|
/** Destructor */
|
|
virtual ~SymMatrixSpace()
|
|
{}
|
|
//@}
|
|
|
|
/** Pure virtual method for creating a new matrix of this specific
|
|
* type. */
|
|
virtual SymMatrix* MakeNewSymMatrix() const=0;
|
|
|
|
/** Overloaded MakeNew method for the MatrixSpace base class.
|
|
*/
|
|
virtual Matrix* MakeNew() const
|
|
{
|
|
return MakeNewSymMatrix();
|
|
}
|
|
|
|
/** Accessor method for the dimension of the matrices in this
|
|
* matrix space.
|
|
*/
|
|
Index Dim() const
|
|
{
|
|
DBG_ASSERT(NRows() == NCols());
|
|
return NRows();
|
|
}
|
|
|
|
private:
|
|
/**@name Default Compiler Generated Methods
|
|
* (Hidden to avoid implicit creation/calling).
|
|
* These methods are not implemented and
|
|
* we do not want the compiler to implement
|
|
* them for us, so we declare them private
|
|
* and do not define them. This ensures that
|
|
* they will not be implicitly created/called. */
|
|
//@{
|
|
/** default constructor */
|
|
SymMatrixSpace();
|
|
|
|
/* Copy constructor */
|
|
SymMatrixSpace(const SymMatrixSpace&);
|
|
|
|
/** Overloaded Equals Operator */
|
|
SymMatrixSpace& operator=(const SymMatrixSpace&);
|
|
//@}
|
|
|
|
};
|
|
|
|
/* inline methods */
|
|
inline
|
|
SymMatrix::SymMatrix(const SymMatrixSpace* owner_space)
|
|
:
|
|
Matrix(owner_space),
|
|
owner_space_(owner_space)
|
|
{}
|
|
|
|
inline
|
|
Index SymMatrix::Dim() const
|
|
{
|
|
return owner_space_->Dim();
|
|
}
|
|
|
|
inline
|
|
SmartPtr<const SymMatrixSpace> SymMatrix::OwnerSymMatrixSpace() const
|
|
{
|
|
return owner_space_;
|
|
}
|
|
|
|
} // namespace Ipopt
|
|
|
|
#endif
|
|
|