base on High-performance high-order finite element solver for hyperbolic conservation equations <img align="right" height="150" src="doc/logo.png">
ryujin
======
Ryujin is a high-performance high-order collocation-type finite-element
solver for conservation equations such as the compressible Navier-Stokes
and Euler equations of gas dynamics. The solver is based on the [convex
limiting technique](https://doi.org/10.1137/17M1149961) to ensure
[invariant domain preservation](https://doi.org/10.1137/16M1074291) and
uses the finite element library [deal.II](https://github.com/dealii/dealii)
([website](https://www.dealii.org)) and the [vector class SIMD
library](https://github.com/vectorclass/version2). As such the solver
maintains important physical invariants and is guaranteed to be stable
without the use of ad-hoc tuning parameters.
Ryujin is freely available under the terms of the
[Apache License 2.0](https://spdx.org/licenses/Apache-2.0.html)
with [LLVM Exception](https://spdx.org/licenses/LLVM-exception.html).
Part of the contributed source code, third-party dependencies and header
libraries are covered by different open source licenses. For details
consult [COPYING.md](COPYING.md). Contributions to the ryujin source code
are governed by the [Developer Certificate of Origin version
1.1](https://developercertificate.org/); see
[CONTRIBUTING.md](CONTRIBUTING.md) for details.
Modules
-------
Ryujin features the following equation modules selectable by the following
parameter flags:
- `equation = euler`, an optimized solver module for the
[compressible Euler
equations](https://en.wikipedia.org/wiki/Euler_equations_(fluid_dynamics))
with polytropic equation of state.
- `equation = euler aeos`, a generalized solver module for the
compressible Euler equation with an [arbitrary or tabulated equation of
state](https://en.wikipedia.org/wiki/Equation_of_state).
- `equation = navier stokes`, an optimized solver module for the
[compressible Navier-Stokes
equations](https://en.wikipedia.org/wiki/Navier%E2%80%93Stokes_equations)
with polytropic equation of state,
Newtonian fluid model, and Fourier's law for the heat flux.
- `equation = shallow water`, a module for the [shallow water
equations](https://en.wikipedia.org/wiki/Shallow_water_equations).
- `equation = scalar conservation`, a module for scalar conservation
equations with user-supplied flux. The module features a greedy
wave-speed estimate to maintain an invariant domain, a generic indicator
based on the entropy-viscosity commutator technique with a general,
entropy-like function, and a customizable convex limiter.
Resources
---------
- [Website](https://conservation-laws.org/)
- [Installation instructions](./INSTALLATION.md)
- [Usage instructions](./USAGE.md)
- [Doxygen documentation](https://conservation-laws.org/ryujin/doxygen)
Videos
------
A number of simulation results can be found on [this youtube
channel](https://www.youtube.com/@matthiasmaier8956).
[<img src="https://img.youtube.com/vi/ig7R3yA7CtE/maxresdefault.jpg" width="400"/>](https://www.youtube.com/watch?v=ig7R3yA7CtE)
[<img src="https://img.youtube.com/vi/yM2rT3teakE/maxresdefault.jpg" width="400"/>](https://www.youtube.com/watch?v=yM2rT3teakE)
[<img src="https://img.youtube.com/vi/xIwJZlsXpZ4/0.jpg" width="400"/>](https://www.youtube.com/watch?v=xIwJZlsXpZ4)
[<img src="https://img.youtube.com/vi/pPP26zelb0M/0.jpg" width="400"/>](https://www.youtube.com/watch?v=pPP26zelb0M)
[<img src="https://img.youtube.com/vi/vBCRAF_c8m8/0.jpg" width="400"/>](https://www.youtube.com/watch?v=vBCRAF_c8m8)
[<img src="https://img.youtube.com/vi/xecIZylotSE/0.jpg" width="400"/>](https://www.youtube.com/watch?v=xecIZylotSE)
There original videos are available
[here](https://tamiko.43-1.org/developer/) ([license
details](https://tamiko.43-1.org/developer/COPYING.txt)).
References
----------
If you use this software for an academic publication please consider citing
the following references
([[1](https://arxiv.org/abs/2007.00094)],
[[3](https://arxiv.org/abs/2106.02159})]):
```
@article {ryujin-2021-1,
author = {Matthias Maier and Martin Kronbichler},
title = {Efficient parallel 3D computation of the compressible Euler
equations with an invariant-domain preserving second-order
finite-element scheme},
doi = {10.1145/3470637},
url = {https://arxiv.org/abs/2007.00094},
journal = {ACM Transactions on Parallel Computing},
year = {2021},
volume = {8},
number = {3},
pages = {16:1-30},
}
@article{ryujin-2021-3,
author = {Jean-Luc Guermond and Martin Kronbichler and Matthias Maier and
Bojan Popov and Ignacio Tomas},
title = {On the implementation of a robust and efficient finite
element-based parallel solver for the compressible Navier-stokes
equations},
doi = {10.1016/j.cma.2021.114250},
url = {https://arxiv.org/abs/2106.02159},
journal = {Computer Methods in Applied Mechanics and Engineering},
year = {2022},
volume = {389},
pages = {114250},
}
```
Contact
-------
For questions either open an
[issue](https://github.com/conservation-laws/ryujin/issues), or contact
Matthias Maier (
[email protected]).
Developers
----------
- Martin Kronbichler ([@kronbichler](https://github.com/kronbichler)), Ruhr University Bochum, Germany
- Matthias Maier ([@tamiko](https://github.com/tamiko)), Texas A&M University, TX, USA
- Ignacio Tomas ([@nachosaurus](https://github.com/nachosaurus)), Texas Tech University, TX, USA
- Eric Tovar ([@ejtovar](https://github.com/ejtovar)), Los Alamos National Laboratory, USA
Contributors
------------
- Wolfgang Bangerth [@bangerth](https://github.com/bangerth), Colorado State University
- Taylor Boylan ([@tmboylan](https://github.com/tmboylan)),
- Jerett Cherry ([@jerret-cc](https://github.com/jerett-cc)), Colorado State University
- Gregory Christian ([@gregorychristian](https://github.com/gregorychristian))
- Bennett Clayton ([@bgclayto](https://github.com/bgclayto))
- Seth Gerberding ([@Gerbeset](https://github.com/Gerbeset)), Texas A&M University, TX, USA
- Jake Harmon ([@harmonj](https://github.com/harmonj)), Los Alamos National Laboratory, USA
- Jordan Hoffart ([@jordanhoffart](https://github.com/jordanhoffart)), Texas A&M University, TX, USA
- David Pecoraro ([@ChrisPec27](https://github.com/ChrisPec27)), Texas A&M University, TX, USA
- Madison Sheridan ([@Helblindi](https://github.com/Helblindi)), Texas A&M University, TX, USA
- Gregory Christian ([@gregorychristian](https://github.com/gregorychristian), Imperial College London, UK
", Assign "at most 3 tags" to the expected json: {"id":"13701","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"