README.md 21.6 KB
Newer Older
1
# DORiE
2
(**D**UNE-**O**perated **Ri**chards equation solving **E**nvironment)
Dion Haefner's avatar
Dion Haefner committed
3

Lukas Riedel's avatar
Lukas Riedel committed
4 5 6 7 8
DORiE is a software package for solving the Richards equation coupled with the
passive transport equation. The core feature is a C++ PDE-solver powered by
[DUNE](https://dune-project.org/) and especially the
[DUNE-PDELab](https://dune-project.org/modules/dune-pdelab/) module.

9 10 11 12
Just getting started? Use the
[Cook Book](https://hermes.iup.uni-heidelberg.de/dorie_doc/master/html/cookbook/index.html)
in the User Manual to dive right in!

Lukas Riedel's avatar
Lukas Riedel committed
13 14 15 16 17
### Contents of this README

* [Overview](#overview)
* [Installation](#installation-instructions)
    * [Docker Image](#download-docker-image)
18
    * [Dependencies](#dependencies)
Lukas Riedel's avatar
Lukas Riedel committed
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
    * [Manual Installation](#manual-installation)
    * [Recommended Tools](#recommended-third-party-software)
* [Documentation](#documentation)
* [Usage](#usage)
* [Troubleshooting](#troubleshooting)

---

## Overview

DORiE offers a variety of solver and discretization solutions. The passive
transport module is optional. For both modules independently, users may choose
finite volume (FV) or discontinuous Galerkin (DG) discretizations. The latter
may be used on unstructured grids and can take advantage of adaptive local grid
refinement.

The C++ routines are accompanied by various tools for program setup,
program testing, and output analysis, which are mostly written in Python.

DORiE is developed and maintained by the
[DORiE Developers](mailto:dorieteam@iup.uni-heidelberg.de) of the
[TS-CCEES](http://ts.iup.uni-heidelberg.de/) research group at the
[Institute of Environmental Physics (IUP) Heidelberg](http://www.iup.uni-heidelberg.de/),
supervised by
[Kurt Roth](http://ts.iup.uni-heidelberg.de/people/prof-dr-kurt-roth/),
in collaboration with
[Ole Klein](https://conan.iwr.uni-heidelberg.de/people/oklein/) and the
[Scientific Computing Group](https://conan.iwr.uni-heidelberg.de/) of the
[Interdisciplinary Center for Scientific Computing (IWR) Heidelberg](https://typo.iwr.uni-heidelberg.de/home/).

DORiE is free software and licensed under the
50
[GNU General Public License Version 3](https://www.gnu.org/licenses/gpl-3.0.en.html).
51
For the copyright notice and the list of copyright holders,
Lukas Riedel's avatar
Lukas Riedel committed
52 53 54 55
see [`COPYING.md`](COPYING.md).

Contributions to the project are always welcome! Please notice our
[Contribution Guidelines](CONTRIBUTING.md).
56

Lukas Riedel's avatar
Lukas Riedel committed
57
## Installation Instructions
58

Lukas Riedel's avatar
Lukas Riedel committed
59 60 61 62
DORiE is a [DUNE](https://dune-project.org/) module and requires several other
DUNE modules as well as third party software packages. Installation can be
handled manually on your local machine, but we recommend using a pre-compiled
image for the deployment software [Docker](https://www.docker.com/) to
63 64
inexperienced users instead. Docker can also be used to create a development
environment without installing the dependencies on the host machine.
65

Lukas Riedel's avatar
Lukas Riedel committed
66
### Download Docker Image
67

Lukas Riedel's avatar
Lukas Riedel committed
68 69
No installation is necessary if you download DORiE as Docker image from
[Docker Hub](https://hub.docker.com/r/dorie/dorie/).
70

Lukas Riedel's avatar
Lukas Riedel committed
71 72 73
If you want to use any stable version of DORiE, or the most recent unstable
version, you can download the appropriate images from Docker Hub. To do so,
execute
74

Lukas Riedel's avatar
Lukas Riedel committed
75
    docker pull dorie/dorie[:<tag>]
76

Lukas Riedel's avatar
Lukas Riedel committed
77 78
Omitting the tag information downloads the image with tag `latest` which
refers to the latest stable version. You can download any tag by specifying
Lukas Riedel's avatar
Lukas Riedel committed
79 80 81 82
`<tag>`. The list of
[available tags](https://hub.docker.com/r/dorie/dorie/tags) can be found on
Docker Hub and matches the release tags list of the Git repository. The latest
unstable version is tagged as `devel`.
83

Lukas Riedel's avatar
Lukas Riedel committed
84 85 86 87
You can then proceed directly to the the instructions on
[how to execute DORiE](#running-dorie). The commands listed there are appended
to the usual commands for running a Docker container. See the description on
Docker Hub for further details.
Dion Haefner's avatar
Dion Haefner committed
88

89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
#### Use Docker for Development

An intermediate solution for creating a development environment without
installing all dependencies is using the
[DUNE environment Docker image](https://hub.docker.com/r/dorie/dune-env) of
DORiE. It is based on a Ubuntu image and contains all dependencies of DORiE.
Developers can clone the DORiE source code onto their host system, modify it
there and then mount the directory into the Docker image to compile the program.
To start a container from the image with the local `<dorie_dir>` mounted,
execute

    docker run -it -v <dorie_dir>:/opt/dune/ dorie/dune-env:<tag>

Inside the container, you can then execute the `dunecontrol` script as explained
in the installation instructions further below.

105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
### Dependencies

Depending on your system configuration, there will be more packages necessary to
install DORiE on your machine. See the step-by-step manual for further details.
The specified versions are the _supported_ ones, where compatibility is ensured
by CI tests.

#### DUNE Packages

| Software | Version/Branch | Comments |
| ---------| -------------- | -------- |
| [dune-common](https://gitlab.dune-project.org/core/dune-common) | releases/2.6
| [dune-geometry](https://gitlab.dune-project.org/core/dune-geometry) | releases/2.6
| [dune-grid](https://gitlab.dune-project.org/core/dune-grid) | releases/2.6
| [dune-uggrid](https://gitlab.dune-project.org/staging/dune-uggrid) | releases/2.6
| [dune-istl](https://gitlab.dune-project.org/core/dune-istl) | releases/2.6
| [dune-localfunctions](https://gitlab.dune-project.org/core/dune-localfunctions) | releases/2.6
| [dune-functions](https://gitlab.dune-project.org/staging/dune-functions) | releases/2.6
| [dune-typetree](https://gitlab.dune-project.org/staging/dune-typetree) | releases/2.6
| [dune-pdelab](https://gitlab.dune-project.org/pdelab/dune-pdelab) | releases/2.6
| [dune-randomfield](https://gitlab.dune-project.org/oklein/dune-randomfield) | releases/2.6
| [dune-testtools](https://gitlab.dune-project.org/quality/dune-testtools) | releases/2.6 | *Optional:* For system tests

#### DUNE Requirements

| Software | Version/Branch | Comments |
| ---------| -------------- | -------- |
132 133
| CMake | 3.16 |
| GCC | 9.3 | Alternatively: LLVM Clang 10, or Apple Clang 11
134 135
| git |
| pkg-config |
136 137 138 139
| FFTW3 | 3.3.8 | MPI support required
| Python | 3.8 |
| pip | 20 |
| MPI | | Tested with OpenMPI 4.0.3
140
| SuperLU | 5.2 |
141
| OpenGL | 1.3 | Or another GL implementation compatible with VTK 9
142 143 144 145 146 147 148 149

#### DORiE Requirements

| Software | Version/Branch | Comments |
| ---------| -------------- | -------- |
| [HDF5](https://www.hdfgroup.org/solutions/hdf5/) | 1.10 | MPI support required
| [yaml-cpp](https://github.com/jbeder/yaml-cpp) | >= 5.2.0 |
| [muparser](http://beltoforion.de/article.php?a=muparser) | master |
150
| [spdlog](https://github.com/gabime/spdlog) | >= 1.0 |
151 152 153 154 155 156
| [Google Test](https://github.com/google/googletest) | `HEAD` | Included as Git Submodule

#### Optional Packages

| Software | Version/Branch | Comments |
| -------- | -------------- | -------- |
157
| [doxygen](http://www.stack.nl/~dimitri/doxygen/) | 1.8.17 | Builds documentation
158 159 160
| [METIS](http://glaros.dtc.umn.edu/gkhome/views/metis) | 5 | For parallel runs
| [ParMETIS](http://glaros.dtc.umn.edu/gkhome/views/metis) | 4 | For parallel runs

Lukas Riedel's avatar
Lukas Riedel committed
161
### Manual Installation
162

Lukas Riedel's avatar
Lukas Riedel committed
163 164 165
Installing all packages manually can be quite an effort, but useful for
developers who want to have easy access to the source files or users who prefer
to run DORiE without the Docker overhead.
Dion Häfner's avatar
Dion Häfner committed
166

Lukas Riedel's avatar
Lukas Riedel committed
167 168 169 170
Whenever possible, dependencies should be installed using a package manager
like [APT](https://wiki.ubuntuusers.de/APT/) on Ubuntu or
[Homebrew](http://brew.sh/) on Mac. Manual installation on a Windows
environment is not supported!
171

172 173 174 175
DORiE is configured, built, and installed via the
[DUNE Buildsystem](https://dune-project.org/doc/installation/), using the
`dunecontrol` script to handle DUNE-internal dependencies.

Lukas Riedel's avatar
Lukas Riedel committed
176
#### Step-by-step Instructions
Lukas Riedel's avatar
Lukas Riedel committed
177 178 179 180 181 182
These instructions are suitable for a clean **Ubuntu** or **macOS** setup.
The main difference between the two systems is the package manager.
Debian-based systems have the APT manager already built in. On Mac, we
recommend installing [Homebrew](http://brew.sh/). If you prefer to use
[MacPorts](https://www.macports.org/), notice that packages will need to be
installed differently than indicated here.
183

184 185 186
Manual installations on macOS require installing HDF5 from source. This can
be tricky, but the following instructions should work on a clean system.

Lukas Riedel's avatar
Lukas Riedel committed
187 188 189 190
If you installed [Anaconda](https://conda.io/docs/user-guide/install/download.html)
on your machine, you don't need to install Python or Pip. Simply skip these
packages when using the package managers for installing the software. However,
notice the warnings when compiling DORiE below!
191

Lukas Riedel's avatar
Lukas Riedel committed
192 193
1. **macOS** users need to start by installing the Apple Command Line Tools by
    executing
194 195

        xcode-select --install
196

Lukas Riedel's avatar
Lukas Riedel committed
197 198
    Make sure you have no pending software updates for your respective version
    of macOS!
Dion Haefner's avatar
Dion Haefner committed
199

Lukas Riedel's avatar
Lukas Riedel committed
200
2. Install third party packages:
Lukas Riedel's avatar
Lukas Riedel committed
201

202
    **Ubuntu:**
Lukas Riedel's avatar
Lukas Riedel committed
203 204

        apt update
Lukas Riedel's avatar
Lukas Riedel committed
205
        apt install cmake doxygen gcc g++ gfortran \
Dion Haefner's avatar
Dion Haefner committed
206
                    git libatlas-base-dev libfftw3-dev libfftw3-mpi-dev \
207 208 209
                    libfreetype6-dev libgl-dev libhdf5-mpi-dev libmuparser-dev \
                    libopenmpi-dev libpng-dev libspdlog-dev libsuperlu-dev \
                    libyaml-cpp-dev libxft-dev python3-dev python3-pip
210

Lukas Riedel's avatar
Lukas Riedel committed
211
    **macOS:**
212 213

        brew update
214
        brew install cmake doxygen fftw gcc libpng open-mpi muparser \
215
                     pkg-config python3 spdlog superlu yaml-cpp
216

217
3. **macOS only:** Install HDF5 with MPI support from source.
218 219 220 221 222

    1. Download an archive of the
    [HDF5 source code](https://www.hdfgroup.org/downloads/hdf5/source-code/),
    and extract it.

223
    1. Enter the extracted folder. In there, create a `build` directory, and
224 225 226 227
    enter it:

            mkdir build && cd build

228
    1. Configure your build. If you followed the instructions above, the
229 230 231 232 233 234 235 236
    OpenMPI C compiler is reachable via the command `mpicc`. If not, you have
    to specify a full path to it. Use the option `prefix` to specify where
    you want the package to be installed. This should *not* be a
    system-reserved path like `/usr/local`, and *not* be located in a
    sub-directory of the source code. Execute the configuration script:

            ./../configure CC=mpicc --prefix=<hdf5-path> --enable-parallel

237
    1. Build and install the library:
238 239 240

            make && make install

241
4. The parallel linear solver of DORiE can make use of the ParMETIS package.
Lukas Riedel's avatar
Lukas Riedel committed
242 243
    If you want to run DORiE in parallel on multiple processes, additionally
    install METIS and ParMETIS:
Lukas Riedel's avatar
Lukas Riedel committed
244 245 246

    **Ubuntu:**

247
        apt install libmetis-dev libparmetis-dev
Lukas Riedel's avatar
Lukas Riedel committed
248

Lukas Riedel's avatar
Lukas Riedel committed
249 250
    **macOS:** _Support is dropped because ParMETIS is currently unavailable
    from Homebrew._
Lukas Riedel's avatar
Lukas Riedel committed
251 252 253

    **Parallel runs without these two packages are possible but not supported!**

254
5. Create a directory for all your DUNE modules, including DORiE. If you already
255 256 257
   cloned DORiE somewhere else, move the cloned folder into the DUNE module
   directory.

258
6. Clone the [DUNE modules](#dune-Packages) into the DUNE module directory. Use
259 260 261 262
   `git checkout` to switch to the correct branches. We provide a bash script
   which clones all required repositories and checks out the correct branches
   into the directory it is executed from. Move into the DUNE module folder and
   execute it:
263

264
        bash dorie/clone_dune
265

266
7. Make sure the DORiE repository is correctly set up. DORiE includes
267 268 269 270
   [Git Submodules](https://git-scm.com/book/en/v2/Git-Tools-Submodules),
   which are only downloaded if you add the `--recurse-submodules` option to the
   `git clone` command. To make sure the submodules are cloned and checked out,
   enter the DORiE repository and execute
271

272
        git submodule init && git submodule update
273

274
8. Enter the DUNE module directory, and call
275 276

        ./dune-common/bin/dunecontrol --opts=dorie/build.opts all
277

Lukas Riedel's avatar
Lukas Riedel committed
278 279
    to build all DUNE modules. Additionally, you can add `MAKE_FLAGS="-j X"`
    to the command in order to compile on `X` processes in parallel.
280

281 282 283 284 285 286 287 288
    The `build.opts` file in this repository contains required and useful CMake
    variable settings for a build of DORiE. If you installed software into paths
    not appended to your `PATH` variable, you will have to add more
    `CMAKE_FLAGS` in the options file to make sure that CMake finds all
    packages. If `<Package>_ROOT` variables suffice, you can simply prepend them
    before the `dunecontrol` command. See the
    [Dune Installation Docs](https://www.dune-project.org/doc/installation/) for
    further information.
289

Lukas Riedel's avatar
Lukas Riedel committed
290
    If you installed HDF5 from source (all **macOS** users) or use Anaconda,
291
    specify the path to your HDF5 installation by using the `HDF5_ROOT`
292
    environment variable. On Ubuntu, prepend the path to the APT package,
293

294
        HDF5_ROOT=/usr/
295

296
    and on macOS, prepend
297

298
        HDF5_ROOT=<hdf5-path>
299

300 301 302 303
    in the `dunecontrol` command above, replacing `<hdf5-path>` with the
    path chosen as installation prefix when configuring HDF5. Alternatively,
    `export` these paths in your shell before calling `dunecontrol`, or add
    them as CMake variables (with prefix `-D`) to the repository options file.
304

Lukas Riedel's avatar
Lukas Riedel committed
305
### Recommended Third-Party Software
306

Lukas Riedel's avatar
Lukas Riedel committed
307 308
The following software packages are cross-platform, so you should be able to
find a release that fits your operating system:
Dion Haefner's avatar
Dion Haefner committed
309

Lukas Riedel's avatar
Lukas Riedel committed
310 311 312 313
* [ParaView](http://www.paraview.org/): A powerful post-processing tool for VTK
    files. Offers both visualization and data analysis tools.
* [Gmsh](http://gmsh.info/): An open-source CAD that can be used to create the
    `.msh` files used by DORiE to define unstructured meshes.
Dion Haefner's avatar
Dion Haefner committed
314

Lukas Riedel's avatar
Lukas Riedel committed
315 316 317 318 319 320 321 322 323 324 325
## Documentation

The documentation of DORiE is twofold. The Sphinx documentation contains a
manual with guidelines and tutorials for users of the compiled software
package. The Doxygen documentation of the C++ source code is intended for
developers only and explains the inner workings of the software.

Both parts of the documentation are deployed to our documentation server for
every branch pushed to the main repository. You will find the latest
[user manual](https://hermes.iup.uni-heidelberg.de/dorie_doc/master/html/) and
[C++ code documentation](https://hermes.iup.uni-heidelberg.de/dorie_doc/master/doxygen/html/)
326 327
there. The documentation for other branches can be accessed via the
[overview page](https://hermes.iup.uni-heidelberg.de/dorie_doc/).
Dion Haefner's avatar
Dion Haefner committed
328

329 330
The documentation can also be built locally after DORiE has been properly
configured following the step-by-step instructions above. To build the
Lukas Riedel's avatar
Lukas Riedel committed
331
documentation, move to the `dorie/build-cmake` directory and simply run
Lukas Riedel's avatar
Lukas Riedel committed
332 333 334

    make doc

Lukas Riedel's avatar
Lukas Riedel committed
335 336 337
You will then find the index page of the Sphinx user documentation at
`dorie/build-cmake/doc/html/index.html` and the index page of the Doxygen
source code documentation at `dorie/build-cmake/doc/doxygen/html/index.html`.
Dion Haefner's avatar
Dion Haefner committed
338

Lukas Riedel's avatar
Lukas Riedel committed
339 340 341
## Usage

DORiE provides a command line interface (CLI) for all its user functions.
Lukas Riedel's avatar
Lukas Riedel committed
342
The required Python modules and all their dependencies are readily installed
Lukas Riedel's avatar
Lukas Riedel committed
343
into a Python virtual environment (`venv`), which has to be activated within a
Lukas Riedel's avatar
Lukas Riedel committed
344 345
shell session. You can do so by activating it in your current session
(Manual Installation only) or by running the Docker application.
346

Lukas Riedel's avatar
Lukas Riedel committed
347 348 349
### Run the `venv` using the Docker application
If you did not install DORiE locally, you can use the Docker application to
boot up the virtual environment in a mounted directory of your choice.
350

Lukas Riedel's avatar
Lukas Riedel committed
351
Start up the Docker application by calling
Lukas Riedel's avatar
Lukas Riedel committed
352

Lukas Riedel's avatar
Lukas Riedel committed
353
    docker run -it -v <dir>:/mnt <img>
354

Lukas Riedel's avatar
Lukas Riedel committed
355
where you replace `<dir>` with a local directory for storing input and output
Lukas Riedel's avatar
Lukas Riedel committed
356 357 358
data, and `<img>` with `dorie/dorie[:<tag>]`. We recommend moving into the
designated input and output directory on your local machine and inserting
`$PWD` as `<dir>` to mount the current directory into the container.
359

Lukas Riedel's avatar
Lukas Riedel committed
360 361 362 363
The command boots up a (`bash`) shell inside a Docker container and mounts
the directory `<dir>` and all its subdirectories into the directory `/mnt`
inside the container. Your shell session starts in this directory with the
virtual environment activated.
364

Lukas Riedel's avatar
Lukas Riedel committed
365 366
Notice, that you can only use **local file paths** in all configuration
settings due to the directory mount.
367

Lukas Riedel's avatar
Lukas Riedel committed
368
### Activate the `venv` locally
Lukas Riedel's avatar
Lukas Riedel committed
369
To activate the virtual environment within your current shell session, execute
370

Lukas Riedel's avatar
Lukas Riedel committed
371
    source <path/to/>dorie/build-cmake/activate
372

Lukas Riedel's avatar
Lukas Riedel committed
373
where you replace `<path/to/>` with the path to the appropriate directory.
374

Lukas Riedel's avatar
Lukas Riedel committed
375 376 377
Your shell will now display the prefix `(dune-env)` to indicate that it is
configured appropriately. You can exit the environent at any time by simply
executing
Dion Haefner's avatar
Dion Haefner committed
378

Lukas Riedel's avatar
Lukas Riedel committed
379
    deactivate
Dion Haefner's avatar
Dion Haefner committed
380

Lukas Riedel's avatar
Lukas Riedel committed
381 382
Notice that any virtual environment only applies to, and lasts for, your
current terminal session!
Dion Haefner's avatar
Dion Haefner committed
383

Lukas Riedel's avatar
Lukas Riedel committed
384 385
_With the virtual environment activated,_ you can now navigate to any directory
that you would like to contain your simulation input and/or output data.
Dion Haefner's avatar
Dion Haefner committed
386

Lukas Riedel's avatar
Lukas Riedel committed
387
### Execute the application
Lukas Riedel's avatar
Lukas Riedel committed
388
Any command to the DORiE application has the signature
389

Lukas Riedel's avatar
Lukas Riedel committed
390
    dorie <cmd> [<opts>] [<args>]
391

Lukas Riedel's avatar
Lukas Riedel committed
392
Using the `-h` or `--help` option, you can find all available commands and
Lukas Riedel's avatar
Lukas Riedel committed
393 394
further help. To start your first simulation run, create a new directory and
enter it.
Lukas Riedel's avatar
Lukas Riedel committed
395

Lukas Riedel's avatar
Lukas Riedel committed
396 397 398
#### 1 — Default input files
Create some exemplary configuration files along with parameter and boundary
condition data files by calling
Lukas Riedel's avatar
Lukas Riedel committed
399 400

    dorie create
Lukas Riedel's avatar
Lukas Riedel committed
401

Lukas Riedel's avatar
Lukas Riedel committed
402 403 404 405 406 407 408
The data files are valid input files for very limited scenarios. The main
configuration file `config.ini` requires tweaking by the user. Most `UNDEFINED`
values must be properly defined before starting the simulation. A cheat sheet
for the single config file entries as well as manuals on how the boundary
condition and parameter files are used can be found in the user documentation.

#### 2 — _Optional:_ Create a random field
Lukas Riedel's avatar
Lukas Riedel committed
409
DORiE implements a lightweight wrapper around the `dune-randomfield`
Lukas Riedel's avatar
Lukas Riedel committed
410 411 412
generator. You can use it to easily create a heterogeneous soil architecture.
This step is optional. Tweak the parameters of `parfield.ini` to your liking
and then call
Lukas Riedel's avatar
Lukas Riedel committed
413

Lukas Riedel's avatar
Lukas Riedel committed
414 415
    dorie pfg parfield.ini

Lukas Riedel's avatar
Lukas Riedel committed
416 417 418
A cheat sheet for this config file is also available from the documentation.

#### 3 — Perform a simulation
Lukas Riedel's avatar
Lukas Riedel committed
419 420 421 422 423 424 425
The DORiE main routine is executed with the `run` command.
Tweak the parameters of `config.ini` to your liking. You will need to
reference several additional input files for soil parameters, boundary
conditions, GMSH grid files (optional), and grid mappings (optional).
Refer to the documentation for further information.

Once prepared, call
Lukas Riedel's avatar
Lukas Riedel committed
426 427 428

    dorie run config.ini

Lukas Riedel's avatar
Lukas Riedel committed
429
to execute the solver.
Lukas Riedel's avatar
Lukas Riedel committed
430

Lukas Riedel's avatar
Lukas Riedel committed
431 432 433 434 435 436
## Troubleshooting

CMake heavily caches the results of its configuration process. In case you
encounter errors or strange behavior, especially after an update, you should
delete the DORiE build folder (called `build-cmake` by default) and re-build
DORiE using `dunecontrol`.
Dion Haefner's avatar
Dion Haefner committed
437

Lukas Riedel's avatar
Lukas Riedel committed
438 439 440
If the problem persists, take a look at the
[list of Issues](https://ts-gitlab.iup.uni-heidelberg.de/dorie/dorie/issues),
and feel free to create an Issue yourself if the problem is not yet reported.
Dion Haefner's avatar
Dion Haefner committed
441

Lukas Riedel's avatar
Lukas Riedel committed
442
### Debugging
443 444
DORiE can be built with debugging flags via CMake. To do so, enter the
`build-cmake` directory and execute
445

446 447
    cmake -DCMAKE_BUILD_TYPE=Debug ..
    make all
448

Dion Haefner's avatar
Dion Haefner committed
449
After building, a debugger can hook into the executables.
450

Lukas Riedel's avatar
Lukas Riedel committed
451 452 453 454
**Note:** If no `CMAKE_BUILD_TYPE` is specified during re-configuration, the
last configuration build type is used. If no CMake files exist, it defaults to
`Release`. You will find the actual value displayed in the final output of
CMake.
455

Lukas Riedel's avatar
Lukas Riedel committed
456 457
To re-create a release build, configure DORiE with the release build type by
executing
458

459 460 461 462 463
    cmake -DCMAKE_BUILD_TYPE=Release ..
    make all

or by calling `dunecontrol` with the supplied options file as indicated in the
installation instructions above.
464

Lukas Riedel's avatar
Lukas Riedel committed
465 466 467 468 469 470 471 472
### Running System Tests
DORiE includes a testing system for comparing its results the ones of ODE
solvers or former versions of itself. This ensures that DORiE is running
correctly and producing the expected results. We distinguish _unit tests_ for
testing certain features of the code, and _system tests_ for verifying the
results of the final application. As system tests require executing the DUNE
solvers, it is recommended to build them in a `Release` environment.
Additionaly, there is a set of tests for the Python module.
Lukas Riedel's avatar
Lukas Riedel committed
473 474

| Test category | Build tests | Execute tests | Recommended build type |
475
| ------------- | ----------- | ------------- | ---------------------- |
476 477 478 479
| Unit tests | `make build_unit_tests` | `make unit_tests` | `Debug` |
| System tests | `make build_system_tests` | `make system_tests` | `Release` |
| Python tests | _Not required_ | `make test_python` | _Any_ |
| Cookbook examples (no testing performed) | `make all` | `make example_tests` | `Release` |
Lukas Riedel's avatar
Lukas Riedel committed
480 481 482

The `make` commands are to be executed from within the `build-cmake` directory.

483 484 485 486 487 488 489 490 491
#### Code Coverage Report
To enable code coverage reports, configure DORiE with the CMake option
`COVERAGE_REPORT` enabled, like so (from the `build-cmake` directory):

    cmake -DCOVERAGE_REPORT=On ..

This will add the appropriate compiler flags to _all_ targets. You then have to
re-build all binaries. After running tests or executing the application, you
can retrieve code coverage information using the
Lukas Riedel's avatar
Lukas Riedel committed
492
[`gcovr`](https://gcovr.com/index.html) utility.
Dion Haefner's avatar
Dion Haefner committed
493

494 495 496 497 498 499 500 501 502 503 504 505 506
### Developing Python Code
DORiE installs its Python module into the DUNE-controlled Python virtual
environment (`venv`) during the CMake configuration phase. This means that
changes to its source code are only reflected after running CMake again. For
less tedious Python code development, set the option
`DUNE_PYTHON_INSTALL_EDITABLE` in the `build.opts` file to `TRUE`. This will
install the Python packages in editable mode, meaning that they are "symlinked"
to their original location and changes to the source code are immediately
reflected inside the virtual environment.

Note however, that this is not compatible with a re-locatable installation
because editable installs require the source code in its original location.

Lukas Riedel's avatar
Lukas Riedel committed
507 508 509 510
### Further Help
[Open an Issue](https://ts-gitlab.iup.uni-heidelberg.de/dorie/dorie/issues/new),
on GitLab or write to the
[DORiE developer mailing list](mailto:dorieteam@iup.uni-heidelberg.de).