Merge pull request #3726 from bska/csrgraph-permit-self-connection
Make Self Connection Behaviour Configurable
This commit is contained in:
commit
5184bdc64e
@ -47,7 +47,11 @@ namespace Opm { namespace utility {
|
|||||||
/// \tparam TrackCompressedIdx Whether or not to form a mapping relation
|
/// \tparam TrackCompressedIdx Whether or not to form a mapping relation
|
||||||
/// for vertex pairs to compressed indices. Default value, false,
|
/// for vertex pairs to compressed indices. Default value, false,
|
||||||
/// bypasses this mapping relation and conserves memory.
|
/// bypasses this mapping relation and conserves memory.
|
||||||
template <typename VertexID = int, bool TrackCompressedIdx = false>
|
///
|
||||||
|
/// \tparam PermitSelfConnections Whether or not to allow connections of
|
||||||
|
/// the form i->i--i.e., diagonal elements. Default value, \c false,
|
||||||
|
/// does not generate connections from a vertex to itself.
|
||||||
|
template <typename VertexID = int, bool TrackCompressedIdx = false, bool PermitSelfConnections = false>
|
||||||
class CSRGraphFromCoordinates
|
class CSRGraphFromCoordinates
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
@ -73,9 +77,11 @@ namespace Opm { namespace utility {
|
|||||||
///
|
///
|
||||||
/// \param[in] v1 First vertex in vertex pair. Used as row index.
|
/// \param[in] v1 First vertex in vertex pair. Used as row index.
|
||||||
///
|
///
|
||||||
/// \param[in] r2 Second vertex in vertex pair. Used as column index.
|
/// \param[in] v2 Second vertex in vertex pair. Used as column index.
|
||||||
///
|
///
|
||||||
/// If both vertex IDs are the same then this function does nothing.
|
/// If both vertex IDs are the same, and class template argument \c
|
||||||
|
/// PermitSelfConnections is in its default state of \c false, then
|
||||||
|
/// this function does nothing.
|
||||||
void addConnection(VertexID v1, VertexID v2);
|
void addConnection(VertexID v1, VertexID v2);
|
||||||
|
|
||||||
/// Form CSR adjacency matrix representation of input graph from
|
/// Form CSR adjacency matrix representation of input graph from
|
||||||
|
@ -33,9 +33,9 @@
|
|||||||
// Class Opm::utility::CSRGraphFromCoordinates::Connections
|
// Class Opm::utility::CSRGraphFromCoordinates::Connections
|
||||||
// ---------------------------------------------------------------------
|
// ---------------------------------------------------------------------
|
||||||
|
|
||||||
template <typename VertexID, bool TrackCompressedIdx>
|
template <typename VertexID, bool TrackCompressedIdx, bool PermitSelfConnections>
|
||||||
void
|
void
|
||||||
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx>::
|
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx, PermitSelfConnections>::
|
||||||
Connections::add(const VertexID v1, const VertexID v2)
|
Connections::add(const VertexID v1, const VertexID v2)
|
||||||
{
|
{
|
||||||
this->i_.push_back(v1);
|
this->i_.push_back(v1);
|
||||||
@ -45,9 +45,9 @@ Connections::add(const VertexID v1, const VertexID v2)
|
|||||||
this->max_j_ = std::max(this->max_j_.value_or(BaseVertexID{}), this->j_.back());
|
this->max_j_ = std::max(this->max_j_.value_or(BaseVertexID{}), this->j_.back());
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename VertexID, bool TrackCompressedIdx>
|
template <typename VertexID, bool TrackCompressedIdx, bool PermitSelfConnections>
|
||||||
void
|
void
|
||||||
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx>::
|
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx, PermitSelfConnections>::
|
||||||
Connections::add(VertexID maxRowIdx,
|
Connections::add(VertexID maxRowIdx,
|
||||||
VertexID maxColIdx,
|
VertexID maxColIdx,
|
||||||
const Neighbours& rows,
|
const Neighbours& rows,
|
||||||
@ -67,9 +67,9 @@ Connections::add(VertexID maxRowIdx,
|
|||||||
this->max_j_ = std::max(this->max_j_.value_or(BaseVertexID{}), maxColIdx);
|
this->max_j_ = std::max(this->max_j_.value_or(BaseVertexID{}), maxColIdx);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename VertexID, bool TrackCompressedIdx>
|
template <typename VertexID, bool TrackCompressedIdx, bool PermitSelfConnections>
|
||||||
void
|
void
|
||||||
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx>::
|
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx, PermitSelfConnections>::
|
||||||
Connections::clear()
|
Connections::clear()
|
||||||
{
|
{
|
||||||
this->j_.clear();
|
this->j_.clear();
|
||||||
@ -79,57 +79,57 @@ Connections::clear()
|
|||||||
this->max_j_.reset();
|
this->max_j_.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename VertexID, bool TrackCompressedIdx>
|
template <typename VertexID, bool TrackCompressedIdx, bool PermitSelfConnections>
|
||||||
bool
|
bool
|
||||||
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx>::
|
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx, PermitSelfConnections>::
|
||||||
Connections::empty() const
|
Connections::empty() const
|
||||||
{
|
{
|
||||||
return this->i_.empty();
|
return this->i_.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename VertexID, bool TrackCompressedIdx>
|
template <typename VertexID, bool TrackCompressedIdx, bool PermitSelfConnections>
|
||||||
bool
|
bool
|
||||||
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx>::
|
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx, PermitSelfConnections>::
|
||||||
Connections::isValid() const
|
Connections::isValid() const
|
||||||
{
|
{
|
||||||
return this->i_.size() == this->j_.size();
|
return this->i_.size() == this->j_.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename VertexID, bool TrackCompressedIdx>
|
template <typename VertexID, bool TrackCompressedIdx, bool PermitSelfConnections>
|
||||||
std::optional<typename Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx>::BaseVertexID>
|
std::optional<typename Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx, PermitSelfConnections>::BaseVertexID>
|
||||||
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx>::
|
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx, PermitSelfConnections>::
|
||||||
Connections::maxRow() const
|
Connections::maxRow() const
|
||||||
{
|
{
|
||||||
return this->max_i_;
|
return this->max_i_;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename VertexID, bool TrackCompressedIdx>
|
template <typename VertexID, bool TrackCompressedIdx, bool PermitSelfConnections>
|
||||||
std::optional<typename Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx>::BaseVertexID>
|
std::optional<typename Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx, PermitSelfConnections>::BaseVertexID>
|
||||||
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx>::
|
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx, PermitSelfConnections>::
|
||||||
Connections::maxCol() const
|
Connections::maxCol() const
|
||||||
{
|
{
|
||||||
return this->max_j_;
|
return this->max_j_;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename VertexID, bool TrackCompressedIdx>
|
template <typename VertexID, bool TrackCompressedIdx, bool PermitSelfConnections>
|
||||||
typename Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx>::Neighbours::size_type
|
typename Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx, PermitSelfConnections>::Neighbours::size_type
|
||||||
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx>::
|
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx, PermitSelfConnections>::
|
||||||
Connections::numContributions() const
|
Connections::numContributions() const
|
||||||
{
|
{
|
||||||
return this->i_.size();
|
return this->i_.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename VertexID, bool TrackCompressedIdx>
|
template <typename VertexID, bool TrackCompressedIdx, bool PermitSelfConnections>
|
||||||
const typename Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx>::Neighbours&
|
const typename Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx, PermitSelfConnections>::Neighbours&
|
||||||
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx>::
|
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx, PermitSelfConnections>::
|
||||||
Connections::rowIndices() const
|
Connections::rowIndices() const
|
||||||
{
|
{
|
||||||
return this->i_;
|
return this->i_;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename VertexID, bool TrackCompressedIdx>
|
template <typename VertexID, bool TrackCompressedIdx, bool PermitSelfConnections>
|
||||||
const typename Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx>::Neighbours&
|
const typename Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx, PermitSelfConnections>::Neighbours&
|
||||||
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx>::
|
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx, PermitSelfConnections>::
|
||||||
Connections::columnIndices() const
|
Connections::columnIndices() const
|
||||||
{
|
{
|
||||||
return this->j_;
|
return this->j_;
|
||||||
@ -141,9 +141,9 @@ Connections::columnIndices() const
|
|||||||
// Class Opm::utility::CSRGraphFromCoordinates::CSR
|
// Class Opm::utility::CSRGraphFromCoordinates::CSR
|
||||||
// ---------------------------------------------------------------------
|
// ---------------------------------------------------------------------
|
||||||
|
|
||||||
template <typename VertexID, bool TrackCompressedIdx>
|
template <typename VertexID, bool TrackCompressedIdx, bool PermitSelfConnections>
|
||||||
void
|
void
|
||||||
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx>::
|
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx, PermitSelfConnections>::
|
||||||
CSR::merge(const Connections& conns,
|
CSR::merge(const Connections& conns,
|
||||||
const Offset maxNumVertices,
|
const Offset maxNumVertices,
|
||||||
const bool expandExistingIdxMap)
|
const bool expandExistingIdxMap)
|
||||||
@ -169,50 +169,50 @@ CSR::merge(const Connections& conns,
|
|||||||
this->compress(maxNumVertices);
|
this->compress(maxNumVertices);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename VertexID, bool TrackCompressedIdx>
|
template <typename VertexID, bool TrackCompressedIdx, bool PermitSelfConnections>
|
||||||
typename Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx>::Offset
|
typename Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx, PermitSelfConnections>::Offset
|
||||||
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx>::
|
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx, PermitSelfConnections>::
|
||||||
CSR::numRows() const
|
CSR::numRows() const
|
||||||
{
|
{
|
||||||
return this->startPointers().empty()
|
return this->startPointers().empty()
|
||||||
? 0 : this->startPointers().size() - 1;
|
? 0 : this->startPointers().size() - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename VertexID, bool TrackCompressedIdx>
|
template <typename VertexID, bool TrackCompressedIdx, bool PermitSelfConnections>
|
||||||
typename Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx>::BaseVertexID
|
typename Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx, PermitSelfConnections>::BaseVertexID
|
||||||
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx>::
|
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx, PermitSelfConnections>::
|
||||||
CSR::maxRowID() const
|
CSR::maxRowID() const
|
||||||
{
|
{
|
||||||
return this->numRows_ - 1;
|
return this->numRows_ - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename VertexID, bool TrackCompressedIdx>
|
template <typename VertexID, bool TrackCompressedIdx, bool PermitSelfConnections>
|
||||||
typename Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx>::BaseVertexID
|
typename Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx, PermitSelfConnections>::BaseVertexID
|
||||||
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx>::
|
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx, PermitSelfConnections>::
|
||||||
CSR::maxColID() const
|
CSR::maxColID() const
|
||||||
{
|
{
|
||||||
return this->numCols_ - 1;
|
return this->numCols_ - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename VertexID, bool TrackCompressedIdx>
|
template <typename VertexID, bool TrackCompressedIdx, bool PermitSelfConnections>
|
||||||
const typename Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx>::Start&
|
const typename Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx, PermitSelfConnections>::Start&
|
||||||
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx>::
|
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx, PermitSelfConnections>::
|
||||||
CSR::startPointers() const
|
CSR::startPointers() const
|
||||||
{
|
{
|
||||||
return this->ia_;
|
return this->ia_;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename VertexID, bool TrackCompressedIdx>
|
template <typename VertexID, bool TrackCompressedIdx, bool PermitSelfConnections>
|
||||||
const typename Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx>::Neighbours&
|
const typename Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx, PermitSelfConnections>::Neighbours&
|
||||||
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx>::
|
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx, PermitSelfConnections>::
|
||||||
CSR::columnIndices() const
|
CSR::columnIndices() const
|
||||||
{
|
{
|
||||||
return this->ja_;
|
return this->ja_;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename VertexID, bool TrackCompressedIdx>
|
template <typename VertexID, bool TrackCompressedIdx, bool PermitSelfConnections>
|
||||||
typename Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx>::Neighbours
|
typename Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx, PermitSelfConnections>::Neighbours
|
||||||
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx>::
|
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx, PermitSelfConnections>::
|
||||||
CSR::coordinateFormatRowIndices() const
|
CSR::coordinateFormatRowIndices() const
|
||||||
{
|
{
|
||||||
auto rowIdx = Neighbours{};
|
auto rowIdx = Neighbours{};
|
||||||
@ -235,9 +235,9 @@ CSR::coordinateFormatRowIndices() const
|
|||||||
return rowIdx;
|
return rowIdx;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename VertexID, bool TrackCompressedIdx>
|
template <typename VertexID, bool TrackCompressedIdx, bool PermitSelfConnections>
|
||||||
void
|
void
|
||||||
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx>::
|
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx, PermitSelfConnections>::
|
||||||
CSR::clear()
|
CSR::clear()
|
||||||
{
|
{
|
||||||
this->ia_.clear();
|
this->ia_.clear();
|
||||||
@ -251,9 +251,9 @@ CSR::clear()
|
|||||||
this->numCols_ = 0;
|
this->numCols_ = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename VertexID, bool TrackCompressedIdx>
|
template <typename VertexID, bool TrackCompressedIdx, bool PermitSelfConnections>
|
||||||
void
|
void
|
||||||
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx>::
|
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx, PermitSelfConnections>::
|
||||||
CSR::assemble(const Neighbours& rows,
|
CSR::assemble(const Neighbours& rows,
|
||||||
const Neighbours& cols,
|
const Neighbours& cols,
|
||||||
const BaseVertexID maxRowIdx,
|
const BaseVertexID maxRowIdx,
|
||||||
@ -286,9 +286,9 @@ CSR::assemble(const Neighbours& rows,
|
|||||||
this->numCols_ = thisNumCols;
|
this->numCols_ = thisNumCols;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename VertexID, bool TrackCompressedIdx>
|
template <typename VertexID, bool TrackCompressedIdx, bool PermitSelfConnections>
|
||||||
void
|
void
|
||||||
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx>::
|
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx, PermitSelfConnections>::
|
||||||
CSR::compress(const Offset maxNumVertices)
|
CSR::compress(const Offset maxNumVertices)
|
||||||
{
|
{
|
||||||
if (this->numRows() > maxNumVertices) {
|
if (this->numRows() > maxNumVertices) {
|
||||||
@ -313,9 +313,9 @@ CSR::compress(const Offset maxNumVertices)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename VertexID, bool TrackCompressedIdx>
|
template <typename VertexID, bool TrackCompressedIdx, bool PermitSelfConnections>
|
||||||
void
|
void
|
||||||
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx>::
|
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx, PermitSelfConnections>::
|
||||||
CSR::sortColumnIndicesPerRow()
|
CSR::sortColumnIndicesPerRow()
|
||||||
{
|
{
|
||||||
// Transposition is, in this context, effectively a linear time (O(nnz))
|
// Transposition is, in this context, effectively a linear time (O(nnz))
|
||||||
@ -327,9 +327,9 @@ CSR::sortColumnIndicesPerRow()
|
|||||||
this->transpose();
|
this->transpose();
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename VertexID, bool TrackCompressedIdx>
|
template <typename VertexID, bool TrackCompressedIdx, bool PermitSelfConnections>
|
||||||
void
|
void
|
||||||
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx>::
|
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx, PermitSelfConnections>::
|
||||||
CSR::condenseDuplicates()
|
CSR::condenseDuplicates()
|
||||||
{
|
{
|
||||||
// Note: Must be called *after* sortColumnIndicesPerRow().
|
// Note: Must be called *after* sortColumnIndicesPerRow().
|
||||||
@ -365,9 +365,9 @@ CSR::condenseDuplicates()
|
|||||||
this->ia_.back() = this->ja_.size();
|
this->ia_.back() = this->ja_.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename VertexID, bool TrackCompressedIdx>
|
template <typename VertexID, bool TrackCompressedIdx, bool PermitSelfConnections>
|
||||||
void
|
void
|
||||||
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx>::
|
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx, PermitSelfConnections>::
|
||||||
CSR::preparePushbackRowGrouping(const int numRows,
|
CSR::preparePushbackRowGrouping(const int numRows,
|
||||||
const Neighbours& rowIdx)
|
const Neighbours& rowIdx)
|
||||||
{
|
{
|
||||||
@ -400,9 +400,9 @@ CSR::preparePushbackRowGrouping(const int numRows,
|
|||||||
assert (this->ia_[0] == rowIdx.size());
|
assert (this->ia_[0] == rowIdx.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename VertexID, bool TrackCompressedIdx>
|
template <typename VertexID, bool TrackCompressedIdx, bool PermitSelfConnections>
|
||||||
void
|
void
|
||||||
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx>::
|
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx, PermitSelfConnections>::
|
||||||
CSR::groupAndTrackColumnIndicesByRow(const Neighbours& rowIdx,
|
CSR::groupAndTrackColumnIndicesByRow(const Neighbours& rowIdx,
|
||||||
const Neighbours& colIdx)
|
const Neighbours& colIdx)
|
||||||
{
|
{
|
||||||
@ -447,9 +447,9 @@ CSR::groupAndTrackColumnIndicesByRow(const Neighbours& rowIdx,
|
|||||||
this->ia_[0] = 0;
|
this->ia_[0] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename VertexID, bool TrackCompressedIdx>
|
template <typename VertexID, bool TrackCompressedIdx, bool PermitSelfConnections>
|
||||||
void
|
void
|
||||||
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx>::
|
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx, PermitSelfConnections>::
|
||||||
CSR::transpose()
|
CSR::transpose()
|
||||||
{
|
{
|
||||||
[[maybe_unused]] auto compressedIdx = this->compressedIdx_;
|
[[maybe_unused]] auto compressedIdx = this->compressedIdx_;
|
||||||
@ -472,9 +472,9 @@ CSR::transpose()
|
|||||||
std::swap(this->numRows_, this->numCols_);
|
std::swap(this->numRows_, this->numCols_);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename VertexID, bool TrackCompressedIdx>
|
template <typename VertexID, bool TrackCompressedIdx, bool PermitSelfConnections>
|
||||||
void
|
void
|
||||||
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx>::
|
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx, PermitSelfConnections>::
|
||||||
CSR::condenseAndTrackUniqueColumnsForSingleRow(typename Neighbours::const_iterator begin,
|
CSR::condenseAndTrackUniqueColumnsForSingleRow(typename Neighbours::const_iterator begin,
|
||||||
typename Neighbours::const_iterator end)
|
typename Neighbours::const_iterator end)
|
||||||
{
|
{
|
||||||
@ -517,9 +517,9 @@ CSR::condenseAndTrackUniqueColumnsForSingleRow(typename Neighbours::const_iterat
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename VertexID, bool TrackCompressedIdx>
|
template <typename VertexID, bool TrackCompressedIdx, bool PermitSelfConnections>
|
||||||
void
|
void
|
||||||
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx>::CSR::
|
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx, PermitSelfConnections>::CSR::
|
||||||
remapCompressedIndex([[maybe_unused]] Start&& compressedIdx,
|
remapCompressedIndex([[maybe_unused]] Start&& compressedIdx,
|
||||||
[[maybe_unused]] std::optional<typename Start::size_type> numOrig)
|
[[maybe_unused]] std::optional<typename Start::size_type> numOrig)
|
||||||
{
|
{
|
||||||
@ -547,16 +547,16 @@ remapCompressedIndex([[maybe_unused]] Start&& c
|
|||||||
// Class Opm::utility::CSRGraphFromCoordinates
|
// Class Opm::utility::CSRGraphFromCoordinates
|
||||||
// ---------------------------------------------------------------------
|
// ---------------------------------------------------------------------
|
||||||
|
|
||||||
template <typename VertexID, bool TrackCompressedIdx>
|
template <typename VertexID, bool TrackCompressedIdx, bool PermitSelfConnections>
|
||||||
void Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx>::clear()
|
void Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx, PermitSelfConnections>::clear()
|
||||||
{
|
{
|
||||||
this->uncompressed_.clear();
|
this->uncompressed_.clear();
|
||||||
this->csr_.clear();
|
this->csr_.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename VertexID, bool TrackCompressedIdx>
|
template <typename VertexID, bool TrackCompressedIdx, bool PermitSelfConnections>
|
||||||
void
|
void
|
||||||
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx>::
|
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx, PermitSelfConnections>::
|
||||||
addConnection(const VertexID v1, const VertexID v2)
|
addConnection(const VertexID v1, const VertexID v2)
|
||||||
{
|
{
|
||||||
if ((v1 < 0) || (v2 < 0)) {
|
if ((v1 < 0) || (v2 < 0)) {
|
||||||
@ -567,17 +567,19 @@ addConnection(const VertexID v1, const VertexID v2)
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
if (v1 == v2) {
|
if constexpr (! PermitSelfConnections) {
|
||||||
// Ignore self connections.
|
if (v1 == v2) {
|
||||||
return;
|
// Ignore self connections.
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this->uncompressed_.add(v1, v2);
|
this->uncompressed_.add(v1, v2);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename VertexID, bool TrackCompressedIdx>
|
template <typename VertexID, bool TrackCompressedIdx, bool PermitSelfConnections>
|
||||||
void
|
void
|
||||||
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx>::
|
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx, PermitSelfConnections>::
|
||||||
compress(const Offset maxNumVertices, const bool expandExistingIdxMap)
|
compress(const Offset maxNumVertices, const bool expandExistingIdxMap)
|
||||||
{
|
{
|
||||||
if (! this->uncompressed_.isValid()) {
|
if (! this->uncompressed_.isValid()) {
|
||||||
@ -591,16 +593,16 @@ compress(const Offset maxNumVertices, const bool expandExistingIdxMap)
|
|||||||
this->uncompressed_.clear();
|
this->uncompressed_.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename VertexID, bool TrackCompressedIdx>
|
template <typename VertexID, bool TrackCompressedIdx, bool PermitSelfConnections>
|
||||||
typename Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx>::Offset
|
typename Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx, PermitSelfConnections>::Offset
|
||||||
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx>::numVertices() const
|
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx, PermitSelfConnections>::numVertices() const
|
||||||
{
|
{
|
||||||
return this->csr_.numRows();
|
return this->csr_.numRows();
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename VertexID, bool TrackCompressedIdx>
|
template <typename VertexID, bool TrackCompressedIdx, bool PermitSelfConnections>
|
||||||
typename Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx>::Offset
|
typename Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx, PermitSelfConnections>::Offset
|
||||||
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx>::numEdges() const
|
Opm::utility::CSRGraphFromCoordinates<VertexID, TrackCompressedIdx, PermitSelfConnections>::numEdges() const
|
||||||
{
|
{
|
||||||
const auto& ia = this->startPointers();
|
const auto& ia = this->startPointers();
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user