README.md 15.7 KB
Newer Older
Dion Haefner's avatar
Dion Haefner committed
1 2 3
# Welcome to DORiE!
(__D__UNE-__O__perated __Ri__chards equation solving __E__nvironment)

4
DORiE is a software suite for solving Richard's Equation. The core feature is a C++ PDE-solver powered by [DUNE](https://dune-project.org/) and the [DUNE-PDELab](https://dune-project.org/modules/dune-pdelab/) module. It implements a Discontinous Galerkin (DG) discretization scheme on structured rectangular / cubic and unstructured simplex grids in two and three spatial dimensions, and makes use of advanced features like adaptive grid refinement.
5 6 7

The suite encapsulates a documentation and various tools for program setup, program testing, and output analysis, which are mostly written in Python.

8
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 [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 [IWR Heidelberg](https://typo.iwr.uni-heidelberg.de/home/).
9 10 11 12


# Installation Instructions

Dion Haefner's avatar
Dion Haefner committed
13
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 for inexperienced users it is recommended to use the deployment software [Docker](https://www.docker.com/) instead.
14

15 16 17 18 19
No installation is necessary if you download DORiE as Docker image from
[Docker Hub](https://hub.docker.com/r/dorie/dorie/). You can then proceed
directly to the the instructions on [how to execute DORiE](#run-dorie-run).
The commands listed there are appended to the usual commands for running a
Docker container. See the description on Docker Hub for further details.
20

Lukas Riedel's avatar
Lukas Riedel committed
21
## Download Docker image
22

Lukas Riedel's avatar
Lukas Riedel committed
23 24 25
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
26

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

Lukas Riedel's avatar
Lukas Riedel committed
29 30 31 32 33
Omitting the tag information downloads the image with tag `latest` which
refers to the latest stable version. You can download any tag by specifying
`<tag>`. The list of available 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`.
34

Lukas Riedel's avatar
Lukas Riedel committed
35
## Docker Installation
36

Lukas Riedel's avatar
Lukas Riedel committed
37 38
You can also compile any local version of DORiE into a new Docker image. To do
so, execute
39

Lukas Riedel's avatar
Lukas Riedel committed
40
    docker build -f docker/dorie.dockerfile -t <img> .
41

Lukas Riedel's avatar
Lukas Riedel committed
42 43 44
from within the top-level DORiE source directory. Docker will use a prepared
image from Dockerhub and install DORiE into it. The created image will be called
`<img>`.
Dion Haefner's avatar
Dion Haefner committed
45

46
## Manual Installation
47

Lukas Riedel's avatar
Lukas Riedel committed
48
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
49 50

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 strongly discouraged!
51

52 53 54 55
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.

56
### Dependencies
Lukas Riedel's avatar
Lukas Riedel committed
57 58 59 60 61
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.
62 63 64

| Software | Version/Branch | Comments |
| ---------| -------------- | -------- |
Lukas Riedel's avatar
Lukas Riedel committed
65 66
| CMake | 3.10.2 |
| GCC | 7.3 | Alternatively: LLVM Clang >=6
67 68
| git |
| pkg-config |
Lukas Riedel's avatar
Lukas Riedel committed
69 70 71 72 73 74
| HDF5 | 1.10 | with MPI support
| FFTW3 | 3.3.7 | with MPI support
| Python | 3.6 |
| pip | 3.6 |
| MPI | | Tested with OpenMPI 2.1.1
| SuperLU | 5.2 |
Lukas Riedel's avatar
Lukas Riedel committed
75
| [yaml-cpp](https://github.com/jbeder/yaml-cpp) | >= 5.2.0 |
Lukas Riedel's avatar
Lukas Riedel committed
76 77 78 79 80 81 82 83 84
| [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
85
| [dune-randomfield](https://gitlab.dune-project.org/oklein/dune-randomfield) | master
Lukas Riedel's avatar
Lukas Riedel committed
86 87 88 89 90


### Optional Packages
| Software | Version/Branch | Comments |
| ---------| -------------- | -------- |
91
| [dune-testtools](https://gitlab.dune-project.org/quality/dune-testtools) | releases/2.6 | Handles system tests
Lukas Riedel's avatar
Lukas Riedel committed
92
| [doxygen](http://www.stack.nl/~dimitri/doxygen/) | 1.8.13 | Builds documentation
Lukas Riedel's avatar
Lukas Riedel committed
93 94
| [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
95 96


97
### Step-by-step Instructions
Lukas Riedel's avatar
Lukas Riedel committed
98
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/), you need to check if some of the packages require different installation options than displayed here.
99

100 101
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!

Lukas Riedel's avatar
Lukas Riedel committed
102
1. **macOS** users need to start by installing the Apple Command Line Tools by executing
103 104

        xcode-select --install
Dion Haefner's avatar
Dion Haefner committed
105

Lukas Riedel's avatar
Lukas Riedel committed
106
2. Install third party packages:
Lukas Riedel's avatar
Lukas Riedel committed
107
    
108
    **Ubuntu:**
Dion Haefner's avatar
Dion Haefner committed
109
    
Dion Haefner's avatar
Dion Haefner committed
110
        apt update 
Lukas Riedel's avatar
Lukas Riedel committed
111
        apt install cmake doxygen gcc g++ gfortran \
Dion Haefner's avatar
Dion Haefner committed
112 113
                    git libatlas-base-dev libfftw3-dev libfftw3-mpi-dev \
                    libfreetype6-dev libhdf5-mpi-dev libopenmpi-dev libpng-dev \
Lukas Riedel's avatar
Lukas Riedel committed
114 115
                    libsuperlu-dev libyaml-cpp-dev libxft-dev \
                    python3-dev python3-pip
116

Lukas Riedel's avatar
Lukas Riedel committed
117
    **macOS:**
118 119

        brew update
Lukas Riedel's avatar
Lukas Riedel committed
120
        brew install cmake doxygen gcc libpng open-mpi \
Lukas Riedel's avatar
Lukas Riedel committed
121
                     pkg-config python3 superlu yaml-cpp
122 123 124
        brew install hdf5 --with-mpi
        brew install fftw --with-mpi

Lukas Riedel's avatar
Lukas Riedel committed
125
3. The parallel linear solver of DORiE can make use of the ParMETIS package. If you want to run DORiE in parallel on multiple processes, additionally install METIS and ParMETIS:
Lukas Riedel's avatar
Lukas Riedel committed
126 127 128

    **Ubuntu:**

129
        apt install libmetis-dev libparmetis-dev
Lukas Riedel's avatar
Lukas Riedel committed
130

Lukas Riedel's avatar
Lukas Riedel committed
131
    **macOS:** _Support is dropped because ParMETIS is currently unavailable from Homebrew._
Lukas Riedel's avatar
Lukas Riedel committed
132 133 134

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

135 136 137
4. Clone the DUNE modules and DORiE into a suitable folder on your machine. Use `git checkout` to switch to the correct branches (see above). Enter the parent folder, and call

        CMAKE_FLAGS="-DDUNE_PYTHON_VIRTUALENV_SETUP=True -DDUNE_PYTHON_ALLOW_GET_PIP=True" ./dune-common/bin/dunecontrol all
138

139
    to build all DUNE modules. Additionally, you can add `MAKE_FLAGS="-j X"` before the call to `dunecontrol` to compile on `X` processes in parallel.
140

141
    If you installed software into paths not appended to your `PATH` variable, you will have to add `CMAKE_FLAGS` to the call to make sure that CMake finds all packages. Alternatively, you can add a custom options file. See the [DUNE Installation Instructions](https://dune-project.org/doc/installation/) for details. CMake will throw an error if required packages are not found.
142 143

    **Warning:** Anacoda supplies its own version of HDF5 which is typically found first by CMake. If you have Anaconda installed on your machine, add
144

145
        HDF5_ROOT=/usr/local
146

147
    to the `CMAKE_FLAGS` in the call to `dunecontrol` above.
Dion Haefner's avatar
Dion Haefner committed
148
 
Lukas Riedel's avatar
Lukas Riedel committed
149
5. After a successful build you can call the `dorie` wrapper located in `dorie/build-cmake/bin` from anywhere on your machine, but it is more handy to add this location to your search path. You can add the directory to your `PATH` variable by calling
150

Lukas Riedel's avatar
Lukas Riedel committed
151
        PATH=<path/to/>dorie/build-cmake/bin:$PATH
152

Lukas Riedel's avatar
Lukas Riedel committed
153 154 155
    However, this will only last for your current terminal session. Another option is to add this path permanently in your shell configuration file.

    **Installing DUNE and DORiE via `make install` into your usual work environment is strongly discouraged!**
156

157 158 159 160 161 162 163 164 165
### Experimental Features
The local operator implementing Richards equation's discretization supports
multiple scheme settings. Setting these via the config file is disabled by
default. You can enable this feature by reconfiguring DORiE with the CMake flag
`-DEXPERIMENTAL_DG_FEATURES=On`, and rebuilding it.

The configuration settings in the section `[dg.experimental]` will then override
the default settings.

166

167 168 169
## Recommended Third-Party Software

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
170 171 172 173

* [Gmsh](http://gmsh.info/): An open-source CAD that can be used to create the `.msh` files used by DORiE to define triangular meshes.
* [ParaView](http://www.paraview.org/): A powerful post-processing tool for VTK files. Offers both visualization and data analysis tools.

174
# Usage
Dion Haefner's avatar
Dion Haefner committed
175

176
## Documentation
Dion Haefner's avatar
Dion Haefner committed
177

178
The documentation of the latest release branch can be found [online](https://dorie-doc.netlify.com/).
Dion Haefner's avatar
Dion Haefner committed
179

180
The documentation can be built after DORiE has been properly configured (i.e., by calling `dunecontrol`). Note that you might have to re-configure DORiE once after installing it, because some dependencies are installed at configure time (e.g. by `dunecontrol --only=dorie configure`). To build the documentation, just run
Dion Haefner's avatar
Dion Haefner committed
181

Dion Haefner's avatar
Dion Haefner committed
182
    dunecontrol --only=dorie make doc
Dion Haefner's avatar
Dion Haefner committed
183

Lukas Riedel's avatar
Lukas Riedel committed
184 185 186 187
or navigate to the `dorie/build-cmake` directory and call

    make doc

Lukas Riedel's avatar
Lukas Riedel committed
188 189
You will then find the index page of the documentation at
`dorie/build-cmake/doc/html/index.html`.
Dion Haefner's avatar
Dion Haefner committed
190

191
## Run, DORiE, Run!
Lukas Riedel's avatar
Lukas Riedel committed
192 193
DORiE provides a command line interface (CLI) for all its functions.
The required Python modules and all their dependencies are readily installed
194
into a virtual environment (`venv`), which has to be activated within a
Lukas Riedel's avatar
Lukas Riedel committed
195 196
shell session. You can do so by activating it in your current session
(Manual Installation only) or by running the Docker application.
197

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

Lukas Riedel's avatar
Lukas Riedel committed
202
Start up the Docker application by calling
Lukas Riedel's avatar
Lukas Riedel committed
203

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

Lukas Riedel's avatar
Lukas Riedel committed
206 207 208 209 210
where you replace `<dir>` with a local directory for storing input and output
data, and `<img>` with `dorie/dorie[:<tag>]`.
If you built a local Docker image, replace `<img>` appropriately.
You can also insert `$PWD` as `<dir>` if you want to mount your
current working directory.
211

Lukas Riedel's avatar
Lukas Riedel committed
212 213 214 215
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.
216

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

220
### Activate the `venv` locally
Lukas Riedel's avatar
Lukas Riedel committed
221
To activate the virtual environment within your current shell session, execute
222

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

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

Lukas Riedel's avatar
Lukas Riedel committed
227 228 229
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
230

Lukas Riedel's avatar
Lukas Riedel committed
231
    deactivate
Dion Haefner's avatar
Dion Haefner committed
232

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

Lukas Riedel's avatar
Lukas Riedel committed
236 237
_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
238

Lukas Riedel's avatar
Lukas Riedel committed
239 240
### Execute the application
Any command to the DORiE application has the signature
241

Lukas Riedel's avatar
Lukas Riedel committed
242
    dorie <cmd> [<opts>] [<args>]
243

Lukas Riedel's avatar
Lukas Riedel committed
244 245
Using the `-h` or `--help` option, you can find all available commands and
further help.
Lukas Riedel's avatar
Lukas Riedel committed
246

Lukas Riedel's avatar
Lukas Riedel committed
247 248 249 250 251
To start your first simulation run, create a new directory and enter it.
Place some exemplary configuration and boundary condition data files in there
by calling

    dorie create
Lukas Riedel's avatar
Lukas Riedel committed
252

Lukas Riedel's avatar
Lukas Riedel committed
253 254 255
DORiE encapsulates two main routines, the Parameter Field Generator (PFG) and
the main program routine. Each takes a single `.ini` configuration file as
argument.
Lukas Riedel's avatar
Lukas Riedel committed
256

Lukas Riedel's avatar
Lukas Riedel committed
257
Tweak the parameters of `parfield.ini` to your liking and then call
Lukas Riedel's avatar
Lukas Riedel committed
258

Lukas Riedel's avatar
Lukas Riedel committed
259 260 261 262 263 264 265 266
    dorie pfg parfield.ini

to create a parameter field file. Do the same with the `config.ini`, while
ensuring that you use the parameter field file you just created. Then call

    dorie run config.ini

to execute the main program.
Lukas Riedel's avatar
Lukas Riedel committed
267

268
## Troubleshooting
Dion Haefner's avatar
Dion Haefner committed
269 270
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-install DORiE using `dunecontrol`.

271
If the problem persists, take a look at the [List of Known Bugs](https://ts-gitlab.iup.uni-heidelberg.de/dorie/dorie/issues), or create an issue yourself. For problems related to the installation, refer to the sections below.
Dion Haefner's avatar
Dion Haefner committed
272

273
### Debugging
Dion Haefner's avatar
Dion Haefner committed
274
DORiE can be built with debugging flags via CMake. To do so, run
275

Dion Haefner's avatar
Dion Haefner committed
276
    CMAKE_FLAGS="-DCMAKE_BUILD_TYPE=Debug" dunecontrol --only=dorie all
277

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

Dion Haefner's avatar
Dion Haefner committed
280
**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.
281

Dion Haefner's avatar
Dion Haefner committed
282
To re-create a release build, configure DORiE with the release build type by executing
283

Dion Haefner's avatar
Dion Haefner committed
284
    CMAKE_FLAGS="-DCMAKE_BUILD_TYPE=Release" dunecontrol --only=dorie all
285

286 287 288 289 290
#### Debugging inside Docker
A debugger needs special security privileges usually not provided by the Docker engine. To enable debugging inside Docker, these privileges have to be granted when calling `docker run` by adding the options

    --security-opt seccomp=unconfined

Dion Häfner's avatar
Dion Häfner committed
291
The debugger `gdb` is pre-installed in the Docker container.
292

293
### Running System Tests
Lukas Riedel's avatar
Lukas Riedel committed
294 295 296 297 298 299 300 301
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.

| Test category | Build tests | Execute tests | Recommended build type |
302 303 304
| ------------- | ----------- | ------------- | ---------------------- |
| Unit tests | `make build_unit_tests` | `make_unit_tests` | `Debug`
| System tests | `make build_system_tests` | `make_system_tests` | `Release`
Lukas Riedel's avatar
Lukas Riedel committed
305 306 307 308 309 310 311

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

The unit tests automatically include compiler flags for code coverage reports.
After building them with `Debug` flags and executing them, you can
retrieve code coverage information using the
[`gcovr`](https://gcovr.com/index.html) utility.
Dion Haefner's avatar
Dion Haefner committed
312

313
### Further Help
314
[Open an issue](https://ts-gitlab.iup.uni-heidelberg.de/dorie/dorie/issues/new), or write to the [DORiE developer mailing list](mailto:dorieteam@iup.uni-heidelberg.de).