diff --git a/MathLib/LinAlg/Sparse/CRSMatrix.h b/MathLib/LinAlg/Sparse/CRSMatrix.h index cafdd81b6740bfb05c25bb53ac1d40898a895fad..507cbabcd27907d99a2c757a1fa55db87ac66bbe 100644 --- a/MathLib/LinAlg/Sparse/CRSMatrix.h +++ b/MathLib/LinAlg/Sparse/CRSMatrix.h @@ -230,7 +230,37 @@ public: } } + CRSMatrix<FP_TYPE, IDX_TYPE>* getTranspose() const + { + CRSMatrix<FP_TYPE, IDX_TYPE>* transposed_mat(new CRSMatrix<FP_TYPE, IDX_TYPE>(this)); + transposed_mat->transpose(); + return transposed_mat; + } + protected: + CRSMatrix(CRSMatrix const& rhs) : + SparseMatrixBase<FP_TYPE, IDX_TYPE> (rhs.getNRows(), rhs.getNCols()), + _row_ptr(new IDX_TYPE[rhs.getNRows() + 1]), _col_idx(new IDX_TYPE[rhs.getNNZ()]), + _data(new FP_TYPE[rhs.getNNZ()]) + { + // copy the data + IDX_TYPE const* row_ptr(rhs.getRowPtrArray()); + for (IDX_TYPE k(0); k<MatrixBase::_n_rows; k++) { + _row_ptr[k] = row_ptr[k]; + } + + IDX_TYPE nnz(rhs.getNNZ()); + IDX_TYPE const*const col_idx(rhs.getColIdxArray()); + for (IDX_TYPE k(0); k<nnz; k++) { + _col_idx[k] = col_idx[k]; + } + + FP_TYPE const*const data(rhs.getData()); + for (IDX_TYPE k(0); k<nnz; k++) { + _data[k] = data[k]; + } + } + void removeRows (IDX_TYPE n_rows_cols, IDX_TYPE const*const rows) { //*** determine the number of new rows and the number of entries without the rows