Merge pull request #3726 from bska/csrgraph-permit-self-connection

Make Self Connection Behaviour Configurable
This commit is contained in:
Atgeirr Flø Rasmussen 2023-11-17 08:28:27 +01:00 committed by GitHub
commit 5184bdc64e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 1651 additions and 86 deletions

View File

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

View File

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