mirror of
https://github.com/OPM/ResInsight.git
synced 2026-10-14 17:32:13 -05:00
RFT: Support device and annulus branches (#9168)
* Add unit test used to read data from WSEGLINK * Add segment branch type * Add detection of device branches * Add data source stepping on branch type * parse wseglink data * add RFT case as child of RimFileSummaryCase
This commit is contained in:
1 parent
e6af123094
commit
1f2e9babe6
25 files changed
+952
-261
No files matched your search
@@ -149,6 +149,62 @@ std::vector<int> RifRftSegment::branchIds() const
|
||||
return v;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
std::set<int> RifRftSegment::oneBasedBranchIndices() const
|
||||
{
|
||||
std::set<int> indices;
|
||||
|
||||
for ( auto b : m_oneBasedBranchIndexMap )
|
||||
{
|
||||
indices.insert( b.second );
|
||||
}
|
||||
|
||||
return indices;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
int RifRftSegment::oneBasedBranchIndexForBranchId( int branchId ) const
|
||||
{
|
||||
if ( m_oneBasedBranchIndexMap.count( branchId ) > 0 ) return m_oneBasedBranchIndexMap.at( branchId );
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
const RifRftSegmentData* RifRftSegment::segmentData( int segmentNumber ) const
|
||||
{
|
||||
for ( const auto& segData : m_topology )
|
||||
{
|
||||
if ( segData.segNo() == segmentNumber ) return &segData;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RifRftSegment::createDeviceBranch( int deviceBranchFirstSegmentNumber, int oneBasedBranchIndex )
|
||||
{
|
||||
for ( auto& segData : m_topology )
|
||||
{
|
||||
if ( segData.segNo() < deviceBranchFirstSegmentNumber ) continue;
|
||||
|
||||
auto branchNumber = segData.segBrno();
|
||||
if ( branchType( branchNumber ) != RiaDefines::RftBranchType::RFT_UNKNOWN ) return;
|
||||
|
||||
setOneBasedBranchIndex( segData.segBrno(), oneBasedBranchIndex );
|
||||
|
||||
setBranchType( segData.segBrno(), RiaDefines::RftBranchType::RFT_DEVICE );
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -165,6 +221,24 @@ void RifRftSegment::setBranchType( int branchId, RiaDefines::RftBranchType branc
|
||||
m_branchType[branchId] = branchType;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RifRftSegment::setOneBasedBranchIndex( int branchId, int oneBasedBranchIndex )
|
||||
{
|
||||
m_oneBasedBranchIndexMap[branchId] = oneBasedBranchIndex;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RiaDefines::RftBranchType RifRftSegment::branchType( int branchId ) const
|
||||
{
|
||||
if ( m_branchType.count( branchId ) ) return m_branchType.at( branchId );
|
||||
|
||||
return RiaDefines::RftBranchType::RFT_UNKNOWN;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -182,3 +256,32 @@ std::vector<size_t> RifRftSegment::indicesForBranchNumber( int branchNumber ) co
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
std::vector<size_t> RifRftSegment::indicesForBranchIndex( int branchIndex, RiaDefines::RftBranchType branchType ) const
|
||||
{
|
||||
std::vector<size_t> v;
|
||||
for ( size_t i = 0; i < m_topology.size(); i++ )
|
||||
{
|
||||
if ( branchIndex <= 0 )
|
||||
{
|
||||
v.push_back( i );
|
||||
continue;
|
||||
}
|
||||
|
||||
auto segment = m_topology[i];
|
||||
|
||||
auto it = m_oneBasedBranchIndexMap.find( segment.segBrno() );
|
||||
if ( it != m_oneBasedBranchIndexMap.end() )
|
||||
{
|
||||
if ( it->second == branchIndex && m_branchType.at( segment.segBrno() ) == branchType )
|
||||
{
|
||||
v.push_back( i );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return v;
|
||||
}
|
||||
Reference in new issue
Block a user