README.rst 16.7 KB
Newer Older
Lambert Theisen's avatar
Lambert Theisen committed
1
.. image:: logo.png
Lambert Theisen's avatar
Lambert Theisen committed
2
    :width: 200px
Lambert Theisen's avatar
Lambert Theisen committed
3
    :alt: logo
Lambert Theisen's avatar
Lambert Theisen committed
4 5 6

.. inclusion-marker

Lambert Theisen's avatar
Lambert Theisen committed
7
fenicsR13: A Tensorial Mixed Finite Element Solver for the Linear R13 Equations Using the FEniCS Computing Platform
Lambert Theisen's avatar
Lambert Theisen committed
8
===================================================================================================================
Lambert Theisen's avatar
Lambert Theisen committed
9

Lambert Theisen's avatar
Lambert Theisen committed
10
|pipeline| |coverage| |version| |zenodo| |website|
Lambert Theisen's avatar
Lambert Theisen committed
11 12 13

``#extendedGasDynamics`` ``#using`` ``#FEniCS``

Lambert Theisen's avatar
Lambert Theisen committed
14
.. math::
Lambert Theisen's avatar
Lambert Theisen committed
15
    \scriptsize \nabla \cdot u \, & \scriptsize = \dot{m} \\ \scriptsize \nabla p + \nabla \cdot \sigma \, & \scriptsize = b \\ \scriptsize \nabla \cdot u + \nabla \cdot s \, & \scriptsize = r \\ \scriptsize \frac{4}{5} {(\nabla s)}_{\text{stf}} + 2 {(\nabla u)}_{\text{stf}} + \nabla \cdot m \, & \scriptsize = - \frac{1}{\mathbb{K}} \sigma \\ \scriptsize \frac{5}{2} \nabla \theta + \nabla \cdot \sigma + \frac{1}{2} \nabla \cdot R + \frac{1}{6} \nabla \Delta \, & \scriptsize = - \frac{1}{\mathbb{K}} \frac{2}{3} s \\ \scriptsize m \, & \scriptsize = - 2 \mathbb{K} {(\nabla\sigma)}_{\text{stf}} \\ \scriptsize R \, & \scriptsize = - \frac{24}{5} \mathbb{K} {(\nabla s)}_{\text{stf}} \\ \scriptsize \Delta \, & \scriptsize = - 12 \mathbb{K} \left( \nabla \cdot s \right)
Lambert Theisen's avatar
Lambert Theisen committed
16 17

Main Features
18
--------------------------------------------------------------------------------
Lambert Theisen's avatar
Lambert Theisen committed
19

Lambert Theisen's avatar
Lambert Theisen committed
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
- Solving Steady 2D Linear R13 Equations in Normalized Form
- Stabilization with: Continous Interior Penalty (CIP) or Galerkin Least Squares (GLS)
- Option for convergence study with input for exact solution
- Output in XDMF_/HDF5 and PDF
- Arbitray finite element combinations (thanks to FEniCS_)
- Easy setup of parameter studies
- Structured/Documented YAML_ input file format
- Rarefied gas flow effects predictable: Knudsen paradox, Knudsen pump, ...
- Interface for Gmsh_ meshes

.. _FEniCS: https://fenicsproject.org/
.. _YAML: https://de.wikipedia.org/wiki/YAML
.. _XDMF: http://www.xdmf.org/index.php/XDMF_Model_and_Format
.. _Gmsh: http://gmsh.info/

Installation
--------------------------------------------------------------------------------
Manuel Torrilhon's avatar
Manuel Torrilhon committed
37 38 39 40 41 42 43 44 45 46 47 48 49 50

Download the repository as a `zip-file`_ and un-zip, or use `git`_ with

.. code-block:: bash

    # Clone Repository and open main folder
    git clone git@git.rwth-aachen.de:lamBOO/fenicsR13.git
    cd fenicsR13


.. _`FEniCS`: https://fenicsproject.org/
.. _`zip-file`: https://git.rwth-aachen.de/lamBOO/fenicsR13/-/archive/master/fenicsR13-master.zip
.. _`git`: https://git-scm.com/

Lambert Theisen's avatar
Lambert Theisen committed
51 52

Docker
53
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lambert Theisen's avatar
Lambert Theisen committed
54

55
It is recommended to use the program with `Docker`_, a virtualization software available (with free docker account) for `download`_ for most operating systems. Our repository provides a Docker container based on the official FEniCS Docker image which contains all necessities for FEniCS and has been adjusted to solve the R13 equations. The program `docker-compose`_ is also required.
Manuel Torrilhon's avatar
Manuel Torrilhon committed
56 57 58

.. _`Docker`: https://en.wikipedia.org/wiki/Docker_(software)
.. _`download`: https://www.docker.com/products/docker-desktop
59
.. _`docker-compose`: https://docs.docker.com/compose/install/
Manuel Torrilhon's avatar
Manuel Torrilhon committed
60 61 62

Starting the Environment
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lambert Theisen's avatar
Lambert Theisen committed
63

64
Make sure you installed Docker and it is running on your system. You can start the fenicsR13 compute environment from the root-directory of the repository using the command-line
Lambert Theisen's avatar
Lambert Theisen committed
65

Lambert Theisen's avatar
Lambert Theisen committed
66
.. code-block:: bash
Lambert Theisen's avatar
Lambert Theisen committed
67

Manuel Torrilhon's avatar
Manuel Torrilhon committed
68 69
    # Run (and possibly pull) fenicsr13_release service
    docker-compose run --rm fenicsr13_release
Lambert Theisen's avatar
Lambert Theisen committed
70
    # Only for developers, install the lastest version using pip
Lambert Theisen's avatar
Lambert Theisen committed
71
    # sudo pip install -e .
Manuel Torrilhon's avatar
Manuel Torrilhon committed
72

73
When you run this for the first time, docker will pull (download and extract) the container image from our repository which is roughly 800MB and the download may require some patience. After the initial download the docker image will be stored (2-3 GB) on your system and any new run will start the container immediately.
Lambert Theisen's avatar
Lambert Theisen committed
74

Manuel Torrilhon's avatar
Manuel Torrilhon committed
75 76 77 78 79 80 81 82
The above docker command will start a RedHat-based bash environment. The repository is mounted as a volume under ``/home/fenics/shared`` in the container and should be the default folder on startup. What ever is changed in this folder or its sub-folders will change in the folder on your original system as well. However, any changes outside this folder will be gone after you exit the docker environment.

Running a Simulation
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

To execute a simulation case, go to to the case folder (e.g. ``examples/lid_driven_cavity``)

.. code-block:: bash
83

84
    # Move to folder:
85
    cd examples/lid_driven_cavity
Manuel Torrilhon's avatar
Manuel Torrilhon committed
86 87 88 89 90

We provide a script to utilize `gmsh`_ and generate a `H5`_ mesh-file from a local geometry file by

.. code-block:: bash

91
    # Create mesh:
92
    ./create_mesh.sh
Manuel Torrilhon's avatar
Manuel Torrilhon committed
93

94
To run a simulation execute the solver main program ``fenicsR13.py`` (which is located in the ``src``-directory in the top level) while specifying an input file as first command line argument.
Manuel Torrilhon's avatar
Manuel Torrilhon committed
95 96 97

.. code-block:: bash

98
    # Run program with given input file:
99
    fenicsR13 input.yml
Manuel Torrilhon's avatar
Manuel Torrilhon committed
100 101 102 103


Output files will be written to a folder which is named after the ``output_folder`` keyword of the ``input.yml``. For immediate inspection the output folder contains simple visualizations in PDF files for each of the fields (temperature, pressure,...).

104
The numerical results for each field is ouput into ``h5``-files, including mesh data and with corresponding ``xdmf``-file. The XDMF-files can be opened in Paraview to perform visualization, e.g., with ``Paraview > File > Open > u_0.xdmf > Apply filters``
Manuel Torrilhon's avatar
Manuel Torrilhon committed
105 106 107 108 109 110

.. _`gmsh`: http://gmsh.info/
.. _`H5`: https://en.wikipedia.org/wiki/Hierarchical_Data_Format

.. code-block:: bash

111
    # Leave directory:
112 113
    cd ../..

Manuel Torrilhon's avatar
Manuel Torrilhon committed
114 115 116 117 118 119
**Channel Flow Example**

We provide a simple example of a flow through a finite-length channel in 2D.

.. code-block:: bash

120
    # Move to folder:
121
    cd examples/channel_flow_force
122
    # Create mesh:
123
    ./create_mesh.sh
124
    # Run program with given input file:
125
    fenicsR13 input.yml
Manuel Torrilhon's avatar
Manuel Torrilhon committed
126 127 128 129 130

In the output folder the results can be post-processed to demonstrate the `Knudsen paradox`_ in a simple table.

.. code-block:: bash

131
    # Go to folder with simulation results (=casename in input.yml)
132
    cd channel_flow_force
133 134 135
    # Generate correlation data between Knudsen number and massflow
    bash postprocessing.sh
    cat table.csv
136
    # Leave directory:
137 138
    cd ../..

Manuel Torrilhon's avatar
Manuel Torrilhon committed
139 140 141 142 143 144 145 146
.. _`Knudsen paradox`: https://en.wikipedia.org/wiki/Knudsen_paradox

**Convergence Study**

We can test the convergence of the R13 discretization on a simple double-cylindrical geometry.

.. code-block:: bash

147
    # Move to folder:
148
    cd tests/r13
Manuel Torrilhon's avatar
Manuel Torrilhon committed
149
    # Meshes are already in Git:
150 151
    ls ../mesh
    # Run program with given input file:
152
    fenicsR13 inputs/r13_1_coeffs_nosources_norot_inflow_p1p1p1p1p1_stab.yml
153 154 155 156
    # Go to folder with simulation results (=casename in input.yml)
    cd r13_1_coeffs_nosources_norot_inflow_p1p1p1p1p1_stab
    # Open errors:
    cat errors.csv
Manuel Torrilhon's avatar
Manuel Torrilhon committed
157 158 159 160 161 162 163 164 165 166 167 168



Additional information
--------------------------------------------------------------------------------

Parallel Execution
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

FEniCS allows simple parallelization using MPI

.. code-block:: bash
169 170 171

    # Parallel execution ("-u" to flash stdout)
    # Usage: mpirun -n <numberOfProcesses> <serialCommand>
172
    # E.g.: mpirun -n 4 fenicsR13 input.yml
Lambert Theisen's avatar
Lambert Theisen committed
173

Manuel Torrilhon's avatar
Manuel Torrilhon committed
174 175 176
Building the Docker Image Locally
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Lambert Theisen's avatar
Lambert Theisen committed
177
The main folder of this repository contains a ``Dockerfile`` defining the used environment. Here, we used the optimized and official FEniCS Docker image and include ``Gmsh`` and install some requirements from the ``requirements.txt``. This can take a while, especially the ``Gmsh`` mirror can be quite slow. To avoid very long execution commands (``docker run <..> -v <volume share> <etc..>``), a ``docker-compose.yml`` is used to store all these parameters. ``docker-compose`` acts as an wrapper for the Docker execution.
Lambert Theisen's avatar
Lambert Theisen committed
178

Manuel Torrilhon's avatar
Manuel Torrilhon committed
179
The ``fenics`` environment (also called *service* in the ``docker-compose.yml``) first has to be build and can be executed afterwards. The command to build the container is
180 181 182

.. code-block:: bash

Manuel Torrilhon's avatar
Manuel Torrilhon committed
183 184
    # build fenics service
    docker-compose build fenicsr13_release
Lambert Theisen's avatar
Lambert Theisen committed
185

Manuel Torrilhon's avatar
Manuel Torrilhon committed
186 187 188

Interactive Docker Sessions
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lambert Theisen's avatar
Lambert Theisen committed
189

Lambert Theisen's avatar
Lambert Theisen committed
190
It is possible to use a Jupyter sever or a X11 forwarding but this is not recommended anymore. All relevant plots are now written by default without the need for the tricky X11 forwarding or interactive usage with Jupyter.
Lambert Theisen's avatar
Lambert Theisen committed
191

Lambert Theisen's avatar
Lambert Theisen committed
192 193
Documentation
--------------------------------------------------------------------------------
Lambert Theisen's avatar
Lambert Theisen committed
194

Lambert Theisen's avatar
Lambert Theisen committed
195
Documentation using Sphinx is available.
Lambert Theisen's avatar
Lambert Theisen committed
196

Lambert Theisen's avatar
Lambert Theisen committed
197
Pre-Build Version
198
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lambert Theisen's avatar
Lambert Theisen committed
199

Lambert Theisen's avatar
Lambert Theisen committed
200
Visit the hosted version on `Gitlab Pages`_ or download the artifacts from Gitlab's CI ``pages``-pipeline.
201

Lambert Theisen's avatar
Lambert Theisen committed
202
.. _`Gitlab Pages`: https://lamboo.pages.rwth-aachen.de/fenicsR13/
Lambert Theisen's avatar
Lambert Theisen committed
203 204

Manual Generation
205
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lambert Theisen's avatar
Lambert Theisen committed
206

Lambert Theisen's avatar
Lambert Theisen committed
207
.. code-block:: bash
Lambert Theisen's avatar
Lambert Theisen committed
208

Lambert Theisen's avatar
Lambert Theisen committed
209
    # cat .gitlab-ci.yml
210
    cd docs
Lambert Theisen's avatar
Lambert Theisen committed
211 212 213 214 215
    sphinx-apidoc -o source/src ../src
    sphinx-apidoc -o source/tests/heat ../tests/heat
    sphinx-apidoc -o source/tests/stress ../tests/stress
    sphinx-apidoc -o source/tests/r13 ../tests/r13
    sphinx-apidoc -o source/examples ../examples
216
    make html
Lambert Theisen's avatar
Lambert Theisen committed
217
    make latex
Lambert Theisen's avatar
Lambert Theisen committed
218

Lambert Theisen's avatar
Lambert Theisen committed
219
Developer Legacy Notes
220
--------------------------------------------------------------------------------
Lambert Theisen's avatar
Lambert Theisen committed
221

Lambert Theisen's avatar
Lambert Theisen committed
222 223 224
Developer Tips
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

225 226 227 228
- Monitor the performance of the program with e.g.:

    .. code-block:: bash

229
        htop -p `{ fenicsR13 inputs/1_coeffs_nosources_norot_inflow_p1p1p1p1p1_stab.yml > /dev/null & } && echo $!`
230

Lambert Theisen's avatar
Lambert Theisen committed
231
- Use doctest with ``python3 -m doctest -v src/meshes.py``
232
- Run ``pydocstyle`` once in a while
Lambert Theisen's avatar
Lambert Theisen committed
233 234 235 236 237
- Matplotbib fails when having wrong backend on macOS
    - Fix: Add ``backend: TkAgg`` to ``~/.matplotlib/matplotlibrc`` file
- Performance in Docker is way better than conda build, especially JIT compilation is faster
- Get C++ inlcude paths: ``echo | gcc -E -Wp,-v -``
- Bessel functions in DOLFIN:
238
    - C++17 functions cannpot be used. Boost functions also not per default. ``Expression("boost::math::cyl_bessel_i(0,atan2(x[1], x[0]))", degree=2)`` is allowed if one changes in file ``/usr/local/lib/python3.6/dist-packages/dolfin/jit/jit.py``
Lambert Theisen's avatar
Lambert Theisen committed
239

240 241 242 243 244 245 246
        .. code-block:: python

            _math_header = """
            // cmath functions
            #include <boost/math/special_functions/bessel.hpp> // Added
            %s
            """
Lambert Theisen's avatar
Lambert Theisen committed
247

248 249
Python notes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lambert Theisen's avatar
Lambert Theisen committed
250 251

- Get current work directory:
Lambert Theisen's avatar
Lambert Theisen committed
252

253
    .. code-block:: python
Lambert Theisen's avatar
Lambert Theisen committed
254

255 256 257
        import os
        cwd = os.getcwd()
        print(cwd)
Lambert Theisen's avatar
Lambert Theisen committed
258

Lambert Theisen's avatar
Lambert Theisen committed
259
- Latex font for matplotlib:
Lambert Theisen's avatar
Lambert Theisen committed
260

261
    .. code-block:: python
Lambert Theisen's avatar
Lambert Theisen committed
262

263 264 265 266
        # LaTeX text fonts:
        # Use with raw strings: r"$\mathcal{O}(h^1)$"
        plt.rc('text', usetex=True)
        plt.rc('font', family='serif')
267

Lambert Theisen's avatar
Lambert Theisen committed
268
- Get system path where modules are searched:
269

270
    .. code-block:: python
271

272 273
        import sys
        print(sys.path)
Lambert Theisen's avatar
Lambert Theisen committed
274

275 276 277
Create new version tag
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Add CHANGELOG entry
Lambert Theisen's avatar
Lambert Theisen committed
278
2. Adapt version in `conf.py` for docs and `setup.py` for package
Lambert Theisen's avatar
Lambert Theisen committed
279
3. Change badge in ``README.rst``
Lambert Theisen's avatar
Lambert Theisen committed
280
4. Change version in program information printing
Lambert Theisen's avatar
Lambert Theisen committed
281
5. Build new Docker container
282

283 284 285 286 287 288 289 290 291 292
Gitlab CI Setup
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- The ``build`` stage has to be triggered manually when something in the setup changes. This is because it takes a fair amount of time.
- In ``~/.gitlab-runner/config.toml`` (for the runner):
    - change priviliges to true
    - Use local images: ``pull_policy = "if-not-present"``
    - To ``[[runners]]`` add ``environment = ["DOCKER_TLS_CERTDIR="]`` (See https://gitlab.com/gitlab-org/gitlab-ce/issues/64959)
- Run local: ``gitlab-runner exec docker --docker-privileged build`` or with ``build`` replaced by job name
    - maybe local vars have to be change to use local Docker images because ``CI_REGISTRY``,... are not set

Lambert Theisen's avatar
Lambert Theisen committed
293
An example gitlab runner ``config/toml`` in ``~/.gitlab-runner`` can look like:
294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314

.. code-block:: toml

    concurrent = 1
    check_interval = 0

    [[runners]]
    name = "190716-macbookpro"
    url = "https://git.rwth-aachen.de/"
    token = "<PRIVATE_TOKEN>"
    executor = "docker"
    environment = ["DOCKER_TLS_CERTDIR="]
    [runners.docker]
        tls_verify = false
        image = "docker:stable"
        privileged = true
        disable_cache = false
        volumes = ["/cache"]
        shm_size = 0
        pull_policy = "if-not-present"
    [runners.cache]
Lambert Theisen's avatar
Lambert Theisen committed
315

Lambert Theisen's avatar
Lambert Theisen committed
316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338
macOS Native FEniCS Installation (not recommended)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

#. Install ``miniconda`` from `here <https://conda.io/projects/conda/en/latest/user-guide/install/macos.html>`_
    #. If using ``zsh``, add miniconda bins to PATH: ``export PATH="$HOME/ miniconda3/bin:$PATH"`` to ``~/.zshrc``
    #. Maybe, activation has to be done with executing ``<path to  miniconda>/bin/activate``
    #. Optional: Create separate coda environment: ``conda creafenics-env``
#. Install FEniCS using conda: ``conda install -c conda-forge fenics``
    #. Optional: Install ``matplobib``: ``conda install -c conda-forge  matplotlib``
    #. Optional: Install ``meshio``: ``conda install -c mrossi meshio``
    #. Optional (for linting): ``conda install pylint``
    #. Install mshr with ``conda install -c conda-forge mshr``
    #. Fix macOS bug in matplotbib: ``mkdir -p ~/.matplotlib; echo  "backend: TkAgg" > ~/.matplotlib/matplotlibrc``
    #. XCode and command line developer tools msut be installed!
    #. Optional: Install Jupyter: ``conda install -c anaconda jupyter``
    #. Optional: Install documentation system: ``conda install -c anaconda  sphinx``
    #. Optional: ``conda install -c anaconda sympy``

Further Installation Tips
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

**Interactive Jupyter Notebooks with Microsoft's Visual Studio Code**

Manuel Torrilhon's avatar
Manuel Torrilhon committed
339
This is may be a convenient solution.
340
Run a file with ``%run ../../fenicsr13/fenicsr13.py``
Lambert Theisen's avatar
Lambert Theisen committed
341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377

**X11 Window Forwarding on OSX**

See guide_ for the programs to install. Then source the ``open-macos-gui-tunnel.sh`` with ``. open-macos-gui-tunnel``. Afterwards, start the container and run the ``change-matplotbib-backend-tkagg.sh`` script to set the right ``matplotlib``'s output.

.. _guide: http://joshuamccall.com/articles/docker.html

**X11 Window Forwarding on Windows**

A nice guide can be found `here on Dev.to`_.

.. _`here on Dev.to`: https://dev.to/darksmile92/run-gui-app-in-linux-docker-container-on-windows-host-4kde

The steps can be summarized as:

1. Install the package manager `Chocolatey`_.

    .. code-block:: dosbatch

        REM comment: open cmd.exe as admin
        @"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"

2. Open ``cmd.exe`` as admin and install `VcXsrv Windows X Server`_.

    .. code-block:: bash

        choco install vcxsrv
3. Open a X11 server and set the ``ip`` variable (that is used in the ``docker-compose.yml`` when starting the Docker container to set ``export DISPLAY=${ip}:0``).

    .. code-block:: bash

        # home of this repo
        source sripts/open-windows-gui-tunnel.sh

.. _`Chocolatey`: https://chocolatey.org/
.. _`VcXsrv Windows X Server`: https://sourceforge.net/projects/vcxsrv/

Lambert Theisen's avatar
Lambert Theisen committed
378
Contact
Lambert Theisen's avatar
Lambert Theisen committed
379
--------------------------------------------------------------------------------
Lambert Theisen's avatar
Lambert Theisen committed
380 381 382 383 384 385

:Author:
    | Lambert Theisen
    | lambert.theisen@rwth-aachen.de
:Supervisor:
    | Prof. Dr. Manuel Torrilhon
Lambert Theisen's avatar
Lambert Theisen committed
386
    | Lehrstuhl für Mathematik (MathCCES)
Lambert Theisen's avatar
Lambert Theisen committed
387 388 389
    | RWTH Aachen University
    | mt@mathcces.rwth-aachen.de

390 391
.. |pipeline| image:: https://git.rwth-aachen.de/lamboo/fenicsR13/badges/master/pipeline.svg
    :target: https://git.rwth-aachen.de/lamboo/fenicsR13/commits/master
Lambert Theisen's avatar
Lambert Theisen committed
392 393
    :alt: Pipeline status

394
.. |coverage| image:: https://git.rwth-aachen.de/lamboo/fenicsR13/badges/master/coverage.svg
Lambert Theisen's avatar
Lambert Theisen committed
395
    :target: https://git.rwth-aachen.de/lamboo/fenicsR13/pipelines
Lambert Theisen's avatar
Lambert Theisen committed
396
    :alt: Test coverage
397

Lambert Theisen's avatar
Lambert Theisen committed
398
.. |version| image:: https://img.shields.io/badge/version-1.4-blue.svg
Lambert Theisen's avatar
Lambert Theisen committed
399
    :target: https://git.rwth-aachen.de/lamBOO/fenicsR13/-/tags
400
    :alt: Documentation Website
401

402 403
.. |zenodo| image:: https://zenodo.org/badge/DOI/10.5281/zenodo.3673039.svg
    :target: https://doi.org/10.5281/zenodo.3673039
Lambert Theisen's avatar
Lambert Theisen committed
404 405
    :alt: Zenodo Link with DOI

406
.. |website| image:: https://img.shields.io/badge/doc-https%3A%2F%2Flamboo.pages.rwth--aachen.de%2FfenicsR13%2F-blue.svg
Lambert Theisen's avatar
Lambert Theisen committed
407
    :target: https://lamboo.pages.rwth-aachen.de/fenicsR13/
408
    :alt: Documentation Website