Compute classical and quantum Euler solutions
Project description
Classical and Quantum Ideal Gases
Exact Riemann solvers for classical and quantum Euler gases, with a fast polylogarithm kernel used to resolve the quantum equation of state.
This repository ports the MATLAB implementation found in this thesis to Python 3.11. The polylog function has been ported from the MATLAB implementation to C++ and the Toro exact Riemann solver has been extended to support Fermi–Dirac (FD), Bose–Einstein (BE), and Maxwell–Boltzmann (MB) statistics.
Requirements
Building from source additionally requires a C++17 compiler. See DEVELOPER_GUIDE.md.
Installation
pip install ideal-gases
For plotting (euler plot, interactive explorers):
pip install ideal-gases[plot]
After install, the euler command-line tool is available.
Interactive mode
Launch matplotlib widget explorers to build custom Riemann problems with sliders, statistic toggles (quantum), and Save/Reset controls. Y-axis limits autoscale automatically on each update.
euler interactive classical
euler interactive quantum
Seed the initial state from CLI flags or a JSON config (same fields as euler solve):
euler interactive classical --gamma 1.4 --t-end 0.5 --nx 101
euler interactive quantum --rho-l 2 --t-l 1.5 --n 3 --h 0.5
euler interactive classical --config case.json
Optional domain flags (--x-min, --x-max, --x0, --nx) default to an interactive Sod-tube layout (x in [-10, 10], discontinuity at x0=0, nx=1024). Use -f path.png to set the Save button target; nothing is written until you click Save.
Example usage
euler interactive quantum
Outputs a Sod shock tube problem resolved with a quantum Euler solver for all statistics. We deactivate the solutions of MB and BE to focus on the FD solution. Using the slider, we can vary the left and right states and the thermal scale parameter h and the number of degrees of freedom n of the gas.
In Fig. 5 of Hu and Jing (2010), a fictitious 2-d fermi gas degenerate regime is used to prove the accuracy of Kinetic Flux Vector Splitting schemes for quantum Euler equations. Using the interactive mode, we set n : 2 and set the left and right states ($\rho,u,\theta$). Using the h slider, we found that the degenerate gas is resolved approximately for h $\approx$ 3.71.
As show in the following figure:
Command-line mode
Compute exact solution profiles, save plots to PNG, and write CSV/JSON files with the solution fields.
Classical Sod shock tube
euler solve classical \
--rho-l 1 --u-l 0 --p-l 1 \
--rho-r 0.125 --u-r 0 --p-r 0.1 \
--t-end 0.25 --gamma 1.4 \
--nx 101 -o sod.csv
Quantum Euler
euler solve quantum \
--rho-l 1 --u-l 0 --t-l 1 \
--rho-r 0.125 --u-r 0 --t-r 0.25 \
--t-end 0.20 --n 2 --h 0.1 --statistic FD \
-o euler_fd.csv
Write separate files for FD, MB, and BE with --all-statistics (e.g. euler_case7_FD.csv, euler_case7_MB.csv, euler_case7_BE.csv):
euler solve quantum ... --all-statistics -o euler_case7
Built-in benchmarks
euler toro 1 -o toro_test1.csv
euler list --toro
euler quantum-example 7 --all-statistics -o euler_eg7
euler list --quantum
JSON config files
Define a problem in JSON and run it with euler run or pass --config to euler solve:
euler run --config case.json
euler solve classical --config case.json -o override.csv
Example case.json:
{
"mode": "quantum",
"left": {"rho": 1.0, "u": 0.0, "theta": 1.0},
"right": {"rho": 0.125, "u": 0.0, "theta": 0.25},
"t_end": 0.20,
"n": 2.0,
"h": 0.1,
"statistic": "FD",
"all_statistics": true,
"format": "json",
"output": "euler_case7",
"domain": {"x_min": 0.0, "x_max": 1.0, "x0": 0.5, "nx": 101}
}
Use --format json (or a .json output path) for JSON instead of CSV. CLI flags override values from the config file.
Visualization
Save a classical Sod shock tube figure:
euler plot classical \
--rho-l 1 --u-l 0 --p-l 1 \
--rho-r 0.125 --u-r 0 --p-r 0.1 \
--t-end 0.2 --gamma 1.4 --nx 101 \
-f sod.png
Plot a single quantum statistic or compare FD/MB/BE:
euler plot quantum \
--rho-l 1 --u-l 0 --t-l 1 \
--rho-r 0.125 --u-r 0 --t-r 0.25 \
--t-end 0.20 --n 2 --h 0.1 --statistic FD \
-f qfd.png
euler plot quantum-example 7 --all-statistics -f eg7
With --all-statistics, -f eg7 writes eg7_panels.png (3×6 grid) and eg7_comparison.png (overlay). Use --layout panels|comparison|both to select one or both (default: both). Add --show for an interactive window, or -o to export CSV/JSON in the same run.
Example usage
In Filbet, Hu and Jing (2010), the authors use a Sod shock tube initial condition with a fictitious 2-d fermi and bose gas to prove the accuracy of their numerical scheme in classical and quantum hydronamic regimes. These are examples 7 and 8, respectively, in the CLI plot tool.
euler plot quantum-example 7 --all-statistics -f sod_2d_gas_classical --layout comparison --show
yields the following plot:
euler plot quantum-example 8 --all-statistics -f sod_2d_gas_quantum --layout comparison --show
yields the following plot:
Python module
Import ideal_gases to compute classical and quantum gas solutions in your own scripts.
Classical Sod shock tube
import numpy as np
from ideal_gases import classical_gas
x = np.linspace(0.0, 1.0, 101)
result = classical_gas(
rho_l=1.0,
u_l=0.0,
p_l=1.0,
rho_r=0.125,
u_r=0.0,
p_r=0.1,
t_end=0.2,
gamma=1.4,
x=x,
x0=0.5,
)
Quantum Euler (FD / BE / MB)
Left and right states are given in terms of density rho, velocity u, and temperature theta (written t in the API). The solver converts these to effective pressures via the quantum EOS, then applies the Toro exact Riemann solver.
import numpy as np
from ideal_gases import quantum_gas
x = np.linspace(0.0, 1.0, 101)
result = quantum_gas(
rho_l=1.0,
u_l=0.0,
t_l=1.0,
rho_r=0.125,
u_r=0.0,
t_r=0.25,
t_end=0.20,
n=2.0, # degrees of freedom; gamma = (n+2)/n
h=0.1, # thermal scale parameter
statistic="FD", # "FD", "BE", or "MB"
x=x,
x0=0.5,
)
This returns a RiemannResult object that contains the solution fields: x, rho, ux, p, e, z (fugacity), t (temperature), mach, entropy.
In the classical limit, MB statistics with h → 0 recover the ideal-gas behaviour (pressures p = rho * theta).
Polylogarithm module
The polylogarithm module is used to compute the fermi and bose quantum functions. The current implementation is based on the Bhagat approximation and Sommerfeld's lemma. Providing up to 6 digits of accuracy for the polylogarithm function for half-integer orders. This is a trade-off between accuracy and performance.
Nevertheless, it is known that this approximation might fail for z values very close to 1.0 (i.e. the degenerate limit of Bose gases and a known discontinuity in the polylogarithm function).
NOTE: This is a known issue and the author is working on a more accurate implementation.
We can use the polylogarithm module on our scripts as follows:
import numpy as np
from ideal_gases import polylog
polylog(2, 0.5) # scalar
polylog(1.5, np.linspace(0.2, 0.9, 50)) # array
We can plot the polylogarithm function to verify the accuracy of the implementation for integer and half-integer orders as follows:
uv run scripts/plot_polylogarithms.py
yields the following plot:
Public API
from ideal_gases import (
RiemannResult,
adiabatic_index,
classical_gas,
quantum_gas,
polylog,
)
| Symbol | Role |
|---|---|
polylog(n, z) |
Fast polylogarithm (scalar or NumPy array) |
adiabatic_index(n) |
Returns γ = (n + 2) / n |
classical_gas(...) |
Classical ideal-gas exact Riemann solver |
quantum_gas(...) |
Quantum EOS + Toro exact Riemann solver |
RiemannResult |
Solution profiles on the spatial grid |
License
MIT License. See LICENSE for the full text.
Copyright (c) 2026 Manuel A. Diaz
For building from source, tests, linting, CI, and releases, see DEVELOPER_GUIDE.md.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ideal_gases-0.1.3.tar.gz.
File metadata
- Download URL: ideal_gases-0.1.3.tar.gz
- Upload date:
- Size: 571.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2e228f64371baa850f880713f5bb282c639fa4eda9b0b2f9adbcb559aee2a361
|
|
| MD5 |
e2492eff1d84931304071fbfd3f92f2e
|
|
| BLAKE2b-256 |
c2eb7956ba69720855cccf3bf8c5433f6a211fe62c00ca5aa27d1ab1fa57ebc7
|
Provenance
The following attestation bundles were made for ideal_gases-0.1.3.tar.gz:
Publisher:
publish.yml on wme7/ideal-gases
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ideal_gases-0.1.3.tar.gz -
Subject digest:
2e228f64371baa850f880713f5bb282c639fa4eda9b0b2f9adbcb559aee2a361 - Sigstore transparency entry: 2187465944
- Sigstore integration time:
-
Permalink:
wme7/ideal-gases@6406a02af028b85aa5ece6309ea3a8b3351092a3 -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/wme7
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@6406a02af028b85aa5ece6309ea3a8b3351092a3 -
Trigger Event:
push
-
Statement type:
File details
Details for the file ideal_gases-0.1.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: ideal_gases-0.1.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 120.8 kB
- Tags: CPython 3.13, manylinux: glibc 2.24+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
41994ffe23fe83932087c3b932bc79f49b51c04fe489b820785e83a61f9ed963
|
|
| MD5 |
3f3fe1cc477b78b80e1fa5ad1f7c0efc
|
|
| BLAKE2b-256 |
a0bf9dcdc92dc4f11c9cf38e67da2b703dd241b9318e06647bceb9a9bc0d644c
|
Provenance
The following attestation bundles were made for ideal_gases-0.1.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
publish.yml on wme7/ideal-gases
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ideal_gases-0.1.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
41994ffe23fe83932087c3b932bc79f49b51c04fe489b820785e83a61f9ed963 - Sigstore transparency entry: 2187465994
- Sigstore integration time:
-
Permalink:
wme7/ideal-gases@6406a02af028b85aa5ece6309ea3a8b3351092a3 -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/wme7
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@6406a02af028b85aa5ece6309ea3a8b3351092a3 -
Trigger Event:
push
-
Statement type:
File details
Details for the file ideal_gases-0.1.3-cp313-cp313-macosx_11_0_arm64.whl.
File metadata
- Download URL: ideal_gases-0.1.3-cp313-cp313-macosx_11_0_arm64.whl
- Upload date:
- Size: 103.6 kB
- Tags: CPython 3.13, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
42127cf51b7d8c45e943488cf15972383689c69089c575972d9f895822ae364b
|
|
| MD5 |
aba40a7560d9fc3680bb0c54d0569a5a
|
|
| BLAKE2b-256 |
a4a6d434e91de73120b338c5f8ff4704e1f7fba482f934c761577a545c156d49
|
Provenance
The following attestation bundles were made for ideal_gases-0.1.3-cp313-cp313-macosx_11_0_arm64.whl:
Publisher:
publish.yml on wme7/ideal-gases
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ideal_gases-0.1.3-cp313-cp313-macosx_11_0_arm64.whl -
Subject digest:
42127cf51b7d8c45e943488cf15972383689c69089c575972d9f895822ae364b - Sigstore transparency entry: 2187466033
- Sigstore integration time:
-
Permalink:
wme7/ideal-gases@6406a02af028b85aa5ece6309ea3a8b3351092a3 -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/wme7
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@6406a02af028b85aa5ece6309ea3a8b3351092a3 -
Trigger Event:
push
-
Statement type:
File details
Details for the file ideal_gases-0.1.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: ideal_gases-0.1.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 120.9 kB
- Tags: CPython 3.12, manylinux: glibc 2.24+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dee3ae5e839a9da4f99f00112ac6ad8749d00ec53b4c7aa25a44173e512f2ea2
|
|
| MD5 |
233420c1bb5679a87813b4bc84c4884b
|
|
| BLAKE2b-256 |
1f6dd4e2fd83b3bba67bc38abb23589bf5f5b988d0ed0a11664aec31c0effa11
|
Provenance
The following attestation bundles were made for ideal_gases-0.1.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
publish.yml on wme7/ideal-gases
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ideal_gases-0.1.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
dee3ae5e839a9da4f99f00112ac6ad8749d00ec53b4c7aa25a44173e512f2ea2 - Sigstore transparency entry: 2187465980
- Sigstore integration time:
-
Permalink:
wme7/ideal-gases@6406a02af028b85aa5ece6309ea3a8b3351092a3 -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/wme7
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@6406a02af028b85aa5ece6309ea3a8b3351092a3 -
Trigger Event:
push
-
Statement type:
File details
Details for the file ideal_gases-0.1.3-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: ideal_gases-0.1.3-cp312-cp312-macosx_11_0_arm64.whl
- Upload date:
- Size: 103.6 kB
- Tags: CPython 3.12, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e841f80f15e65dda76f464c72417e47d2b71ed714daef79e17f0e363809bccaa
|
|
| MD5 |
3b7a4fc917d87608f2431ee752a7fcd5
|
|
| BLAKE2b-256 |
043e64a62976371e8c77ed8ecd521d2a75ea2de42faf4ac2274df0468846695f
|
Provenance
The following attestation bundles were made for ideal_gases-0.1.3-cp312-cp312-macosx_11_0_arm64.whl:
Publisher:
publish.yml on wme7/ideal-gases
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ideal_gases-0.1.3-cp312-cp312-macosx_11_0_arm64.whl -
Subject digest:
e841f80f15e65dda76f464c72417e47d2b71ed714daef79e17f0e363809bccaa - Sigstore transparency entry: 2187466010
- Sigstore integration time:
-
Permalink:
wme7/ideal-gases@6406a02af028b85aa5ece6309ea3a8b3351092a3 -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/wme7
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@6406a02af028b85aa5ece6309ea3a8b3351092a3 -
Trigger Event:
push
-
Statement type:
File details
Details for the file ideal_gases-0.1.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: ideal_gases-0.1.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 120.1 kB
- Tags: CPython 3.11, manylinux: glibc 2.24+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
51821c4cad751abe2fcf2462992c9231c63be078dc80000f4c26d807517e6ddd
|
|
| MD5 |
88070eb6618f9e42f8a2208bc7274a64
|
|
| BLAKE2b-256 |
9182c5a92f37be779fac310b692236a92b66e5428a2324b0633fe707ebf737a2
|
Provenance
The following attestation bundles were made for ideal_gases-0.1.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:
Publisher:
publish.yml on wme7/ideal-gases
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ideal_gases-0.1.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl -
Subject digest:
51821c4cad751abe2fcf2462992c9231c63be078dc80000f4c26d807517e6ddd - Sigstore transparency entry: 2187465960
- Sigstore integration time:
-
Permalink:
wme7/ideal-gases@6406a02af028b85aa5ece6309ea3a8b3351092a3 -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/wme7
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@6406a02af028b85aa5ece6309ea3a8b3351092a3 -
Trigger Event:
push
-
Statement type:
File details
Details for the file ideal_gases-0.1.3-cp311-cp311-macosx_11_0_arm64.whl.
File metadata
- Download URL: ideal_gases-0.1.3-cp311-cp311-macosx_11_0_arm64.whl
- Upload date:
- Size: 102.4 kB
- Tags: CPython 3.11, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c7f174a56df8522f49c35ced507a7d81acfa4fb82eb1ccb71dd2b372a7f0425a
|
|
| MD5 |
fcf610801b7bc9a77c3b87420d23e2f6
|
|
| BLAKE2b-256 |
f03256ed7b64f7d46f7284eee6b20caa2f32ad2a36815c562621f55d0581b7cd
|
Provenance
The following attestation bundles were made for ideal_gases-0.1.3-cp311-cp311-macosx_11_0_arm64.whl:
Publisher:
publish.yml on wme7/ideal-gases
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ideal_gases-0.1.3-cp311-cp311-macosx_11_0_arm64.whl -
Subject digest:
c7f174a56df8522f49c35ced507a7d81acfa4fb82eb1ccb71dd2b372a7f0425a - Sigstore transparency entry: 2187466022
- Sigstore integration time:
-
Permalink:
wme7/ideal-gases@6406a02af028b85aa5ece6309ea3a8b3351092a3 -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/wme7
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@6406a02af028b85aa5ece6309ea3a8b3351092a3 -
Trigger Event:
push
-
Statement type: