Add "Decline Curves" functionality.

Adapted from formulas here:
https://petrowiki.spe.org/Production_forecasting_decline_curve_analysis
This commit is contained in:
Kristian Bendiksen
2023-04-26 12:31:57 +02:00
parent bc718db7df
commit c8b402651d
16 changed files with 878 additions and 33 deletions

View File

@@ -603,3 +603,25 @@ std::vector<QDateTime> RiaQDateTimeTools::getTimeStepsWithinSelectedRange( const
return selectedTimeSteps;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::set<QDateTime>
RiaQDateTimeTools::createEvenlyDistributedDatesInInterval( const QDateTime& fromTimeStamp, const QDateTime& toTimeStamp, int numDates )
{
if ( numDates < 2 ) return {};
// Calculate the time step between the two time stamps
qint64 timeStep = ( toTimeStamp.toMSecsSinceEpoch() - fromTimeStamp.toMSecsSinceEpoch() ) / ( static_cast<qint64>( numDates ) - 1 );
// Create a set of evenly spaced datetimes.
std::set<QDateTime> outputDates;
for ( int i = 0; i < numDates; ++i )
{
qint64 targetTime = i * timeStep;
outputDates.insert( RiaQDateTimeTools::addMSecs( fromTimeStamp, targetTime ) );
}
return outputDates;
}

View File

@@ -95,6 +95,8 @@ public:
static QList<caf::PdmOptionItemInfo> createOptionItems( const std::vector<time_t>& timeSteps );
static std::set<QDateTime> createEvenlyDistributedDates( const std::vector<QDateTime>& inputDates, int numDates );
static std::set<QDateTime>
createEvenlyDistributedDatesInInterval( const QDateTime& fromTimeStep, const QDateTime& toTimeStep, int numDates );
static std::vector<QDateTime>
getTimeStepsWithinSelectedRange( const std::vector<QDateTime>& timeSteps, const QDateTime& fromTimeStep, const QDateTime& toTimeStep );