Gaining full understanding of the mass of uncertain variables and the range of objectives in a reservoir simulation model requires multiple realization workflows. At Ridgeway Kite we regard the need for a comprehensive multiple realization capability as a fundamental requirement in a simulator. Hence in 6X this is not a separate module/application or an “optional extra” that may also require a multitude of software licenses to run effectively. It is an integral part of the core system.
The current practice of reservoir simulation is as much about understanding the implication of what you don’t know, as it is about understanding the importance of what you do know. One approach enhances confidence in the predictive application of the model by calibrating it using a history matching process. The other seeks to quantify the impact of the inherent uncertainties in terms of sensitivity analysis of uncertain parameters to an objective.
Both approaches require multiple realizations of the model to be run in as short a time as possible in order to converge on a history match, or to understand the impact and range of uncertainties.
Modern computing clusters make the use of multiple realization workflows practical from a raw compute perspective. However, running thousands of simulation cases using a traditional simulator, designed originally for serial operation, will create a large number of output files that need further processing to generate useful results or insights. This processing step is still largely done in an ad hoc manner in many current simulators, often in serial, and hence limits the applications as well as failing to utilize the performance available with the cluster.
The Tornado chart above illustrates the relative sensitivity of multiple variables on the total oil in place
By uniquely implementing a multiple realization engine within 6X, using modern parallel techniques, Ridgeway Kite provides a step change in the usability, reliability, consistency and performance of these workflows in a fully integrated environment.
6X offers the following Multiple Realization capabilities:
-
-
- Sensitivities & Monte Carlo
- Experimental Design
- History Matching
- Development Optimization
- Well Placement Optimization
- Optimization under Uncertainty
- Objective Function Evaluation
- Probabilistic Multiple Solutions
- Uncertainty Quantification (Forecasting)
-
Sensitivities & Monte Carlo
Study the sensitivity of a model to uncertain variables. The user can define either an individual, combination or Monte Carlo set of runs. There are options to:
-
-
- Create a response surface (of all or a selected set of summary vectors)
- Output statistics from the response surface
- Output statistics from the simulation runs
- Create Tornado, variable sensitivity and distribution plots
-
Evaluation of the sensitivity of total production and its range against a series of variables
Experimental Design
Establish cause-and-effect relationships between the model uncertainties and the simulation results. The following Experimental Designs have been implemented:
-
-
- Full Factorial (L2 & L3)
- Orthogonal Vectors
- Central Composite
- Plackett-Burman
- Box-Behnken
- Latin Hypercube
-
The same options for creating response surfaces, etc. are available.
The use of a proxy model with results from a small number of simulations to show a statistical sample of probable total production.
History Matching
Match a simulation model to a set of observed pressure, volume or rate data. The user defines a history match objective function and an optimizer. The starting point of a history match is an Experimental Design. 6X has two optimizers: Kriging Genetic Algorithm; and, Estimation of Distribution Algorithm (Equal Width). The optimizers generate a set of additional runs to be performed at each iteration (loop). There are options to:
-
-
- Choose from a standard set of match quality components: volumes, rates, and pressures
- Select the type of the error terms: signed, absolute, and SQRT
- Create complex match quality definition by including scripting variables and defining custom match components
- Include an Investigation phase (before the Optimizer) where an additional set of runs are generated via an Artificial Neural Network or Kriging
- Stop and control the Optimizer by setting the maximum number of loops, the number or runs at each loop, the elapsed time and a tolerance
- Output the results to HTML, CSV and/or Excel files
- Keep the N best runs overall or per loop
-
The above figure shows the reduction of the objective function during a history match run.
Development Optimization
Similarly, for Development Optimization, the user defines a development optimization objective function and an optimizer. The development optimization objective function can be more complex than a history match objective function as it includes financial variables, such as CAPEX & OPEX costs, as well as price details.
The starting point of a development optimization is an Experimental Design. 6X has two optimizers: Kriging Genetic Algorithm; and, Estimation of Distribution Algorithm (Equal Width). The optimizers generate a set of additional runs to be performed at each iteration (loop). There are options to:
-
-
- Choose from a standard set of objective function types:
-
- DP: discounted/undiscounted production volume
- RF: Recovery factor
- NPV: Net Present Value
- IRR: Internal rate of return
- MAXEXP: Maximum exposure (maximum negative cashflow)
- PAYBACK: the payback period
-
- Create complex objective functions by including scripting variables in the functions
- Perform optimisation under uncertainty, in which, the objective function is calculated from the objective function’s response surface across a set of subsurface models
- Include an Investigation phase (before the Optimizer) where an additional set of runs are generated via an Artificial Neural Network or Kriging
- Stop and control the Optimizer by setting the maximum number of loops, the number or runs at each loop, the elapsed time and a tolerance
- Output the results to HTML, CSV and/or Excel files
- Keep the N best runs overall or per loop
- Choose from a standard set of objective function types:
-
The results from each simulation in maximizing production showing the best net resent value
Objective Function Evaluation
Evaluate a pre-defined objective function on a set of simulation cases. The user defines either a history match objective function or a development optimization objective function. There are options to:
-
-
- Evaluate the objective function for a set of cases from either a sensitivity or Experimental Design, a set of parameter values entered in the variable definition line or from a file, or from a base case deck with no variables
- Choose from a history matching or optimization type objective function (as discussed above)
- Create a response surface of the objective function
- Output statistics from the response surface
- Output the results to HTML, CSV and/or Excel files
-
Probabilistic Multiple Solutions
Perform clustering on cases obtained in a History Match or Development Optimization and select a set of distinctive cases from the clusters. The selected cases from history matching can be used in optimization under uncertainty and the selected cases from development optimization can be used as multiple development scenarios. There are options to:
-
-
- Define the kriging model
- Define the clustering method, e.g. the number of clusters and what case to choose from each cluster (best case or centroid )
- Forward simulate the centroid cases
- Output the results to HTML, CSV and/or Excel files
-
Uncertainty Quantification (Forecasting)
Perform forecasting on a set of cases defined by an Experimental Design or Sensitivity study. From a calculated response surface more runs are generated and the results of these runs can be used to improve the response surface until convergence to a tolerance. Distributions and statistics can then be obtained from the resulting response surface. There are options to:
-
-
- Define a response parameter from one or multiple mnemonics, well names and report dates in simulation results
- Use Linux wild cards for matching mnemonics, group and well names, and dates
- Select the type of the error terms: signed, absolute, and SQRT
- Choose from maximum, average or standard deviation aggregation type of error for runs in a loop
- Stop the iteration by setting the maximum number of loops and a tolerance for error
- Output cumulative selected percentiles and full probability distribution for response parameters
- Output the results to HTML, CSV and/or Excel files
-
Chart of cumulative probability distribution highlighting range for P10, P50, P90 production totals