README.md 13.8 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

21
## Docker Installation - Simple Setup
22

23 24 25 26
This setup is intended for users who simply want to start computations with DORiE.

Install Docker on your machine. Then, use `git clone` to download the DORiE repository into a suitable directory on your machine. Enter the directory, and call

Lukas Riedel's avatar
Lukas Riedel committed
27
    docker build -f docker/dorie.dockerfile -t dorie .
28 29 30

Docker will use a prepared image from Dockerhub and install DORiE into it. You can now call DORiE via the Docker deamon from any directory `dir` on your machine:

31
    docker run -it -v <dir>:/sim dorie <command>
32 33 34

The `-v` option tells docker to mount the directory into the container work directory (`sim`).

Dion Häfner's avatar
Dion Häfner committed
35
In the section 'Usage' you will find a list of possible commands. Note that input and output files can only be placed in the `<dir>` directory or subdirectories thereof. You must use relative paths in the DORiE configuration files.
36

Dion Haefner's avatar
Dion Haefner committed
37

38
## Manual Installation
39

Dion Häfner's avatar
Dion Häfner committed
40 41 42
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. 

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!
43

44 45 46 47
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.

48
### Dependencies
Lukas Riedel's avatar
Lukas Riedel committed
49 50 51 52 53
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.
54 55 56

| Software | Version/Branch | Comments |
| ---------| -------------- | -------- |
Lukas Riedel's avatar
Lukas Riedel committed
57 58
| CMake | 3.10.2 |
| GCC | 7.3 | Alternatively: LLVM Clang >=6
59 60
| git |
| pkg-config |
Lukas Riedel's avatar
Lukas Riedel committed
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
| 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 |
| [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
76
| [dune-randomfield](https://gitlab.dune-project.org/oklein/dune-randomfield) | master
Lukas Riedel's avatar
Lukas Riedel committed
77 78 79 80 81


### Optional Packages
| Software | Version/Branch | Comments |
| ---------| -------------- | -------- |
82
| [dune-testtools](https://gitlab.dune-project.org/quality/dune-testtools) | master | Handles system tests
Lukas Riedel's avatar
Lukas Riedel committed
83
| [doxygen](http://www.stack.nl/~dimitri/doxygen/) | 1.8.13 | Builds documentation
Lukas Riedel's avatar
Lukas Riedel committed
84 85
| [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
86 87


88
### Step-by-step Instructions
Lukas Riedel's avatar
Lukas Riedel committed
89
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.
90

91 92
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
93
1. **macOS** users need to start by installing the Apple Command Line Tools by executing
94 95

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

Lukas Riedel's avatar
Lukas Riedel committed
97
2. Install third party packages:
Lukas Riedel's avatar
Lukas Riedel committed
98
    
99
    **Ubuntu:**
Dion Haefner's avatar
Dion Haefner committed
100
    
Dion Haefner's avatar
Dion Haefner committed
101
        apt update 
Lukas Riedel's avatar
Lukas Riedel committed
102
        apt install cmake doxygen gcc g++ gfortran \
Dion Haefner's avatar
Dion Haefner committed
103 104
                    git libatlas-base-dev libfftw3-dev libfftw3-mpi-dev \
                    libfreetype6-dev libhdf5-mpi-dev libopenmpi-dev libpng-dev \
105
                    libsuperlu-dev libxft-dev python3-dev python3-pip
106

Lukas Riedel's avatar
Lukas Riedel committed
107
    **macOS:**
108 109

        brew update
Lukas Riedel's avatar
Lukas Riedel committed
110
        brew install cmake doxygen gcc libpng open-mpi \
111
                    pkg-config python3 superlu
112 113 114
        brew install hdf5 --with-mpi
        brew install fftw --with-mpi

Lukas Riedel's avatar
Lukas Riedel committed
115
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
116 117 118

    **Ubuntu:**

119
        apt install libmetis-dev libparmetis-dev
Lukas Riedel's avatar
Lukas Riedel committed
120

Lukas Riedel's avatar
Lukas Riedel committed
121
    **macOS:** _Support is dropped because ParMETIS is currently unavailable from Homebrew._
Lukas Riedel's avatar
Lukas Riedel committed
122 123 124

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

125 126 127
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
128

129
    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.
130

131
    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.
132 133

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

135
        HDF5_ROOT=/usr/local
136

137
    to the `CMAKE_FLAGS` in the call to `dunecontrol` above.
Dion Haefner's avatar
Dion Haefner committed
138
 
Lukas Riedel's avatar
Lukas Riedel committed
139
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
140

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

Lukas Riedel's avatar
Lukas Riedel committed
143 144 145
    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!**
146

147 148 149 150 151 152 153 154 155
### 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.

156

157 158 159
## 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
160 161 162 163

* [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.

164
# Usage
Dion Haefner's avatar
Dion Haefner committed
165

166
## Documentation
Dion Haefner's avatar
Dion Haefner committed
167

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

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

Dion Haefner's avatar
Dion Haefner committed
172
    dunecontrol --only=dorie make doc
Dion Haefner's avatar
Dion Haefner committed
173

Lukas Riedel's avatar
Lukas Riedel committed
174 175 176 177
or navigate to the `dorie/build-cmake` directory and call

    make doc

178
The documentation files can now be found in the subfolder `dorie/build-cmake/doc`.
Dion Haefner's avatar
Dion Haefner committed
179

180
## Run, DORiE, Run!
Lukas Riedel's avatar
Lukas Riedel committed
181
If you made the DORiE wrapper directory available through your `PATH` variable, you can call it by simply executing
182 183

    dorie <command>
184

Lukas Riedel's avatar
Lukas Riedel committed
185 186 187
You can always find the wrapper in the `dorie/build-cmake/bin` folder of your installation and call it directly with

    <path/to/>dorie/build-cmake/bin/dorie <command>
188

189
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
190 191 192

    dorie create

193 194
DORiE encapsulates two routines, the Parameter Field Generator (PFG) and the main program routine. Each takes a single `.ini` configuration file as arguments.

195 196
Tweak the paramters to your liking and then call

197 198 199 200
    dorie pfg <inifile>

to create a parameter field file. Make sure that you instruct the main routine to call the file you just created. Then call

201
    dorie run <inifile>
Dion Haefner's avatar
Dion Haefner committed
202

203
to execute the main program.
Dion Haefner's avatar
Dion Haefner committed
204

205
List all available commands and find further help by executing
Dion Haefner's avatar
Dion Haefner committed
206

Dion Häfner's avatar
Dion Häfner committed
207
    dorie --help
Dion Haefner's avatar
Dion Haefner committed
208

209 210
or

Dion Häfner's avatar
Dion Häfner committed
211
    dorie <command> --help
212

Lukas Riedel's avatar
Lukas Riedel committed
213 214 215 216 217 218 219 220 221

## Start an interactive Docker session

In case you built DORiE using `docker build` and want to start an interactive session, e.g. to build the documentation or do some debugging, you can do so by specifying a custom entrypoint for the container:

    docker run -i -t --entrypoint=/bin/bash -v <dir>:/sim dorie

This way, an interactive bash session inside the container will be started (instead of directly running DORiE). Note that DUNE and DORiE are located in `/opt/dune`.

222
## Troubleshooting
Dion Haefner's avatar
Dion Haefner committed
223 224
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`.

225
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
226

227
### Debugging
Dion Haefner's avatar
Dion Haefner committed
228
DORiE can be built with debugging flags via CMake. To do so, run
229

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

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

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

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

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

240 241 242 243 244
#### 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
245
The debugger `gdb` is pre-installed in the Docker container.
246

247 248 249 250 251 252 253 254 255
### Running System Tests
DORiE includes system tests for comparing its results the ones of ODE solvers or
former versions of itself. They ensure that DORiE is running correctly and
producing the expected results. If you installed DORiE, you have to make sure
that all test executables are built by calling

    dunecontrol --only=dorie make build_tests

You then execute the system tests with
Dion Haefner's avatar
Dion Haefner committed
256

Dion Haefner's avatar
Dion Haefner committed
257
    ARGS="--output-on-failure" dunecontrol --only=dorie make test
Dion Haefner's avatar
Dion Haefner committed
258 259 260

You will be informed whether each test has been passed or failed, and you may find additional output in the DORiE build directory.

261
### Further Help
262
[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).