Commit 33a7a68b authored by Pierre Augier's avatar Pierre Augier
Browse files

Merge default in dedalus

Pipeline #34815 passed with stage
in 14 minutes and 8 seconds
......@@ -21,6 +21,8 @@ install:
- "set PATH=%PYTHON%;%PYTHON%\\Scripts;%PATH%"
- python -m pip install -U pip setuptools wheel
- python -m pip install -U pytest black pyfftw scipy
- python -c "import pyfftw as m; print(m)"
- python -m pip install hg+https://foss.heptapod.net/fluiddyn/fluidfft#egg=fluidfft
build_script:
- pip install -e .[fft]
......
variables:
CODECOV_TOKEN: 4d2d8534-60ec-48b3-bf55-93b92f25913d
tests:
image: fluiddyn/python3-stable:lastest
script:
- pip install -U pip tox --user
- tox -e py38,py38-fft,codecov
......@@ -17,6 +17,7 @@ __pycache__
.venv/
.pytest_cache/
.mypy_cache/
.coverage/
bench/launcher_*
bench/SLURM*
......@@ -26,8 +27,7 @@ doc/_build/*
doc/**generated/*
doc/**.zip
doc/ipynb/*_files/*.png
doc/ipynb/**/*.rst
**.nbconvert.ipynb
**.executed.ipynb
*.ipynb_checkpoints*
*Untitled*.ipynb
......@@ -39,7 +39,6 @@ dist/*.tar.gz
dist*
.eggs/*
.tox/*
.coverage/*
*.so
......@@ -54,6 +53,9 @@ scripts\Experiments\path_working_exp.txt
*/*_pythran.cpp
**/__pythran__/*
**/__numba__/*
**/__python__/*
**/__cython__/*
bench/results_bench/*.json
bench/oar_launcher_*
......@@ -67,3 +69,14 @@ bench/FourierFlows/statprof/*
**/oar_launcher_*
site.cfg
*.lock
*.dirlock
**/tmp*
fluidsim_path
scratch
fluidsim/_version.py
doc/examples/htmlcov/*
......@@ -13,3 +13,12 @@ ba06c8d3af26735277951bee4bad51bd408a1272 0.2.1
56f703d7e20f9bfbab8f591916ec0b1c73f76eaa 0.2.2
67e0cc844ecd153d7b38e98000de01f0ee3637ed 0.3.0
d6255e071d976cf78dceec7ff6fd9c8f55736246 0.3.1
7c2f8547ca5cab4822c58e1fd5066ab4c84aa3ba 0.3.2
5526609e3149e2a9a0f485650bd2581f587bd56b 0.3.3
65db318ae78c6a7cb2d80ced2c386c627580c9f3 0.4.0
4b6b21bb49b630405d848926558c85c4955a6098 0.4.1
f64d04b00be8611d67e78a682df3a25a034b118e 0.5.0
78c1f0efb3f65e8ee3e790b8145f56e40f7a3265 0.5.0.post0
ad0583a857a550e8dd4a58ba5226596530b007c9 0.5.1
fee88d78b8e326c9a88f81ccf8cba3d873d9cce3 0.6.0b0
5535cb56719e06b4aade7751d7b0226613bf67fc 0.6.0
./lib
\ No newline at end of file
# Read the Docs configuration file
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
conda:
file: doc/environment.yml
# Required
version: 2
formats:
- none
# Set the version of Python and other tools you might need
build:
os: ubuntu-20.04
tools:
python: "3.9"
# Build documentation in the doc directory with Sphinx
sphinx:
configuration: doc/conf.py
python:
version: 3
setup_py_install: true
\ No newline at end of file
system_packages: true
install:
- requirements: .readthedocs.req
- method: pip
path: .
extra_requirements:
- doc
- fft
sudo: required
dist: xenial
# See https://github.com/travis-ci/travis-ci/issues/9069
dist: focal
language: python
python:
- 3.6
- 3.7
- 3.8
env:
- TOXENV=py,codecov-travis OMPI_CC=/usr/bin/gcc-6 OMPI_CXX=/usr/bin/g++-6
- TOXENV=py-pythran,codecov-travis OMPI_CC=/usr/bin/gcc-6 OMPI_CXX=/usr/bin/g++-6
- TOXENV=py,codecov-travis
- TOXENV=py-pythran,codecov-travis
- TOXENV=py-fft,codecov-travis
addons:
apt:
sources: ubuntu-toolchain-r-test
packages:
- gcc-6
- g++-6
- libfftw3-dev
- libfftw3-mpi-dev
- libhdf5-openmpi-dev
- openmpi-bin
- libopenmpi-dev
- libopenblas-dev
matrix:
fast_finish: true
include:
- python: 3.6
- python: 3.7
env: TOXENV=lint
addons:
# workaround because of the pip install -U ... mpi4py line in install section
apt:
packages: [libopenmpi-dev, openmpi-bin]
allow_failures:
- python: 3.6
- python: 3.7
env: TOXENV=lint
before_cache:
......@@ -48,15 +41,14 @@ cache:
# - $TRAVIS_BUILD_DIR/.tox
install:
- pip install -U pip pipenv tox==3.6 tox-pipenv colorlog coverage fluiddevops
- pip install -U numpy cython mako mpi4py transonic # To be removed when pip==10 is out and this step can be bootstrapped
- pip install -U pip tox colorlog coverage fluiddevops
before_script:
- |
mkdir -p $HOME/.config/matplotlib
echo 'backend : agg' > $HOME/.config/matplotlib/matplotlibrc
echo '[pythran]\ncomplex_hook = True\n[compiler]\nCXX = g++-6\nCC = gcc-6\n' > $HOME/.pythranrc
wget https://bitbucket.org/fluiddyn/fluidfft/raw/default/site.cfg.files/site.cfg.travis_$TRAVIS_OS_NAME -O $HOME/.fluidfft-site.cfg
echo '[pythran]\ncomplex_hook = True\n[compiler]\nCXX = clang++-10\nCC = clang-10\n' > $HOME/.pythranrc
wget https://foss.heptapod.net/fluiddyn/fluidfft/raw/branch/default/site.cfg.files/site.cfg.travis_$TRAVIS_OS_NAME -O $HOME/.fluidfft-site.cfg
script:
- set -o pipefail
......@@ -64,4 +56,4 @@ script:
notifications:
email: false
irc: "chat.freenode.net#fluiddyn-dev"
irc: "chat.freenode.net#fluiddyn-tasks"
......@@ -16,3 +16,8 @@ The main contributors are:
<http://www.legi.grenoble-inp.fr/web/spip.php?auteur223>`_
- `Miguel Calpe Linares (LEGI, CNRS, UGA)
<http://www.legi.grenoble-inp.fr/web/spip.php?auteur328>`_
- `Jason Reneuve (ENS Lyon)
<http://www.ens-lyon.fr/PHYSIQUE/presentation/anciens/reneuve-jason>`_
- Antoine Bardant (LEGI)
- `Vincent Labarre <https://www.researchgate.net/profile/Vincent-Labarre>`__
(`OCA <https://www.oca.eu/fr/fluid>`__)
Changes
=======
0.3.1 (2019-03-07)
------------------
All notable changes to this project will be documented in this file.
The format is based on `Keep a
Changelog <https://keepachangelog.com/en/1.0.0/>`__, and this project
adheres to `Semantic
Versioning <https://semver.org/spec/v2.0.0.html>`__.
.. Type of changes
.. ---------------
.. Added Added for new features.
.. Changed Changed for changes in existing functionality.
.. Deprecated Deprecated for soon-to-be removed features.
.. Removed Removed for now removed features.
.. Fixed Fixed for any bug fixes.
.. Security Security in case of vulnerabilities.
..
Unreleased_
-----------
.. towncrier release notes start
.. _Unreleased: https://foss.heptapod.net/fluiddyn/fluidsim/-/compare/0.6.0...branch%2Fdefault
0.6.0_ (2022-02-07)
-------------------
- New subpackage :mod:`fluidsim.util.scripts` and module
:mod:`fluidsim.util.scripts.turb_trandom_anisotropic` (`!255
<https://foss.heptapod.net/fluiddyn/fluidsim/-/merge_requests/255>`__).
- Entry points console_scripts ``fluidsim-restart`` (`!261
<https://foss.heptapod.net/fluiddyn/fluidsim/-/merge_requests/261>`__) and
``fluidsim-modif-resolution`` (`!263
<https://foss.heptapod.net/fluiddyn/fluidsim/-/merge_requests/263>`__).
- Forcing :class:`fluidsim.base.forcing.anisotropic.TimeCorrelatedRandomPseudoSpectralAnisotropic`
(extension for 3d solvers + new parameter ``params.forcing.tcrandom_anisotropic.delta_angle``)
(`!247 <https://foss.heptapod.net/fluiddyn/fluidsim/-/merge_requests/247>`__).
- New projection functions (toroidal/poloidal) in
:mod:`fluidsim.operators.operators3d` (`!247
<https://foss.heptapod.net/fluiddyn/fluidsim/-/merge_requests/247>`__).
- `! 250 <https://foss.heptapod.net/fluiddyn/fluidsim/-/merge_requests/250>`__:
New parameter ``params.projection`` for ns3d solvers.
The equations (``ns3d``, ``ns3d.strat`` and ``ns3d.bouss``) can be modified by
projecting the solutions on the poloidal or toroidal manifolds.
- Faster loading at Python start (`!264
<https://foss.heptapod.net/fluiddyn/fluidsim/-/merge_requests/264>`__)
- Various bugfixes, in particular related to restart.
0.5.1_ (2021-11-05)
-------------------
- `!244 <https://foss.heptapod.net/fluiddyn/fluidsim/-/merge_requests/244>`__:
Taylor Green forcing for ns3d solvers
- fluidsim-core: change order for the initialization of the parameters: Simul
class before the subclasses.
0.5.0_ (2021-09-29)
-------------------
Added
~~~~~
* `!200 <https://foss.heptapod.net/fluiddyn/fluidsim/-/merge_requests/200>`__ :
New mechanism to easily extend a Simul class (subpackage
:mod:`fluidsim.extend_simul`).
* `!201 <https://foss.heptapod.net/fluiddyn/fluidsim/-/merge_requests/201>`__ :
Improve FluidSim Core API with a warning and a convenience function
- Warnings added when ``_set_attrib`` is called instead of ``_set_child`` by
a InfoSolver instance
- New function ``iter_complete_params``
* Output ``spatial_means_regions_milestone.py`` using :mod:`fluidsim.extend_simul`.
* New options ``no_vz_kz0`` and ``NO_KY0``.
* Spatiotemporal spectra and many improvements for the temporal spectra for
ns3d and ns2d solvers by Jason Reneuve (`!202
<https://foss.heptapod.net/fluiddyn/fluidsim/-/merge_requests/202>`__, ...)
* Better Burgers1d solvers (by Ashwin Vishnu)
Changed
~~~~~~~
* `!200 <https://foss.heptapod.net/fluiddyn/fluidsim/-/merge_requests/200>`__ :
(internal) :class:`fluidsim_core.info.InfoSolverCore`: ``__init__`` now fully
initializes the instance (calling the method ``complete_with_classes``). New
keyword argument ``only_root`` to initialize only the root level.
* `!211 <https://foss.heptapod.net/fluiddyn/fluidsim/-/merge_requests/211>`__ :
Replace for ns2d solvers the output ``frequency_spectra`` (nearly not used) by
the newer output ``temporal_spectra`` written for ns3d solvers.
Fixed
~~~~~
* Many bugfixes!
0.4.1_ (2021-02-02)
-------------------
Few bugfixes and `!192 <https://foss.heptapod.net/fluiddyn/fluidsim/-/merge_requests/192>`__
(temporal spectra for ns3d solvers).
0.4.0_ (2021-01-11)
-------------------
* `!186 <https://foss.heptapod.net/fluiddyn/fluidsim/-/merge_requests/186>`__: Package split into ``fluidsim-core`` and ``fluidsim``
- Base classes and abstract base classes defined for ``params``, ``info_solver``, ``sim``, ``output`` instances
- Entry points as a *plugin framework* to register FluidSim solvers
* ``base/output/print_stdout.py``: better regularity saving + method ``plot_clock_times``
* Able to run bigger simulations (``2034x2034x384``) on the Occigen cluster (in
particular new function ``fluidsim.modif_resolution_from_dir_memory_efficient``)
0.3.3_ (2020-10-15)
-------------------
- Bugfixes and optimizations (in particular for ns3d solvers)
- Forcing WATU Coriolis and Milestone for ns3d.strat
- pyproject.toml and isolated build
- Timestepping using phase-shifting for dealiasing
- Improve regularity of saving for some outputs
0.3.2_ (2019-11-14)
-------------------
- Bug fixes and Transonic 0.4 compatibility
0.3.1_ (2019-03-07)
-------------------
- Windows compatibility
- Only Python code (stop using Cython)
- Improvements ns2d.strat
0.3.0 (2019-01-31)
------------------
0.3.0_ (2019-01-31)
-------------------
- Drop support for Python 2.7!
- Accelerated by Transonic & Pythran (also time stepping)
......@@ -17,19 +159,19 @@
- Fix several bugs :-)
- New function load_for_restart
0.2.2 (2018-07-01)
------------------
0.2.2_ (2018-07-01)
-------------------
- Let fluidfft decides which FFT class to use (dependency fluidfft >= 0.2.4)
0.2.1 (2018-05-24)
------------------
0.2.1_ (2018-05-24)
-------------------
- IPython magic commands (by Ashwin Vishnu).
- Bugfix divergence-free flow and time_stepping in ns3d solvers.
0.2.0 (2018-05-04)
------------------
0.2.0_ (2018-05-04)
-------------------
- Many bugfixes and nicer code (using the Python code formatter Black).
- Faster ns3d solver.
......@@ -89,3 +231,17 @@ Merge with geofluidsim (Ashwin Vishnu Mohanan repository)
- Split the package fluiddyn between one base package and specialized
packages.
.. _Unreleased: https://foss.heptapod.net/fluiddyn/fluidsim/-/compare/0.6.0...branch%2Fdefault
.. _0.6.0: https://foss.heptapod.net/fluiddyn/fluidsim/-/compare/0.5.1...0.6.0
.. _0.5.1: https://foss.heptapod.net/fluiddyn/fluidsim/-/compare/0.5.0...0.5.1
.. _0.5.0: https://foss.heptapod.net/fluiddyn/fluidsim/-/compare/0.4.1...0.5.0
.. _0.4.1: https://foss.heptapod.net/fluiddyn/fluidsim/-/compare/0.4.0...0.4.1
.. _0.4.0: https://foss.heptapod.net/fluiddyn/fluidsim/-/compare/0.3.3...0.4.0
.. _0.3.3: https://foss.heptapod.net/fluiddyn/fluidsim/-/compare/0.3.2...0.3.3
.. _0.3.2: https://foss.heptapod.net/fluiddyn/fluidsim/-/compare/0.3.1...0.3.2
.. _0.3.1: https://foss.heptapod.net/fluiddyn/fluidsim/-/compare/0.3.0...0.3.1
.. _0.3.0: https://foss.heptapod.net/fluiddyn/fluidsim/-/compare/0.2.2...0.3.0
.. _0.2.2: https://foss.heptapod.net/fluiddyn/fluidsim/-/compare/0.2.1...0.2.2
.. _0.2.1: https://foss.heptapod.net/fluiddyn/fluidsim/-/compare/0.2.0...0.2.1
.. _0.2.0: https://foss.heptapod.net/fluiddyn/fluidsim/-/compare/0.1.1...0.2.0
# How to contribute to FluidDyn and fluidsim
Thank you for considering contributing to FluidDyn. FluidDyn is a
community-driven project. It's people like you that make FluidDyn useful and
successful. There are many ways to contribute, from writing tutorials or
examples, improvements to the documentation, submitting bug reports and feature
requests, or even writing code which can be incorporated into FluidDyn for
everyone to use. (paragraph shamelessly taken and adapted from the MetPy
project!)
## Reporting Issues
When opening an issue to report a problem
(<https://foss.heptapod.net/fluiddyn/fluidsim/issues>), please try to provide a
minimal code example that reproduces the issue along with details of the system
you are using. You can copy-paste the output of the command `fluidinfo -v`
([Github gists](https://gist.github.com/) are good for that!).
## Development process
For FluidDyn, we use the revision control software Mercurial and our main
repositories are hosted here: <https://foss.heptapod.net/fluiddyn>.
Please read our documentation on [developer
essentials](https://fluiddyn.readthedocs.io/en/latest/advice_developers.html),
and especially on [setting up
Mercurial](https://fluiddyn.readthedocs.io/en/latest/mercurial_heptapod.html).
How to
======
How to upload to PyPI — the Python Package Index
------------------------------------------------
First, run the tests::
python -m unittest discover
With a correct $HOME/.pypirc, run::
python setup.py sdist upload
......@@ -2,6 +2,4 @@ include *.py
include *.txt
include *.rst
recursive-include doc *.rst
recursive-include fluidsim *.pyx
recursive-include fluidsim *.c
recursive-include include *.h
prune lib
# Second tag after tip is usually the latest release
RELEASE=$(shell hg tags -T "{node|short}\n" | sed -n 2p)
.PHONY: black clean clean_pyc clean_so cleantransonic coverage_short develop develop_lib develop_user dist lint _report_coverage shortlog tests _tests_coverage tests_mpi
develop:
develop: develop_lib
pip install -v -e .[dev] | grep -v link
develop_lib:
cd lib && pip install -e .
develop_user:
pip install -v -e .[dev] --user | grep -v link
develop_no-build-isolation: develop_lib
pip install -e .[dev] --no-build-isolation
dist:
cd lib && python setup.py sdist bdist_wheel
python setup.py sdist
mv -f lib/dist/* dist/
clean_so:
find fluidsim -name "*.so" -delete
......@@ -14,33 +26,36 @@ clean_pyc:
find fluidsim -name "*.pyc" -delete
find fluidsim -name "__pycache__" -type d | xargs rm -rf
cleanpythran:
cleantransonic:
find fluidsim -type d -name __pythran__ | xargs rm -rf
find fluidsim -name "*pythran*.cpp" -delete
find fluidsim -name "*pythran*.so" -delete
find fluidsim -type d -name __python__ | xargs rm -rf
find fluidsim -type d -name __numba__ | xargs rm -rf
find fluidsim -type d -name __cython__ | xargs rm -rf
clean:
rm -rf build
rm -rf build lib/build lib/dist
cleanall: clean clean_so cleanpythran
cleanall: clean clean_so cleantransonic
shortlog:
@hg log -M -r$(RELEASE): --template '- {desc|firstline} (:rev:`{node|short}`)\n'
black:
black -l 82 fluidsim
black -l 82 fluidsim scripts bench doc lib --exclude "/(__pythran__|doc/_build|\.ipynb_checkpoints/*)/"
tests:
pytest -v lib
fluidsim-test -v
tests_mpi:
mpirun -np 2 fluidsim-test -v
mpirun -np 2 --oversubscribe fluidsim-test -v
_tests_coverage:
mkdir -p .coverage
coverage run -p -m pytest -v -s lib
coverage run -p -m fluidsim.util.testing -v
TRANSONIC_NO_REPLACE=1 coverage run -p -m fluidsim.util.testing -v
TRANSONIC_NO_REPLACE=1 mpirun -np 2 coverage run -p -m fluidsim.util.testing -v
TRANSONIC_NO_REPLACE=1 mpirun -np 2 --oversubscribe coverage run -p -m fluidsim.util.testing -v
_report_coverage:
coverage combine
......@@ -60,5 +75,10 @@ coverage_short:
lint:
pylint -rn --rcfile=pylintrc --jobs=$(shell nproc) fluidsim --exit-zero
install:
python setup.py install
pytest_cov_html:
rm -rf .coverage
mkdir -p .coverage
TRANSONIC_NO_REPLACE=1 pytest -v --cov --cov-config=setup.cfg $(PYTEST_ARGS) --durations=10
coverage html
@echo "Code coverage analysis complete. View detailed report:"
@echo "file://${PWD}/.coverage/index.html"
......@@ -2,9 +2,9 @@
|logo|
======
|release| |pyversions| |docs| |coverage| |travis| |chat|
|release| |pyversions| |docs| |coverage| |heptapod_ci| |chat|
.. |logo| image:: https://bitbucket.org/fluiddyn/fluidsim/raw/default/doc/logo.svg
.. |logo| image:: https://foss.heptapod.net/fluiddyn/fluidsim/raw/branch/default/doc/logo.svg
:alt: FluidSim
.. |release| image:: https://badge.fury.io/py/fluidsim.svg
......@@ -18,24 +18,24 @@
:target: http://fluidsim.readthedocs.org
:alt: Documentation status
.. |coverage| image:: https://codecov.io/bb/fluiddyn/fluidsim/branch/default/graph/badge.svg
:target: https://codecov.io/bb/fluiddyn/fluidsim
.. |coverage| image:: https://codecov.io/gh/fluiddyn/fluidsim/branch/branch%2Fdefault/graph/badge.svg
:target: https://codecov.io/gh/fluiddyn/fluidsim
:alt: Code coverage
.. |travis| image:: https://travis-ci.org/fluiddyn/fluidsim.svg?branch=master
:target: https://travis-ci.org/fluiddyn/fluidsim
:alt: Travis CI status
.. |heptapod_ci| image:: https://foss.heptapod.net/fluiddyn/fluidsim/badges/branch/default/pipeline.svg
:target: https://foss.heptapod.net/fluiddyn/fluidsim/-/pipelines
:alt: Heptapod CI
.. |chat| image:: https://img.shields.io/matrix/fluiddyn-users:matrix.org.svg
:target: https://matrix.to/#/#fluiddyn-users:matrix.org
:alt: Chat room
.. description
.. |binder| image:: https://mybinder.org/badge_logo.svg
:target: https://mybinder.org/v2/gh/fluiddyn/fluidsim/master?urlpath=lab/tree/doc/ipynb
:target: https://mybinder.org/v2/gh/fluiddyn/fluidsim/branch%2Fdefault?urlpath=lab/tree/doc/ipynb
:alt: Binder notebook
.. description
Fluidsim is an extensible framework for studying fluid dynamics with numerical
simulations using Python. Fluidsim is an object-oriented library to develop
solvers (mainly using pseudo-spectral methods) by writing mainly Python code.
......@@ -46,61 +46,23 @@ since the time-consuming tasks are performed by optimized compiled functions.
Getting started
---------------
To try fluidsim without installation: |binder|
For a **basic installation** it should be sufficient to run::
pip install fluidsim --no-cache-dir [--user]
Add ``--user`` flag if you do not have permission to write in the directory of
the python executable and you don't want to / can't setup a virtual environment
or use pyenv or conda.
Installation
------------
To take full advantage of fluidsim, consider installing the following
(optional) dependencies and configurations before installing fluidsim. Click on
the links to know more:
1. OpenMPI or equivalent
2. FFT libraries such as MPI-enabled FFTW (for 2D and 3D solvers) and P3DFFT,
PFFT (for 3D solvers) either using a package manager or `from source
<https://fluidfft.readthedocs.io/en/latest/install/fft_libs.html>`__
3. Install optional Python `package dependencies
<https://fluidsim.readthedocs.io/en/latest/install.html#dependencies>`__
4. `A C++11 compiler and BLAS
libraries <https://pythran.readthedocs.io/en/latest/#installation>`__ and
`configure
<https://fluidsim.readthedocs.io/en/latest/install.html#dependencies>`__
``~/.pythranrc`` to customize compilation of Pythran extensions
5. `Configure
<https://fluidfft.readthedocs.io/en/latest/install.html#basic-installation-with-pip>`__
``~/.fluidfft-site.cfg`` to detect the FFT libraries and install
``fluidfft``
**Note**: Detailed instructions to install the above dependencies using Anaconda
/ Miniconda or in a specific operating system such as Ubuntu, macOS etc. can be
found `here
<https://fluiddyn.readthedocs.io/en/latest/get_good_Python_env.html>`__.
You can get the source code from `Bitbucket
<https://bitbucket.org/fluiddyn/fluidsim>`__ or from `the Python
Package Index <https://pypi.python.org/pypi/fluidsim/>`__.
The development mode is often useful if you intend to modify fluidsim . From
the root directory::
python setup.py develop
Tests
-----
After installing fluidsim run the tests to ensure everything works::
fluidsim-test
mpirun -np 2 fluidsim-test
pip install fluidsim
or with conda::
conda install -c conda-forge fluidsim
Much more detailed instructions are given in `the documentation
<https://fluidsim.readthedocs.io/en/latest/install.html>`__.
How does it work?
-----------------
Fluidsim is a `HPC <https://en.wikipedia.org/wiki/High-performance_computing>`_
code. It is part of the wider project `FluidDyn
<https://pypi.python.org/pypi/fluiddyn/>`_ and its pseudospectral solvers rely
......@@ -144,7 +106,6 @@ presenting the `FluidDyn project
`FluidSim
<https://openresearchsoftware.metajnl.com/articles/10.5334/jors.239/>`__:
.. code ::