diff --git a/ApplicationCode/ProjectDataModel/Completions/RimWellPathValve.cpp b/ApplicationCode/ProjectDataModel/Completions/RimWellPathValve.cpp index d6c4573bd8..e5287f11ce 100644 --- a/ApplicationCode/ProjectDataModel/Completions/RimWellPathValve.cpp +++ b/ApplicationCode/ProjectDataModel/Completions/RimWellPathValve.cpp @@ -264,28 +264,39 @@ std::vector> RimWellPathValve::valveSegments() const RimPerforationInterval* perforationInterval = nullptr; this->firstAncestorOrThisOfType( perforationInterval ); - double startMD = this->startMD(); - double endMD = this->endMD(); - - std::vector valveMDs = valveLocations(); - std::vector> 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 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; }