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.
		
		
		
		
			
				
					136 lines
				
				5.6 KiB
			
		
		
			
		
	
	
					136 lines
				
				5.6 KiB
			| 
								 
											6 years ago
										 
									 | 
							
								// 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
							 |