Hi, I noticed some differences between the standard HLLC scheme and the implementation in /PDEBench/pdebench/data_gen/data_gen_NLE/CompressibleFluid/CFD_multi_Hydra.py.
According to Riemann Solvers and Numerical Methods for Fluid Dynamics by E. F. Toro, the wave speeds $S_L$ and $S_R$ can be computed using several commonly used estimates, such as:
$$S_L = \min\{u_L - a_L, u_R - a_R\}, \qquad
S_R = \max\{u_L + a_L, u_R + a_R\}.$$
However, the implementation in the code uses:
Sfl = jnp.minimum(QL[iX, 2:-1], QR[iX, 1:-2]) - jnp.maximum(
cfL[2:-1], cfR[1:-2]
) # left-going wave
Sfr = jnp.maximum(QL[iX, 2:-1], QR[iX, 1:-2]) + jnp.maximum(
cfL[2:-1], cfR[1:-2]
) # right-going wave
I could not find a corresponding formulation for this version of $S_L$ and $S_R$ in Toro’s book or other standard references.
In addition, the middle-wave speed $S_M$ is usually computed as:
$$S_M = \frac{
p_R - p_L + \rho_L u_L (S_L - u_L) - \rho_R u_R (S_R - u_R)
}{
\rho_L (S_L - u_L) - \rho_R (S_R - u_R)
},$$
but in the code it is implemented as:
Va = (
(Sfr - QL[iX, 2:-1]) * UL[iX, 2:-1]
- (Sfl - QR[iX, 1:-2]) * UR[iX, 1:-2]
- QL[4, 2:-1]
+ QR[4, 1:-2]
)
Va /= (Sfr - QL[iX, 2:-1]) * QL[0, 2:-1] - (Sfl - QR[iX, 1:-2]) * QR[0, 1:-2]
The expressions appear structurally different from the standard form, and similar discrepancies also show up in the computation of $\rho_{*L}, \rho_{*R}, p_{*L}$ and $p_{*R}$.
Could you please clarify the source of these differences?
Are they based on a specific variant of HLLC, an optimization for JAX/vectorization, or an intentional modification for stability or performance?
Hi, I noticed some differences between the standard HLLC scheme and the implementation in
/PDEBench/pdebench/data_gen/data_gen_NLE/CompressibleFluid/CFD_multi_Hydra.py.According to Riemann Solvers and Numerical Methods for Fluid Dynamics by E. F. Toro, the wave speeds$S_L$ and $S_R$ can be computed using several commonly used estimates, such as:
However, the implementation in the code uses:
I could not find a corresponding formulation for this version of$S_L$ and $S_R$ in Toro’s book or other standard references.
In addition, the middle-wave speed$S_M$ is usually computed as:
but in the code it is implemented as:
The expressions appear structurally different from the standard form, and similar discrepancies also show up in the computation of$\rho_{*L}, \rho_{*R}, p_{*L}$ and $p_{*R}$ .
Could you please clarify the source of these differences?
Are they based on a specific variant of HLLC, an optimization for JAX/vectorization, or an intentional modification for stability or performance?