DCA Analysis: Optimizing Hyperbolic Decline Models

Anthony Jimenez
18 August 2021
http://www.fa-jimenez.com/

This data is sourced from the Society of Petroleum Engineers Data Repository as part of the SPE Bleeding Edge of RTA Group (SPE-BERG).

SPE Data Repository: Data Set: dataset_1, Well Number: all_wells. From URL: https://www.spe.org/datasets/dataset_1/csv_files/dataset_1_all_wells/production_data

Import necessary libraries

Load, review, and filter production data

Steps accomplished in this section:

Analysis will be conducted on the LORIKEET well since this has 4031 days of production (DOP)

Generate overview plots for the well data

Hyperbolic decline primer

One of the most widely used decline models currently is the hyperbolic decline.

Outlined by J.J. Arps, the general form of the hyperbolic decline is:

$$q(t) = \frac{q_i}{(1 + b D_i t)^{1/b}}$$

The components of the decline model are:

Determining an initial guess for optimization in the decline model

Although we will ultimately use a scipy.optimize package to evaluate the decline model, we want to know how we should bound our model so the optimizer will have the greatest chance of being successful.

This next sections is where I was testing a few different values, however for brevity, I will only show two options that I tried.

Leveraging differential evolution for finding global minimum

From the scipy.optimize package, we will use the differential evolution algorithm for finding the global minimum. To do so however, we need an objective function that we aim to minimize.

The strategy we will employ will take into account the following two measures:

The eggholder function will be defined whose sole purpose is to test the different optimized variables and return the mean squared error. The return of the eggholder function is defined as follows:

$$MSE_{total} = MSE_{daily} + MSE_{cumulative}$$

where,

$$MSE = \frac{1}{n} \sum_{i=1}^{n} (q_{model, i} - q_{data, i})^2$$

Visualize the results

To review our models, we replicate the 4 plots from above but now with all the models.

From personal analysis, there was a tendency to want to select an initial producion volume value near 12 MMscf/d, but the scipy optimized value is reduced closer to 7 MMscf/d.

If being used in company evaluations, should there be a desire for a higher initial production value, the bounds that are fed to the optimizer can be adjusted.

In future works, we can also use some of the other optimization packages from scipy like: