SimPlot: An Analytical Tool for Simulation Post-Processing
Authors: Sandoval R.K. 
Published: December 2007

This paper describes the development of a general purpose program, SimPlot, for processing and plotting reservoir simulation input and output data. The software and interface were written in C++ and are object-oriented. SimPlot was designed by Reservoir Simulation engineers with years of experience and as a result it is widely accepted. A reservoir engineer's needs can be specialized and the availability of analytical tools which meet those needs can affect the outcome of a study. Tools available to assist the engineer vary from simple textual reports to the more elaborate visualization software. However, these tools do not fully address the analysis and manipulation of time dependent results. One difficulty is to mathematically combine data where dependent variables are available from disjoint independent variables, such as different time steps from multiple simulation runs. Other needs are the ability to easily plot any variable against another, the ability to compare the results from multiple simulation runs and the ability to customize the analysis and presentation of data once, then apply the "template" to subsequent simulation runs. SimPlot was designed to overcome these and other problems and has become an invaluable engineering tool. The positive user response has been accompanied with requests to extend SimPlot usage to other engineering programs.

Introduction

The data analysis tools available to the Reservoir Engineer can significantly impact the time required to perform an analysis and even the outcome of the analysis itself. The tools available include hardcopy output, spreadsheets, plots, 2D and 3D visualization software. However, these tools do not adequately address the data analysis needs for time dependent data. This data is usually presented as XY plots and includes data related to individual wells or an entire field. Examples include production and injection rates plotted in time.

Some simulators allow the engineer to specify the desired plots when the job is submitted. Plots are then generated as image files which can be previewed on the screen or sent to a plotter. This approach has several shortcomings. First, if the desired plots are not created simulation runs must be resubmitted to obtain additional plots, and second, the numerical data is not readily available for further analysis. If numerical data is sent to a file the user may move the data to a spreadsheet for further analysis. This however, places the burden of transferring data and generating plots upon the user. Also, it is very cumbersome to mathematically manipulate vectors of data where the independent variables are different. For example, data from separate simulation runs which contain different time steps or combining rates from wells which were tested at different times.

The needs of the Reservoir Engineer also include the ability to plot any variable against another. For example plots of Cumulative Water Injected vs Cumulative Water Produced and Bottom Hole pressure vs Cumulative Injection are useful when identifying trends. Suitable software should allow the user to determine which curves are desired.

During a history match, the user may be interested in plotting a specific set of variables on a regular basis. It is therefore necessary that plot definitions be saved so they may be applied to subsequent runs.

And of course, the software must be easy to use. The SimPlot interface utilizes an objected-oriented style. Users have thusfar readily adopted the style and unanimously appreciate its benefits. SimPlot was written using C++ which supports object-oriented programming while still enabling easy binding to X and Motif.

Preliminary Software Design

Prior to development it was necessary to evaluate the needs of the user. Users continuously provide input relating to desired functionality in any program. The analysis of time dependent simulation data was no exception and the following functionality was requested.

P. 271