Installation Instructions
=========================

This file describes how to compile and install eWoms. In this context
it is useful to keep in mind that eWoms is implemented as a DUNE
module, i.e., the generic build instructions for DUNE modules
apply [4].

Prerequisites
-------------

The OPM software stack -- and by extension eWoms -- is firmly target
at the Linux platform and requires a relatively recent C++
compiler. Thus, be aware that even though you are encouraged to try to
build and run the software on other platforms, your mileage may vary
considerably in that case.

In order to compile eWoms, you first need to install the following OPM
and DUNE modules:

  - opm-material        from [2]
  - dune-common         from [0]
  - dune-geometry       from [0]
  - dune-grid           from [0]
  - dune-istl           from [0]

To use the ECL Black-Oil Simulator (ebos), the following dependencies
are also required:

  - libecl              from [6]
  - opm-common          from [2]
  - opm-grid            from [2]

For vertex-centered finite volume discretization schemes, the
dune-localfunctions DUNE module is needed in addition [0].

If you want to use the latest eWoms development version, the newest
release of the DUNE prerequisites usually works best, for the OPM
prerequisites, current revisions of the master branches need to be
used.

Note: Many Linux distributions ship DUNE packages. For reasonably
current distributions, these packages can be used as an alternative to
installing DUNE manually [1].

Building
--------

Instructions for building eWoms using the common OPM build system can
be found on the OPM web page [1]. If you encounter problems, please
report them on github [0], or try to build eWoms using the alternative
mechanism described below.

Installing
----------

If you are not interested in modifying eWoms, you can optionally
install it globally on your system. This can be done using

  cd $EWOMS_SOURCE_DIR/build-cmake
  sudo make install

You can specify the target directory for the installation process by
adding -DCMAKE_INSTALL_PREFIX=$TARGET_DIR to the flags passed to the
`cmake` command.


Getting started
===============

Once the compilation is done, the produced executables can be found in
the directory $EWOMS_SOURCE_DIR/build-cmake/bin. To use them, it is
usually sufficient to simply run the binary of interest from the
command line without any arguments. For example, to run the simulator
for the two-dimensional 'lens' problem that utilizes a multi-phase
model which assumes immiscibility of the fluid phases in conjunction
with the element-centered finite volume discretization and automatic
differentiation, type

  cd $EWOMS_SOURCE_DIR/build-cmake
  ./bin/lens_immiscible_ecfv_ad

This produces a sequence of VTK files which can be visualized using,
for example, ParaView [5]:

  paraview --data=lens_immiscible_ecfv_ad.pvd

You may also specify command line parameters to alter the behavior of
the simulation. The list of recognized parameters and their
descriptions can usually be obtained via the '--help' command line
argument, e.g.,

  cd $EWOMS_SOURCE_DIR/build-cmake
  ./bin/lens_immiscible_ecfv_ad --help

Alternative build system
========================

An experimental way to build eWoms using the DUNE build system is
provided via the opm-dune-cmake module [3]. In the following, it is
assumed that the clone of opm-dune-cmake is located next to the source
directories of all OPM and DUNE modules.

Using opm-dune-cmake, eWoms can be compiled by following the generic
installation procedure for DUNE modules [4]. For your convenience, the
eWoms source tree ships with a few ready-made option files for
dunecontrol. These files can be found on the topmost directory of the
eWoms clone and exhibit the '.opts' extension. It is advisable to
adapt these to your particular needs before you start the build.

After the prerequisites have been dealt with, you can compile eWoms
using

  cd $EWOMS_SOURCE_DIR/..
  $PATH_TO_DUNECONTROL/dunecontrol --opts=$EWOMS_SOURCE_DIR/optim.opts --module=ewoms all

Depending on the dunecontrol option file used, the test simulators are
not compiled by default in order to speed up the build process. If you
want to force a given test simulator to be compiled, use e.g.,

  cd $EWOMS_SOURCE_DIR/build-cmake
  make lens_immiscible_ecfv_ad

to compile the `lens_immiscible_ecfv_ad` executable. Compiling all
available tests can be achieved via

  cd $EWOMS_SOURCE_DIR/build-cmake
  make build_tests


Links
=====

[0] https://dune-project.org/releases/
[1] http://opm-project.org/?page_id=36
[2] https://github.com/OPM
[3] https://github.com/dr-robertk/opm-dune-cmake
[4] https://dune-project.org/doc/installation/
[5] https://paraview.org/
[6] https://github.com/Statoil/libecl