Mattflow
A numerical CFD solver for the Shallow Water Equations
Install / Use
/learn @ThanasisMattas/MattflowREADME
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.
<img src="https://media.giphy.com/media/jpVKPxzBiGoSvNYUrY/giphy.gif" width="265" height="150" /> <img src="https://media.giphy.com/media/VJNqBY7uKP3r0AvCcp/giphy.gif" width="265" height="150" /> <img src="https://media.giphy.com/media/QxYpANpE5snKSrdLJ5/giphy.gif" width="265" height="150" />
| requirements | os | | -------------------- | --------- | | python3 | GNU/Linux | | click >= 7.0 | Windows | | joblib >= 0.13.2 | OSX | | matplotlib >= 3.3.1 | | | numba >= 0.51.2 | | | numpy >= 1.18.5 | | | ffmpeg (optional) | |
Install
$ conda create --name mattflow -y
$ conda activate mattflow
$ conda install -c mattasa mattflow
$ pip install mattflow
Usage
$ mattflow [OPTIONS]
Options:
-m, --mode [drop|drops|rain] [default: drops]
-d, --drops INTEGER number of drops to generate [default: 5]
-s, --style [water|contour|wireframe]
[default: wireframe]
--rotation / --no-rotation rotate the domain [default: True]
-b, --basin render the fluid basin
--show / --no-show [default: True]
--save
--format [mp4|gif] [default: mp4]
--fps INTEGER [default: 18]
--dpi INTEGER [default: 75]
--fig-height INTEGER figure height (width is 1.618 * height)
[default: 18]
--help Show this message and exit.
Shallow Water Equations
SWE is a simplified CFD problem which models the surface of the water, with the assumption<br /> 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<br /> conservation of mass and the conservation of linear momentum (Navier-Stokes) equations, in<br /> case of a horizontal stream bed, with no Coriolis, frictional or viscous forces (wiki).
<img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/9b9d481407c0c835525291740de8d1c446265ce2" class="mwe-math-fallback-image-inline" aria-hidden="true" style="vertical-align: -18ex; width:46ex; height:19ex;" alt="{\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:<br /> η : height<br /> u : velocity along the x axis<br /> υ : velocity along the y axis<br /> ρ : density<br /> g : gravity acceleration
Structure
- pre-process<br /> structured/cartesian mesh
- solution<br />
supported solvers:
- Lax-Friedrichs Riemann | O(Δt, Δx<sup>2</sup>, Δy<sup>2</sup>)
- 2-stage Runge-Kutta | O(Δt<sup>2</sup>, Δx<sup>2</sup>, Δy<sup>2</sup>) | default
- MacCormack | O(Δt<sup>2</sup>, Δx<sup>2</sup>, Δy<sup>2</sup>) | experimental
- post-processing<br /> matplotlib animation
Configuration options
- mesh sizing
- domain sizing
- initial conditions (single drop, multiple drops, rain)
- boundary conditions (currently: reflective)
- solver
- multiprocessing
- plotting style
- animation options
TODO
- GUI
- Cython/C++
- Higher order schemes
- Source terms
- Viscous models
- Algorithm that converts every computational second to a real-time second, modifying the fps at<br />the post-processing animation, because each iteration uses a different time-step (CFL condition).
- Moving objects inside the domain
- 3D
License
GNU General Public License v3.0 <br /> <br />
Special thanks to Marios Mitalidis for the valuable feedback.
<br />Start the flow!
(C) 2019, Athanasios Mattas<br /> thanasismatt@gmail.com
Related Skills
node-connect
337.1kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
83.1kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
337.1kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
83.1kCommit, push, and open a PR
