MSW : Make sure the ICV is using the full perforation interval #6152

This commit is contained in:
Magne Sjaastad 2020-06-26 12:29:07 +02:00
parent f9e8a23ecf
commit ec03627fae

View File

@ -268,28 +268,39 @@ std::vector<std::pair<double, double>> RimWellPathValve::valveSegments() const
RimPerforationInterval* perforationInterval = nullptr;
this->firstAncestorOrThisOfType( perforationInterval );
double startMD = this->startMD();
double endMD = this->endMD();
std::vector<double> valveMDs = valveLocations();
std::vector<std::pair<double, double>> segments;
segments.reserve( valveMDs.size() );
for ( size_t i = 0; i < valveMDs.size(); ++i )
if ( componentType() == RiaDefines::WellPathComponentType::ICV )
{
double segmentStart = startMD;
double segmentEnd = endMD;
if ( i > 0 )
{
segmentStart = 0.5 * ( valveMDs[i - 1] + valveMDs[i] );
}
if ( i < valveMDs.size() - 1u )
{
segmentEnd = 0.5 * ( valveMDs[i] + valveMDs[i + 1] );
}
segments.push_back( std::make_pair( segmentStart, segmentEnd ) );
// Flow for ICV is defined as the complete perforation interval
segments.push_back( std::make_pair( perforationInterval->startMD(), perforationInterval->endMD() ) );
}
else
{
// ICD/AICD : Use the valve start/end, can be a subset of perforation interval
double startMD = this->startMD();
double endMD = this->endMD();
std::vector<double> valveMDs = valveLocations();
segments.reserve( valveMDs.size() );
for ( size_t i = 0; i < valveMDs.size(); ++i )
{
double segmentStart = startMD;
double segmentEnd = endMD;
if ( i > 0 )
{
segmentStart = 0.5 * ( valveMDs[i - 1] + valveMDs[i] );
}
if ( i < valveMDs.size() - 1u )
{
segmentEnd = 0.5 * ( valveMDs[i] + valveMDs[i + 1] );
}
segments.push_back( std::make_pair( segmentStart, segmentEnd ) );
}
}
return segments;
}