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.
135 lines
5.6 KiB
135 lines
5.6 KiB
// Copyright (C) 2004, 2009 International Business Machines and others.
|
|
// All Rights Reserved.
|
|
// This code is published under the Eclipse Public License.
|
|
//
|
|
// $Id: IpTripletHelper.hpp 2380 2013-09-06 22:57:49Z ghackebeil $
|
|
//
|
|
// Authors: Carl Laird, Andreas Waechter IBM 2004-08-13
|
|
|
|
#ifndef __IPTRIPLETHELPER_HPP__
|
|
#define __IPTRIPLETHELPER_HPP__
|
|
|
|
#include "IpTypes.hpp"
|
|
#include "IpException.hpp"
|
|
|
|
namespace Ipopt
|
|
{
|
|
|
|
DECLARE_STD_EXCEPTION(UNKNOWN_MATRIX_TYPE);
|
|
DECLARE_STD_EXCEPTION(UNKNOWN_VECTOR_TYPE);
|
|
|
|
/** forward declarations */
|
|
class Matrix;
|
|
class GenTMatrix;
|
|
class SymTMatrix;
|
|
class DiagMatrix;
|
|
class IdentityMatrix;
|
|
class ExpansionMatrix;
|
|
class ScaledMatrix;
|
|
class SymScaledMatrix;
|
|
class SumMatrix;
|
|
class SumSymMatrix;
|
|
class ZeroMatrix;
|
|
class ZeroSymMatrix;
|
|
class CompoundMatrix;
|
|
class CompoundSymMatrix;
|
|
class TransposeMatrix;
|
|
class ExpandedMultiVectorMatrix;
|
|
class Vector;
|
|
|
|
class TripletHelper
|
|
{
|
|
public:
|
|
/**@name A set of recursive routines that help with the Triplet format. */
|
|
//@{
|
|
/** find the total number of triplet entries of a Matrix */
|
|
static Index GetNumberEntries(const Matrix& matrix);
|
|
|
|
/** fill the irows, jcols structure for the triplet format from the matrix */
|
|
static void FillRowCol(Index n_entries, const Matrix& matrix, Index* iRow, Index* jCol, Index row_offset=0, Index col_offset=0);
|
|
|
|
/** fill the values for the triplet format from the matrix */
|
|
static void FillValues(Index n_entries, const Matrix& matrix, Number* values);
|
|
|
|
/** fill the values from the vector into a dense double* structure */
|
|
static void FillValuesFromVector(Index dim, const Vector& vector, Number* values);
|
|
|
|
/** put the values from the double* back into the vector */
|
|
static void PutValuesInVector(Index dim, const double* values, Vector& vector);
|
|
//@}
|
|
|
|
private:
|
|
/** find the total number of triplet entries for the SumMatrix */
|
|
static Index GetNumberEntries_(const SumMatrix& matrix);
|
|
|
|
/** find the total number of triplet entries for the SumSymMatrix */
|
|
static Index GetNumberEntries_(const SumSymMatrix& matrix);
|
|
|
|
/** find the total number of triplet entries for the CompoundMatrix */
|
|
static Index GetNumberEntries_(const CompoundMatrix& matrix);
|
|
|
|
/** find the total number of triplet entries for the CompoundSymMatrix */
|
|
static Index GetNumberEntries_(const CompoundSymMatrix& matrix);
|
|
|
|
/** find the total number of triplet entries for the TransposeMatrix */
|
|
static Index GetNumberEntries_(const TransposeMatrix& matrix);
|
|
|
|
/** find the total number of triplet entries for the TransposeMatrix */
|
|
static Index GetNumberEntries_(const ExpandedMultiVectorMatrix& matrix);
|
|
|
|
static void FillRowCol_(Index n_entries, const GenTMatrix& matrix, Index row_offset, Index col_offset, Index* iRow, Index* jCol);
|
|
|
|
static void FillValues_(Index n_entries, const GenTMatrix& matrix, Number* values);
|
|
|
|
static void FillRowCol_(Index n_entries, const SymTMatrix& matrix, Index row_offset, Index col_offset, Index* iRow, Index* jCol);
|
|
|
|
static void FillValues_(Index n_entries, const SymTMatrix& matrix, Number* values);
|
|
|
|
static void FillRowCol_(Index n_entries, const DiagMatrix& matrix, Index row_offset, Index col_offset, Index* iRow, Index* jCol);
|
|
|
|
static void FillValues_(Index n_entries, const DiagMatrix& matrix, Number* values);
|
|
|
|
static void FillRowCol_(Index n_entries, const IdentityMatrix& matrix, Index row_offset, Index col_offset, Index* iRow, Index* jCol);
|
|
|
|
static void FillValues_(Index n_entries, const IdentityMatrix& matrix, Number* values);
|
|
|
|
static void FillRowCol_(Index n_entries, const ExpansionMatrix& matrix, Index row_offset, Index col_offset, Index* iRow, Index* jCol);
|
|
|
|
static void FillValues_(Index n_entries, const ExpansionMatrix& matrix, Number* values);
|
|
|
|
static void FillRowCol_(Index n_entries, const SumMatrix& matrix, Index row_offset, Index col_offset, Index* iRow, Index* jCol);
|
|
|
|
static void FillValues_(Index n_entries, const SumMatrix& matrix, Number* values);
|
|
|
|
static void FillRowCol_(Index n_entries, const SumSymMatrix& matrix, Index row_offset, Index col_offset, Index* iRow, Index* jCol);
|
|
|
|
static void FillValues_(Index n_entries, const SumSymMatrix& matrix, Number* values);
|
|
|
|
static void FillRowCol_(Index n_entries, const CompoundMatrix& matrix, Index row_offset, Index col_offset, Index* iRow, Index* jCol);
|
|
|
|
static void FillValues_(Index n_entries, const CompoundMatrix& matrix, Number* values);
|
|
|
|
static void FillRowCol_(Index n_entries, const CompoundSymMatrix& matrix, Index row_offset, Index col_offset, Index* iRow, Index* jCol);
|
|
|
|
static void FillValues_(Index n_entries, const CompoundSymMatrix& matrix, Number* values);
|
|
|
|
static void FillRowCol_(Index n_entries, const ScaledMatrix& matrix, Index row_offset, Index col_offset, Index* iRow, Index* jCol);
|
|
|
|
static void FillValues_(Index n_entries, const ScaledMatrix& matrix, Number* values);
|
|
|
|
static void FillRowCol_(Index n_entries, const SymScaledMatrix& matrix, Index row_offset, Index col_offset, Index* iRow, Index* jCol);
|
|
|
|
static void FillValues_(Index n_entries, const SymScaledMatrix& matrix, Number* values);
|
|
|
|
static void FillRowCol_(Index n_entries, const TransposeMatrix& matrix, Index row_offset, Index col_offset, Index* iRow, Index* jCol);
|
|
|
|
static void FillValues_(Index n_entries, const TransposeMatrix& matrix, Number* values);
|
|
|
|
static void FillRowCol_(Index n_entries, const ExpandedMultiVectorMatrix& matrix, Index row_offset, Index col_offset, Index* iRow, Index* jCol);
|
|
|
|
static void FillValues_(Index n_entries, const ExpandedMultiVectorMatrix& matrix, Number* values);
|
|
|
|
};
|
|
} // namespace Ipopt
|
|
|
|
#endif
|
|
|