MRST - MATLAB Reservoir Simulation Toolbox

Release Notes for MRST 2011a
These are some of the note-worthy new features in MRST 2011a as well as issues you may encounter if you are upgrading from a previous release of the software package (e.g., MRST 2010a).

Since the previous release of MRST (2010a, 12th of March 2010), the software has undergone revision with an eye towards creating a solid foundation for further development as well as making the core features more robust. The developers have made a number of changes to fundamental data structures and algorithms in MRST. We believe that MRST as it exists today has reached a level of maturity needed to support research into numerical methods for porous media flow in settings raging from academic to near industrial complexity.

Please review the Upgrade Notes at the end of this document if you're upgrading from a previous edition of MRST.


This release would not have been possible without the work of the following developers

  • Vera Louise Hauge
  • Stein Krogstad
  • Knut-Andreas Lie
  • Ingeborg Skjelkvåle Ligaarden
  • Jostein R. Natvig
  • Halvor Møll Nilsen

We thank Roland Kaufmann for highlighting the issue of naming collisions when MRST is used in concert with the PDE Toolbox from The MathWorks.

Bård Skaflestad acted as primary release manager for MRST 2011a.

New Developments in MRST 2011a

We would like to point out a number of significant new developments in this release.

  • MRST 2011a brings an initial implementation of capillary pressure effects in both the explicit and implicit solver for incompressible and immiscible two-phase transport problems.

  • MRST 2011a features a new system for independent "add-on" modules. This support is described in some detail in the section Add-on Modules to MRST below.

  • The transport solvers (functions 'explicitTransport' and 'implicitTransport') have been rewritten to implement dynamic upwind mobility weighting in problems involving gravity. Moreover, the new explicit transport solver features a more accurate and less restrictive time-step estimate.

  • Both the explicit and implicit transport solvers are now formulated in terms of a residual and use a common implementation of that residual function (and, in the case of the implicit solver, its Jacobian).

  • The corner-point grid processing function 'processGRDECL' now transparently handles both left-handed and right-handed coordinate systems. This function also has a new option, 'SplitDisconnected', to control whether or not disconnected grid components should be split into separate grid data structures. The default is to split such components.

    Finally, the 'processGRDECL' function now also transparently handles corner-point coordinates (keyword 'ZCORN') that are strictly decreasing along each pillar. In previous releases of MRST, this was an error.

  • A new set of functions to assist in converting input data in a .GRDECL file from a particular unit convention to MRST's strict SI conventions. Function 'getUnitSystem' will create a structure that holds unit conversion factors and function 'convertInputUnits' will apply those factors to the appropriate fields of a 'grdecl' structure created by function 'readGRDECL'.

  • Experimental support for C-accelerated corner-point grid processing and geometry calculation (i.e., replacements for functions 'processGRDECL' and 'computeGeometry'). This has been developed and tested only on the 64-bit Linux platform (MEX type .mexa64). We make no promises on the utility of these facilities on other platforms. This feature is provided on a best effort "as is" basis and is not suitable for production results.

  • A new set of functions to construct and manipulate faults in corner-point descriptions (keywords 'FAULTS' and 'MULTFLT') has been created. Additional details are provided in the documentation of functions 'processFaults', 'removeFltBdryFaces', and 'plotFaults'.

  • A new set of functions, 'speedUpMS' and 'solveIncompFlowMSSpeedUp', to eliminate some of the computational overhead in the current implementation of the MsMFE method.

  • The new function 'plotSlice' provides the ability to display a spatially varying property along a cardinal direction (I,J,K) in a corner-point grid.

  • A new facility for centrally controlling level of diagnostic output, conventionally embodied in a 'verbose' option to many of MRST's functions, has been introduced. Please see the documentation of function 'mrstVerbose' for details.

  • A new function to derive the cells enclosing a sequence of points in two space dimensions. This is useful when placing (vertical) wells in extruded triangle or PEBI grids. See the documentation of function 'findEnclosingCell' for additional details.

  • A number of corrections, updates and additions to the mimetic inner products listed in function 'computeMimeticIP'.

  • Ability to handle transmissibility multipliers in both the two-point and mimetic discretisation methods. The new function 'computeTranMult' can assist in the manipulation of multiplier values given by ECLIPSE input keywords 'MULTX' etc.

  • Corrections to low-level utility functions, including 'rlencode' and 'rldecode', in order to guard against input errors.

Add-on Modules to MRST

The 2011a release of MRST features a new system for add-on modules. At the moment, we define a module as a set of functions and scripts that extends or modifies the existing capabilities of MRST. A module may use all features of the core toolbox and may, optionally, depend on other modules.

Technically, a module is expected to be contained in a directory on the local computer system and the module support is a simple wrapper around MATLAB's search path facility (functions 'path' and 'addpath'). The main controlling gateway to the module system is the new function 'mrstModule'. This function presently supports adding(activating) a set of modules, inspecting the list of currently active modules, and clearing all active modules from MATLAB's search path. We refer the user to the function's documentation for additional details on how to control the module system.

This release of MRST features a few "official" add-on modules that are developed by SINTEF Applied Mathematics, but it is the developers' hope that third parties might consider developing and distributing independent modules for MRST. In any case, it is the intention of SINTEF Applied Mathematics to move to a development model in which the core features of MRST remain a stable and solid foundation and that most new development (new algorithms, methodologies, application domains etc.) happens in the context of modules.

In the first release, to demonstrate feasibility of the system, we distribute the following "official" modules:

  • MPFA (fullfile(ROOTDIR, 'modules', 'mpfa'))

    An implementation of the MPFA-O method for unstructured grids, based on the local-flux mimetic approach. The implementation relies on an accelerator, implemented in C, for one of its core operations (inverting a sequence of small matrices). While it is possible to use the software without the accelerator, we would like to point out that the computational performance will be greatly reduced in that case.

  • MsMFE (fullfile(ROOTDIR, 'modules', 'msmfem'))

    An implementation of the MsMFE method for unstructured grids. This is the solver support that was previously located in the fullfile(ROOTDIR, 'solvers', 'msmfem') directory and features support for coarse-grid generation, local flow-problem solvers (basis functions), coarse-system solvers, and fine-scale flux and pressure reconstruction.

  • Streamline (fullfile(ROOTDIR, 'modules', 'streamlines'))

    An implementation of Pollock's method of streamline tracing on Cartesian and  logically Cartesian grids. May, for instance, be used to visualise flow fields computed by one of MRST's pressure solvers.

  • Upscaling (fullfile(ROOTDIR, 'modules', 'upscaling'))

    An implementation of single-phase flow-based permeability upscaling for Cartesian and logically Cartesian grids.

We will point out, however, that some of the modules, e.g., the MsMFE module which is activated in the default installation, are more mature than others. The modules are distributed on a best effort "as is" basis. Please be advised that programming errors or missing features are more likely in the less mature modules than in MRST's core feature set.

If you encounter a software issue using one of SINTEF Applied Mathematics' official modules, then please do not hesitate to contact the authors, for instance by sending an e-mail to Bård Skaflestad .

Upgrade Notes

The following user-visible changes have been made to existing functions and data structures since the previous release of MRST.

  • The semantics of the fluid relative permeability evaluator function, fluid.relperm, has changed when the evaluator is called with two output parameters.

    To accommodate the new implementation of the implicit transport solver, the derivative of the relative permeability must now be the complete Jacobian matrix at each saturation point. The 'init*Fluid.m' fluid constructors have been updated accordingly, but any third-party fluid implementations will likely need adjustments.

  • The semantics of the 'cells' parameter (parameter 3) to the volume visualisation functions 'plotCellData', 'plotFaceData', and 'plotGrid' has changed. In previous releases of MRST, an empty 'cells' parameter resulted in graphical output being produced for the entirety of the model. Starting from this release, an empty 'cells' parameter means that no graphical output will be created.

  • The coarse-grid data structure created by function 'generateCoarseGrid' was reorganised to present the topological information, notably block-to-interface mapping, in a manner consistent with the fine-scale grid described by 'grid_structure'.

    Note that the coarse-grid data structure does not contain any geometric information (e.g., nodes, normals, centroids or volumes). Suitable approximations can often be constructed using the partition vector and MATLAB's built-in function 'accumarray'.

  • The field 'cells.subCells' of the coarse-grid data structure has been replaced by a copy of the partition vector parameter to function 'generateCoarseGrid'. The effects of 'cells.subCells' can usually be achieved by either indexing with the partition vector or using the 'accumarray' function.

  • The unstructured grid generator functions 'tri2grid' (2D) and 'tet2grid' (3D) were renamed to 'triangleGrid' and 'tetrahedralGrid', respectively. This renaming is required to avoid naming collisions with preexisting functions from the PDE Toolbox published by The MathWorks. Moreover, the order of input parameters to these functions has been reversed in order to support Delaunay triangulation of the node list unless another triangulation is explicitly provided. We refer to the documentation of functions 'triangleGrid' and 'tetrahedralGrid' for additional details.

  • The 'boundaryFaceIndices' function that is used to implement the 'pside' and 'fluxside' boundary condition handlers has been made internal to those functions. No replacement exists.

  • A new function, 'initState', has been added to assist in creating a consistent reservoir state object. This function supersedes the 'initResSol' and 'initWellSol' functions of the previous release and performs more error checking on its input arguments. The 'initResSol' and 'initWellSol' functions will be removed in a future release of MRST. All examples accompanying this release of MRST have been updated to use 'initState'.

  • A number of fluid utilities that were inadvertently distributed as part of the previous release have been removed from this release. In particular, the functions 'dinterpTable', 'interpTable', 'sgfn', 'sgof', 'swfn', and 'swof' have been removed. Much of the features of these functions can be obtained using the new function 'tabulatedSatFunc'.

Published February 22, 2011