6#ifndef CoinPackedMatrix_H
7#define CoinPackedMatrix_H
170#ifndef COIN_FAST_CODE
172 throw CoinError(
"bad index",
"vectorFirst",
"CoinPackedMatrix");
180#ifndef COIN_FAST_CODE
182 throw CoinError(
"bad index",
"vectorLast",
"CoinPackedMatrix");
189#ifndef COIN_FAST_CODE
191 throw CoinError(
"bad index",
"vectorSize",
"CoinPackedMatrix");
199#ifndef COIN_FAST_CODE
201 throw CoinError(
"bad index",
"vector",
"CoinPackedMatrix");
255 const int *vecind,
const double *vecelem);
273 const double *element,
int numberRows = -1);
290 const int *vecind,
const double *vecelem);
308 const double *element,
int numberColumns = -1);
330 const int numReplace,
const double *newElements);
336 bool keepZero =
false);
376 const int numMajor,
const int *indMajor);
381 const int numMajor,
const int *indMajor);
387 const int numMajor,
const int * indMajor,
388 const int numMinor,
const int * indMinor);
398 const int minor,
const int major,
const CoinBigIndex numels,
399 const double *elem,
const int *ind,
401 const double extraMajor = 0.0,
const double extraGap = 0.0);
425 const int minor,
const int major,
427 double *&elem,
int *&ind,
429 const int maxmajor = -1,
const CoinBigIndex maxsize = -1);
465 void times(
const double *x,
double *y)
const;
543 const double *vecelem);
554 const double *vecelem);
574 const double *element);
661 template <
class FloatEqual >
764 const double extraMajor,
const double extraGap);
767 const int minor,
const int major,
const CoinBigIndex numels,
768 const double *elem,
const int *ind,
770 const double extraMajor,
const double extraGap);
773 const int minor,
const int major,
const CoinBigIndex numels,
774 const double *elem,
const int *ind,
788 const int *rowIndices,
789 const int *colIndices,
790 const double *elements,
811 int extraForMajor,
int extraElements,
817 int numberRows,
const int *whichRows,
818 int numberColumns,
const int *whichColumns);
847 int verifyMtx(
int verbosity = 1,
bool zeroesAreError =
false)
const;
854 const int minor,
const int major,
const CoinBigIndex numels,
855 const double *elem,
const int *ind,
857 const double extraMajor = 0.0,
const double extraGap = 0.0);
860 const int minor,
const int major,
861 const double *elem,
const int *ind,
864 const int minor,
const int major,
const CoinBigIndex numels,
865 const double *elem,
const int *ind,
881 const double *element,
int numberOther = -1);
893 const double *element,
int numberOther = -1);
void CoinPackedMatrixUnitTest()
Test the methods in the CoinPackedMatrix class.
Error Class thrown by an exception.
Sparse Matrix Base Class.
void nullElementArray()
NULLify element array.
CoinBigIndex size_
the number of nonzero entries
void appendRows(const int numrows, const CoinPackedVectorBase *const *rows)
Append a set of rows to the end of the matrix.
CoinBigIndex cleanMatrix(double threshold=1.0e-20)
Really clean up matrix.
const CoinShallowPackedVector getVector(int i) const
Return the i'th vector in matrix.
void nullIndexArray()
NULLify index array.
double * getMutableElements() const
A vector containing the elements in the packed matrix.
void replaceVector(const int index, const int numReplace, const double *newElements)
Replace the elements of a vector.
void setDimensions(int numrows, int numcols)
Set the dimensions of the matrix.
void resizeForAddingMinorVectors(const int *addedEntries)
CoinBigIndex * getMutableVectorStarts() const
The positions where the major-dimension vectors start in element_ and index_.
void times(const double *x, double *y) const
Return A * x in y.
void majorAppendSameOrdered(const CoinPackedMatrix &matrix)
Append the columns of the argument to the right end of this matrix.
void reverseOrdering()
Reverse the ordering of the packed matrix.
const int * getVectorLengths() const
The lengths of the major-dimension vectors.
void timesMajor(const double *x, double *y) const
Return A * x (multiplied from the "right" direction) in y.
int maxMajorDim_
max space allocated for major-dimension
void transposeTimes(const double *x, double *y) const
Return x * A in y.
int minorDim_
size of other dimension
void nullLengthArray()
NULLify length array.
int getSizeVectorLengths() const
The size of the vectorLengths array.
bool isColOrdered() const
Whether the packed matrix is column major ordered or not.
int getMaxMajorDim() const
Current maximum for major dimension.
int getVectorSize(const int i) const
The length of i'th vector.
double * element_
List of nonzero element values.
void times(const CoinPackedVectorBase &x, double *y) const
Return A * x in y.
const int * getIndices() const
A vector containing the minor indices of the elements in the packed matrix.
int getMinorDim() const
Minor dimension.
CoinBigIndex getNumElements() const
Number of entries in the packed matrix.
void minorAppendSameOrdered(const CoinPackedMatrix &matrix)
Append the columns of the argument to the bottom end of this matrix.
int * getMutableIndices() const
A vector containing the minor indices of the elements in the packed matrix.
int * length_
Lengths of major-dimension vectors.
int getSizeVectorStarts() const
The size of the vectorStarts array.
void copyReuseArrays(const CoinPackedMatrix &rhs)
Copy method.
void appendMinorVector(const int vecsize, const int *vecind, const double *vecelem)
Append a minor-dimension vector to the end of the matrix.
const double * getElements() const
A vector containing the elements in the packed matrix.
void dumpMatrix(const char *fname=NULL) const
Dump the matrix on stdout.
virtual ~CoinPackedMatrix()
Destructor.
int * countOrthoLength() const
Count the number of entries in every minor-dimension vector and return an array containing these leng...
void majorAppendOrthoOrdered(const CoinPackedMatrix &matrix)
Append the rows of the argument to the right end of this matrix.
int appendMinor(const int number, const CoinBigIndex *starts, const int *index, const double *element, int numberOther=-1)
Append a set of rows (columns) to the end of a column (row) ordered matrix.
CoinBigIndex compress(double threshold)
Eliminate all elements in matrix whose absolute value is less than threshold.
void copyOf(const CoinPackedMatrix &rhs)
Copy method.
CoinPackedMatrix & operator=(const CoinPackedMatrix &rhs)
Assignment operator.
void transposeTimes(const CoinPackedVectorBase &x, double *y) const
Return x * A in y.
void appendCol(const int vecsize, const int *vecind, const double *vecelem)
Append a column to the end of the matrix.
void appendMajorVector(const CoinPackedVectorBase &vec)
Append a major-dimension vector to the end of the matrix.
double getExtraGap() const
Return the current setting of the extra gap.
CoinBigIndex getVectorLast(const int i) const
The position of the last element (well, one entry past the last) in the i'th major-dimension vector.
int appendRows(const int numrows, const CoinBigIndex *rowStarts, const int *column, const double *element, int numberColumns=-1)
Append a set of rows to the end of the matrix.
CoinPackedMatrix(const CoinPackedMatrix &wholeModel, int numberRows, const int *whichRows, int numberColumns, const int *whichColumns)
Subset constructor (without gaps).
int * getMajorIndices() const
Returns an array containing major indices.
void reserve(const int newMaxMajorDim, const CoinBigIndex newMaxSize, bool create=false)
Reserve sufficient space for appending major-ordered vectors.
void appendRow(const CoinPackedVectorBase &vec)
Append a row to the end of the matrix.
void assignMatrix(const bool colordered, const int minor, const int major, const CoinBigIndex numels, double *&elem, int *&ind, CoinBigIndex *&start, int *&len, const int maxmajor=-1, const CoinBigIndex maxsize=-1)
Assign the arguments to the matrix.
void setNumElements(CoinBigIndex value)
Change the size of the bulk store after modifying - be careful.
void setMajorDim(int value)
Set major dimension.
CoinBigIndex getLastStart() const
void deleteMinorVectors(const int numDel, const int *indDel)
Delete the minor-dimension vectors whose indices are listed in indDel.
void timesMinor(const CoinPackedVectorBase &x, double *y) const
Return A * x (multiplied from the "right" direction) in y.
void appendCol(const CoinPackedVectorBase &vec)
Append a column to the end of the matrix.
bool isEquivalent2(const CoinPackedMatrix &rhs) const
Test for equivalence and report differences.
const CoinBigIndex * getVectorStarts() const
The positions where the major-dimension vectors start in elements and indices.
double extraMajor_
his much times more space should be allocated for major-dimension vectors when the matrix is resized.
void setExtraGap(const double newGap)
Set the extra gap to be allocated to the specified value.
CoinBigIndex getVectorFirst(const int i) const
The position of the first element in the i'th major-dimension vector.
void countOrthoLength(int *counts) const
Count the number of entries in every minor-dimension vector and fill in an array containing these len...
void deleteMajorVectors(const int numDel, const int *indDel)
Delete the major-dimension vectors whose indices are listed in indDel.
int * getMutableVectorLengths() const
The lengths of the major-dimension vectors.
void appendRow(const int vecsize, const int *vecind, const double *vecelem)
Append a row to the end of the matrix.
void appendMajorVectors(const int numvecs, const CoinPackedVectorBase *const *vecs)
Append several major-dimensonvectors to the end of the matrix.
void timesMajor(const CoinPackedVectorBase &x, double *y) const
Return A * x (multiplied from the "right" direction) in y.
double getCoefficient(int row, int column) const
Return one element of packed matrix.
int getNumCols() const
Number of columns.
int * index_
List of nonzero element minor-dimension indices.
void setExtraMajor(const double newMajor)
Set the extra major to be allocated to the specified value.
void appendMinorVector(const CoinPackedVectorBase &vec)
Append a minor-dimension vector to the end of the matrix.
void appendCols(const int numcols, const CoinPackedVectorBase *const *cols)
Append a set of columns to the end of the matrix.
CoinPackedMatrix(const CoinPackedMatrix &m, int extraForMajor, int extraElements, bool reverseOrdering=false)
Copy constructor with fine tuning.
void setMinorDim(int value)
Set minor dimension.
void gutsOfOpEqual(const bool colordered, const int minor, const int major, const CoinBigIndex numels, const double *elem, const int *ind, const CoinBigIndex *start, const int *len)
void reverseOrderedCopyOf(const CoinPackedMatrix &rhs)
Make a reverse-ordered copy.
void submatrixOfWithDuplicates(const CoinPackedMatrix &matrix, const int numMajor, const int *indMajor)
Extract a submatrix from matrix.
int getMajorDim() const
Major dimension.
void appendMinorFast(const int number, const CoinBigIndex *starts, const int *index, const double *element)
Append a set of rows (columns) to the end of a column (row) ordered matrix.
void orderMatrix()
Sort all columns so indices are increasing.in each column.
CoinBigIndex eliminateDuplicates(double threshold)
Eliminate all duplicate AND small elements in matrix The column starts are not affected.
bool hasGaps() const
Whether the packed matrix has gaps or not.
double getExtraMajor() const
Return the current setting of the extra major.
bool isEquivalent(const CoinPackedMatrix &rhs, const FloatEqual &eq) const
Test for equivalence.
int appendCols(const int numcols, const CoinBigIndex *columnStarts, const int *row, const double *element, int numberRows=-1)
Append a set of columns to the end of the matrix.
friend void CoinPackedMatrixUnitTest()
Test the methods in the CoinPackedMatrix class.
CoinPackedMatrix(const CoinPackedMatrix &m)
Copy constructor.
void removeGaps(double removeValue=-1.0)
Remove the gaps from the matrix if there were any Can also remove small elements fabs() <= removeValu...
int getNumRows() const
Number of rows.
void timesMinor(const double *x, double *y) const
Return A * x (multiplied from the "right" direction) in y.
int verifyMtx(int verbosity=1, bool zeroesAreError=false) const
Scan the matrix for anomalies.
void swap(CoinPackedMatrix &matrix)
Swap the content of two packed matrices.
CoinPackedMatrix(const bool colordered, const double extraMajor, const double extraGap)
A constructor where the ordering and the gaps are specified.
double extraGap_
This much times more space should be allocated for each major-dimension vector (with respect to the n...
void deleteRows(const int numDel, const int *indDel)
Delete the rows whose indices are listed in indDel.
void minorAppendOrthoOrdered(const CoinPackedMatrix &matrix)
Append the rows of the argument to the bottom end of this matrix.
CoinBigIndex maxSize_
max space allocated for entries
CoinPackedMatrix()
Default Constructor creates an empty column ordered packed matrix.
void appendMajorVector(const int vecsize, const int *vecind, const double *vecelem)
Append a major-dimension vector to the end of the matrix.
bool colOrdered_
A flag indicating whether the matrix is column or row major ordered.
void appendMinorVectors(const int numvecs, const CoinPackedVectorBase *const *vecs)
Append several minor-dimension vectors to the end of the matrix.
void copyOf(const bool colordered, const int minor, const int major, const CoinBigIndex numels, const double *elem, const int *ind, const CoinBigIndex *start, const int *len, const double extraMajor=0.0, const double extraGap=0.0)
Copy the arguments to the matrix.
void printMatrixElement(const int row_val, const int col_val) const
Print a single matrix element.
void resizeForAddingMajorVectors(const int numVec, const int *lengthVec)
void bottomAppendPackedMatrix(const CoinPackedMatrix &matrix)
Append the argument to the "bottom" of the current matrix.
CoinPackedMatrix(const bool colordered, const int minor, const int major, const CoinBigIndex numels, const double *elem, const int *ind, const CoinBigIndex *start, const int *len, const double extraMajor, const double extraGap)
void gutsOfCopyOf(const bool colordered, const int minor, const int major, const CoinBigIndex numels, const double *elem, const int *ind, const CoinBigIndex *start, const int *len, const double extraMajor=0.0, const double extraGap=0.0)
CoinPackedMatrix(const bool colordered, const int *rowIndices, const int *colIndices, const double *elements, CoinBigIndex numels)
Create packed matrix from triples.
void clear()
Clear the data, but do not free any arrays.
void transpose()
Transpose the matrix.
void modifyCoefficient(int row, int column, double newElement, bool keepZero=false)
Modify one element of packed matrix.
void gutsOfCopyOfNoGaps(const bool colordered, const int minor, const int major, const double *elem, const int *ind, const CoinBigIndex *start)
When no gaps we can do faster.
void nullStartArray()
NULLify start array.
CoinPackedMatrix(const bool colordered, const int minor, const int major, const CoinBigIndex numels, const double *elem, const int *ind, const CoinBigIndex *start, const int *len)
bool isEquivalent(const CoinPackedMatrix &rhs) const
Test for equivalence.
CoinBigIndex * start_
Starting positions of major-dimension vectors.
void deleteCols(const int numDel, const int *indDel)
Delete the columns whose indices are listed in indDel.
void rightAppendPackedMatrix(const CoinPackedMatrix &matrix)
Append the argument to the "right" of the current matrix.
int appendMajor(const int number, const CoinBigIndex *starts, const int *index, const double *element, int numberOther=-1)
Append a set of rows (columns) to the end of a row (colum) ordered matrix.
int majorDim_
number of vectors in matrix
void submatrixOf(const CoinPackedMatrix &matrix, const int numMajor, const int *indMajor)
Extract a submatrix from matrix.
Abstract base class for various sparse vectors.
bool isEquivalent(const CoinPackedVectorBase &rhs, const FloatEqual &eq) const
equivalent - If shallow packed vector A & B are equivalent, then they are still equivalent no matter ...
Equality to a scaled tolerance.