Module structure

Each repository on GitHub is considered a separate module. The dependency relations between them are not completely trivial, and change over time.

The figure below shows the current module structure. Since the 2022.10 release, the opm-material module was folded into and merged with opm-common.


Releases 2019.10–2022.10

After the 2019.04 release, the ewoms module was renamed opm-models.


Release 2018.04, 2018.10 and 2019.04

After the 2017.10 release the opm-core module was removed, and the modules opm-parser and opm-output were folded into opm-common.

Release 2017.04 and 2017.10

The figure below shows the situation for the releases in 2017.

The modules with dependencies, 2017.04 and 2017.10

There are two changes since the previous release, namely that opm-simulators now depend on ewoms, and that opm-core now depends on opm-grid instead of the other way around.

Release 2016.10

The figure below shows the situation for release 2016.10.

The modules with dependencies as of release 2016.10

The most important change since the release before is that opm-output no longer depends on opm-core, in fact the opposite is true: opm-core now depends on opm-output.

Release 2016.04

The figure below shows the situation for release 2016.04.

The modules with dependencies as of release 2016.04

Module descriptions

The current set of modules are:

  • opm-common
    Contains the OPM build system (CMake modules and scripts), as well as some basic, common C++ code (error macros, logging facilities and minor utilities). Also contains two major features:

    • Eclipse deck parser (formerly in the separate module opm-parser)
      Reading industry-standard reservoir simulation input decks (Eclipse format), including complex schedules, as well as multipliers and modifiers.
    • Eclipse binary format I/O (formerly in the separate module opm-output)
      Facilities for creating output in various formats from simulator programs, in particular Eclipse summary and restart files.
  • opm-material
    Saturation and PVT functions.
  • opm-grid
    Contains CpGrid, a corner-point grid class, and PolyhedralGrid, a grid class for general polyhedral unstructured grids. Both using the Dune grid interface. Also now contains the UnstructuredGrid C struct and associated functions, functions for processing corner-point grids, the GridManager class and other grid utilities.
  • ewoms
    Toolbox containing  a wide variety of simulators for porous media problems using (mostly) fully implicit formulations, including some compositional models. Notably contains the discretization and assembly used by Flow.
  • opm-simulators
    The Flow reservoir simulator is in this module. Also contains various support classes for simulator codes such as well treatment. Contains a library for automatic differentiation using the “vector + sparse matrix” approach  (the AutoDiffBlock class), and solvers for various problems: IMPES, two-phase incompressible transport, reordering-based two-phase polymer solver, and fully implicit black-oil.
  • opm-upscaling
    (Now includes what used to be in opm-porsol.) Various utilities and solvers used for flow-based upscaling of both permeability (single-phase upscaling) and relative permeability (two-phase upscaling), including capability for steady-state upscaling.