A parallel reservoir simulation system is described. The basic algorithm allows masses or saturations to be used to define the state of the reservoir. The parallel structure and the way in which data is moved for computation and input/output is described. For good parallel performance the workload needs to be balanced between the processors when the simulation is running. However, in most practical cases the majority of cells are inactive, inactive cells being identified during the preliminary grid calculations. These also need to be distributed, to avoid a memory peak which would limit the maximum problem size. A method for re-factoring the simulation between the processors to avoid this is detailed.

The need to use modern object-orientated coding methods and obtain good numerical performance in parallel processors leads to the use of C++ and MPI for the core solver. A simple class structure which has proved effective for simulation code development is described.

For the supporting system there are requirements of portability and efficiency. Portability because simulation data is normally prepared and viewed on a different machine from that on which the simulation is run. Efficiency is important in the transfer of data between machines and when displaying large models in three dimensions. A Java based code has proved highly effective in meeting these requirements.

Traditionally, simulator input has taken the form of a keyword orientated text file. Modern users expect a more visual interface to their data. A system is described which combines the virtues of both approaches, being based on a set of tables and grid arrays. Data may entered and viewed flexibly, but the advantages of a formatted file are retained. Problems of the migration of legacy data to such new systems are considered, with possible solutions.

You can access this article if you purchase or spend a download.