This paper describes the design and implementation of a Problem Solving Environment (PSE) for developing parallel reservoir simulators that use multiple fault blocks, multiple physical models and dynamic locally adaptive mesh-refinements. The objective of the PSE is to reduce the complexity of building flexible and efficient parallel reservoir simulators through the use of a high-level programming interface for problem specification and model composition, object-oriented programming abstractions that implement application objects, and distributed dynamic data-management that efficiently supports adaptation and parallelism. This work is presented in two parts. In Part I (SPE 37979), we describe the mathematical formulation and discuss numerical solution techniques, while this Part II paper we address framework and multiprocessing issues.
The primary goal of the new generation of reservoir simulators currently under development is to support realistic, high-resolution reservoir studies with a million or more grid elements on massively parallel computers. Key requirements for these simulators include the ability to handle multiple physical models, generalized well management, multiple fault blocks, and dynamic, locally adaptive mesh-refinements.
In this paper we describe the design and development of a Problem Solving Environment (PSE) for developing parallel reservoir simulators. Our research is motivated by the multi-disciplinary structure of the new generations simulators and the inherent complexity of their implementation. In a typical reservoir simulator on the order of 20,000 lines of code may be required to support a physical model. It is difficult and inefficient for individual researchers to develop such a framework before even beginning to test their ideas for a physical model. Further, a large percentage of this framework which deals with managing adaptively, multiple fault blocks, parallelism, data distribution, and dynamic load-balancing is not directly related to the physical problem and can be reused. Clearly, a common infrastructure that provides computational support and parallel adaptive data-management will result in enormous savings in development and coding effort and will make individual research at universities and commercial labs more efficient. The PSE presented in this papers provides such an infrastructure. Its primary objectives are:
To alleviate the complexity of implementing new reservoir simulators due to parallel data-management, dynamic mesh-refinement, multiple fault blocks, by defining appropriate data-structures, programming abstractions and high-level programming interfaces.
To provide a user interface for problem specification and model composition in the form of keyword input.
To provide a general framework for integrating input/output, visualization, and interactive experimentation with applications computation.
To use the most appropriate language and technology for individual tasks in the PSE. For example, to implement low level data-management in C, to build programming abstractions in an object-oriented language like C++, and to develop computational kernels in FORTRAN.
The PSE design is based on a clean separation of concerns across its functionality and the definition of hierarchical levels of abstraction based on this separation. The overall schematic of the design is shown in Figure 1.
P. 31^