Skip to main content

A CFD python package for the shallow water equations

Project description

MattFlow

A CFD python package for the shallow water equations.

MattFlow simulates the surface of the water after any initial conditions, such as drops or stones falling on.


requirements os
python3 GNU/Linux
numpy >= 1.19.2 Windows
matplotlib >= 3.3.2
numba >= 0.51.2
joblib >= 0.13.2
ffmpeg (optional)

How to install & run MattFlow

  1. anaconda environment (recommended)
$ conda create --name mattflow python=3 numba
$ conda activate mattflow
$ pip install mattflow
$ mattflow
  1. venv (python>=3.3)
$ python3 -m venv mattflow_env
$ source mattflow_env/bin/activate
$ pip install mattflow
$ mattflow
  1. pip
$ pip install --user mattflow
$ mattflow

Swallow Water Equations

SWE is a simpified CFD problem which models the surface of the water, with the assumption
that the horizontal length scale is much greater than the vertical length scale.

SWE is a coupled system of 3 hyperbolic partial differential equations, that derive from the
conservation of mass and the conservation of linear momentum (Navier-Stokes) equations, in
case of a horizontal stream bed, with no Coriolis, frictional or viscours forces (wiki).

{\displaystyle {\begin{aligned}{\frac {\partial (\rho \eta )}{\partial t}}&+{\frac {\partial (\rho \eta u)}{\partial x}}+{\frac {\partial (\rho \eta v)}{\partial y}}=0,\\[3pt]{\frac {\partial (\rho \eta u)}{\partial t}}&+{\frac {\partial }{\partial x}}\left(\rho \eta u^{2}+{\frac {1}{2}}\rho g\eta ^{2}\right)+{\frac {\partial (\rho \eta uv)}{\partial y}}=0,\\[3pt]{\frac {\partial (\rho \eta v)}{\partial t}}&+{\frac {\partial (\rho \eta uv)}{\partial x}}+{\frac {\partial }{\partial y}}\left(\rho \eta v^{2}+{\frac {1}{2}}\rho g\eta ^{2}\right)=0.\end{aligned}}}

where:
η : height
u : velocity along the x axis
υ : velocity along the y axis
ρ : density
g : gravity acceleration

MattFlow structure

More details at this Colab notebook

  1. configuration of the simulation via a config file
  2. pre-process
    structured/cartesian mesh
  3. solution
    supported solvers:
    • Lax-Friedrichs Riemann    | O(Δt, Δx2, Δy2)
    • 2-stage Runge-Kutta         | O(Δt2, Δx2, Δy2)  | default
    • MacCormack           | O(Δt2, Δx2, Δy2)  | experimental
  4. post-processing
    matplotlib animation

Additional configurations

  • mesh sizing
  • domain sizing
  • initial conditions (single drop, multiple drops, rain)
  • boundary conditions (currently: reflective)
  • solver
  • multiprocessing
  • plotting style
  • animation options

Currently, you can configure the simulation at the config module

TODO

  1. CI
  2. API (TUI-GUI)
  3. Optimization: Moving core to C++ or Cython, Numba
  4. Higher order schemes
  5. Addition of source terms
  6. Addition of viscous models
  7. Algorithm that converts every computational second to a real-time second, playing with the fps
    at the post-processing timelapse, because each iteration uses different time-step (CFL condition)
  8. Moving objects inside the domain
  9. Unstructured mesh
  10. Extent to 3D CFD?


Special thanks to Marios Mitalidis for the valuable feedback.


Start the flow!

(C) 2019, Athanasios Mattas
thanasismatt@gmail.com

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mattflow-1.3.2.tar.gz (23.9 kB view hashes)

Uploaded Source

Built Distribution

mattflow-1.3.2-py3-none-any.whl (42.7 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page