openpilot is an open source driver assistance system. openpilot performs the functions of Automated Lane Centering and Adaptive Cruise Control for over 200 supported car makes and models.
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

// 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