Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
152 commits
Select commit Hold shift + click to select a range
b212c7e
hypo HLLC works
ChrisZYJ Oct 13, 2025
d18cf7e
HLLC ADC works
ChrisZYJ Nov 13, 2025
bb1c88f
HLLD works
ChrisZYJ Nov 17, 2025
bae9d1b
HLLD ADC works
ChrisZYJ Nov 17, 2025
0004a17
fix critical HLLD index bug
ChrisZYJ Mar 7, 2026
b921abf
complete refactor and backwards compatibility
ChrisZYJ Mar 7, 2026
cb2b1fb
HLLD KdivU; HLL u_interface NC
ChrisZYJ Mar 8, 2026
aaad026
fix non-hypo HLLC bug
ChrisZYJ Mar 10, 2026
8359c71
2D Axisym works
ChrisZYJ Mar 10, 2026
1a3b845
2DA oracle -> main; fix OpenACC
ChrisZYJ Mar 11, 2026
fd8f89e
3D works
ChrisZYJ Mar 11, 2026
f30889d
fix 3D
ChrisZYJ Mar 11, 2026
03d68a5
fix 3D; HLLC+ADC for all
ChrisZYJ Mar 11, 2026
ea63315
fix 2DA HLLD
ChrisZYJ Mar 14, 2026
1d4a08d
in progress: major bug fix; HLL method 2
ChrisZYJ Mar 18, 2026
556a035
in progress: major bug fix
ChrisZYJ Mar 19, 2026
9828375
in progress: major bug fix
ChrisZYJ Mar 20, 2026
9731acf
in progress: major bug fix
ChrisZYJ Mar 20, 2026
9ca2ce8
major bug fix likely done
ChrisZYJ Mar 20, 2026
4107872
format
ChrisZYJ Mar 20, 2026
606970e
tests
ChrisZYJ Mar 20, 2026
6248e68
fix HLLM2 2DA hypo noKdivu; golden HLLM1 hypo; golden HLLM2 nonhypo
ChrisZYJ Mar 21, 2026
db5f9d4
hll_alpha_interface to hll_u_interface
ChrisZYJ Mar 21, 2026
839caac
merge upstream; all conflicts resolved
ChrisZYJ Mar 22, 2026
969bcfa
fix compile; pass old tests
ChrisZYJ Mar 22, 2026
ffd97d7
formatting and checker
ChrisZYJ Mar 22, 2026
e1a199b
new hypo use riemann instead with golden generated using pre-merge; p…
ChrisZYJ Mar 30, 2026
7525593
formatting
ChrisZYJ Mar 30, 2026
838f06a
gpu fix
ChrisZYJ Apr 1, 2026
74fcc3d
fix GPU compile
ChrisZYJ Apr 4, 2026
fc056a7
GPU all tests passed
ChrisZYJ Apr 4, 2026
982599f
format
ChrisZYJ Apr 4, 2026
a27705a
remove wrongly tracked case folder
ChrisZYJ Apr 4, 2026
91235a4
docs and checkers
ChrisZYJ Apr 14, 2026
0ab41c4
clearer flags and comments
ChrisZYJ Apr 16, 2026
a721550
minor bugs and HLLC fallback
ChrisZYJ Apr 16, 2026
cbd11eb
fix AMD
ChrisZYJ Apr 16, 2026
38e9d2d
all tests passed on Frontier
ChrisZYJ Apr 17, 2026
8ecb5ff
merge upstream
ChrisZYJ Apr 17, 2026
5b5cd68
revert unnecessary diff against upstream
ChrisZYJ Apr 17, 2026
4d1cd8a
revert variable_conversion robustness fix; minor clean up
ChrisZYJ Apr 17, 2026
f62c45e
minor changes
ChrisZYJ Apr 17, 2026
362ecaf
relax hypo 2D-Axisym HLLC tol
ChrisZYJ Apr 21, 2026
c32a52b
Merge branch 'master' into hypo_HLLC_new
ChrisZYJ Apr 21, 2026
0d2d33f
fix HLLC ADC parity, precision, docs, examples
ChrisZYJ Apr 21, 2026
31925f5
update examples
ChrisZYJ Apr 26, 2026
1f681f2
MUSCL
ChrisZYJ Apr 28, 2026
5452db0
Merge MUSCL_fix branch + upstream master (4 commits)
ChrisZYJ Apr 28, 2026
063121f
remove clamp
ChrisZYJ May 5, 2026
9306592
Merge master into hypo_hlld (resolve muscl_eps f_is_default)
ChrisZYJ May 6, 2026
886ca57
comments; formatting; made concise
ChrisZYJ May 6, 2026
0f01a60
dev notes
ChrisZYJ May 6, 2026
0ff4dd5
Merge master into hypo_hlld (MTHINC, hypo simplify, tau_Re fix, pertu…
ChrisZYJ May 8, 2026
7f08352
format
ChrisZYJ May 8, 2026
f85530d
lint
ChrisZYJ May 9, 2026
bc69bba
format
ChrisZYJ May 9, 2026
be0ea85
consistent hypo_energy_guard
ChrisZYJ May 15, 2026
5a1d003
fix HLLD doubling acoustic source; fix HLLD SM thresholding
ChrisZYJ May 19, 2026
d6b3155
recon_comp_rho
ChrisZYJ May 26, 2026
32321da
HLLD dual-pass: reconstruct once per RK stage
ChrisZYJ Jun 6, 2026
a29e3a0
HLLD dual-pass: internalize the two anchored passes in s_compute_rhs
ChrisZYJ Jun 6, 2026
eb7ce78
HLLD dual-pass: convert recon_comp_rho faces per sweep direction only
ChrisZYJ Jun 7, 2026
760ba75
HLLD dual-pass: add hat_R flux, gsrc, and interface-velocity buffers …
ChrisZYJ Jun 7, 2026
7f6dbff
HLLD dual-pass: fuse the two anchored solves into one kernel per dire…
ChrisZYJ Jun 7, 2026
a5d588a
HLLD fused solve: register-diet the F_hlld wave-fan (6 star arrays ->…
ChrisZYJ Jun 9, 2026
a4f30ca
HLLD fused solve: fold the ADC F_HLL/U_HLL arrays into per-component …
ChrisZYJ Jun 10, 2026
9cab431
HLLD fused solve: fold the us/uss star arrays into the per-component …
ChrisZYJ Jun 10, 2026
622d55d
Merge upstream/master (087c3cea) into hypo_hlld_fusion_diet
ChrisZYJ Jun 10, 2026
fa13ba1
docs: add hypo_energy_guard and recon_comp_rho to case.md parameter t…
ChrisZYJ Jun 10, 2026
2187761
format: apply pinned ffmt to merge-touched files
ChrisZYJ Jun 10, 2026
cd44040
test: regenerate 2 WENO5 axisym u-interface goldens for upstream SSB …
ChrisZYJ Jun 10, 2026
1a11bf2
fix: probe pressure for hypoelastic cases (E269)
ChrisZYJ Jun 10, 2026
51b8e0e
Merge upstream 4cebbb01 into hypo HLLD (re-graft onto #1556 riemann s…
ChrisZYJ Jun 20, 2026
d43057b
Fix hypo-HLLD GPU portability (nvfortran directive folding + flag dev…
ChrisZYJ Jun 20, 2026
1a9c09e
Strip recon_comp_rho + guard hypo-HLLD viscous/surface-tension holes
ChrisZYJ Jun 20, 2026
141080c
Fix hypo_energy_guard consistency in post_process
ChrisZYJ Jun 23, 2026
bd03fdb
Harden hypo-HLLD dual-pass solver (degenerate ADC init, star-state fl…
ChrisZYJ Jun 23, 2026
0de9280
Guard unsupported hypo-HLLD and ADC feature combinations
ChrisZYJ Jun 23, 2026
45a86da
Clean up hypo-HLLD: dead variables, dead macro, comments
ChrisZYJ Jun 23, 2026
2ce52e0
Merge upstream master (272ac0a1) into hypo_hlld
ChrisZYJ Jun 23, 2026
d55a3f3
minor comment change
ChrisZYJ Jun 23, 2026
6cc0a86
checker
ChrisZYJ Jun 23, 2026
5cbec04
Document the three hypoelasticity Riemann-solver code shapes
ChrisZYJ Jun 23, 2026
76075dc
Collapse the adv_src_* booleans into an adv_src_mode enum
ChrisZYJ Jun 24, 2026
33748b8
Generate the dual-pass nc_iface_vel finalize pair from one Fypp template
ChrisZYJ Jun 24, 2026
286a0dc
Complete the adv_src_mode rename in the equations.md cross-reference
ChrisZYJ Jun 24, 2026
df965a6
Merge branch 'master' into hypo-hlld
sbryngelson Jun 24, 2026
b2197ac
fix: correct flux_rsx_vf index (SF macro) in HLLC y-sweep geometric s…
sbryngelson Jun 24, 2026
bb0090e
fix: guard HLL/HLLC hypoelasticity to exactly 2 fluids (blkmod uses f…
sbryngelson Jun 24, 2026
0a3a7a9
fix: HLL/HLLC hypoelasticity guard should reject num_fluids>2, not !=…
sbryngelson Jun 25, 2026
11f8de6
Fix amdflang compile bug
ChrisZYJ Jun 26, 2026
4aa5745
fix Cray-OMP segfault - ACC-only for nc_iface_vel GPU_DECLARE
ChrisZYJ Jun 27, 2026
7a28684
Merge branch 'master' into hypo_hlld
sbryngelson Jun 27, 2026
6cfcb5e
Checker & elastic energy macro
ChrisZYJ Jul 2, 2026
4cc544c
Fix spelling (new CI version for old doc typo)
ChrisZYJ Jul 2, 2026
e46ad07
HLLD kernel dedup: table-driven wave-fan fold and stress star states …
ChrisZYJ Jul 3, 2026
d8e410a
Co-generate hatR flux finalizer with the generic via one Fypp templat…
ChrisZYJ Jul 3, 2026
02c4a09
Extract f_hlld_wave_zone seq helper; unify the three wave-fan upwind …
ChrisZYJ Jul 3, 2026
dea0ca5
Consolidate hypo_nc_* booleans into hypo_nc_mode enum (matches adv_sr…
ChrisZYJ Jul 3, 2026
ff3320d
Update dev notes for hypo_nc_mode enum
ChrisZYJ Jul 3, 2026
5560776
Review nits: rejoin wrapped comments, module end indent, cray_inline …
ChrisZYJ Jul 3, 2026
6737464
Merge branch 'master' into hypo_hlld
ChrisZYJ Jul 3, 2026
dff2045
Trigger CI rerun (Frontier gpu-omp [1/2] runner failed at dependency …
ChrisZYJ Jul 4, 2026
3a3beab
Merge branch 'master' into hypo_hlld
sbryngelson Jul 4, 2026
815f1e2
Merge remote-tracking branch 'origin/master' into hypo_hlld
sbryngelson Jul 7, 2026
44034a1
Merge remote-tracking branch 'origin/master' into HEAD
sbryngelson Jul 10, 2026
367b427
Route HLLC hypo interface energy through the damage-aware shared help…
ChrisZYJ Jul 12, 2026
9cc3beb
Deallocate all alt_soundspeed RHS work arrays, not just blkmod1
ChrisZYJ Jul 12, 2026
9ab0b37
Remove hypo_energy_guard option (near-zero-G guard always on); tighte…
ChrisZYJ Jul 12, 2026
af64bbd
Use thermal enthalpy for the HLLC/HLLD base sound speed and per-side …
ChrisZYJ Jul 12, 2026
7d511f2
Fix stale hypo-HLLD comments and example descriptions
ChrisZYJ Jul 12, 2026
30c9538
Merge remote-tracking branch 'upstream/master' into hypo_hlld
ChrisZYJ Jul 15, 2026
1c95f41
Enforce hypoelasticity compatibility in runtime checker
ChrisZYJ Jul 15, 2026
b7db67a
Clamp HLLD inner wave speeds into the outer fan
ChrisZYJ Jul 30, 2026
53a0d79
Localize HLLD shear-degeneracy floor as a named constant
ChrisZYJ Jul 30, 2026
120b693
Add hypoelastic shear-contact amplitude-order regression test
ChrisZYJ Jul 31, 2026
e5726e0
Document ADC contact/shear-resolution tradeoff and recommendation
ChrisZYJ Jul 31, 2026
a5f2896
Merge remote-tracking branch 'upstream/master' into hypo_hlld
ChrisZYJ Jul 31, 2026
21f95c4
Fall back on invalid hypo HLLD fans
ChrisZYJ Jul 31, 2026
8b83af2
Harden hypo HLLD shear-stiffness handling
ChrisZYJ Jul 31, 2026
b3b7be5
Correct ADC_kappa documentation
ChrisZYJ Jul 31, 2026
509cf7c
Correct hypo shear convergence description
ChrisZYJ Jul 31, 2026
01b5b15
Merge branch 'master' into hypo_hlld
sbryngelson Jul 31, 2026
d1fb9a5
Fix duplicate GPU declarations for Frontier CCE
ChrisZYJ Aug 1, 2026
ebf2839
Exclude hypo shear contact from example tests
ChrisZYJ Aug 1, 2026
4eb4091
Fix axisymmetric HLLD cylindrical stress geometry
ChrisZYJ Aug 1, 2026
0476b69
Use cell-owned anchored faces for dual-pass cylindrical geometry
ChrisZYJ Aug 1, 2026
feb75a2
Refresh axisymmetric HLLD regression coverage
ChrisZYJ Aug 1, 2026
de72a17
Tighten axisymmetric HLLD geometric-source code
ChrisZYJ Aug 1, 2026
a323445
Fix HLL Method 2 characteristic boundary handling
ChrisZYJ Aug 1, 2026
3005637
Fix HLLD volume-fraction flux at characteristic boundaries
ChrisZYJ Aug 2, 2026
8dcf951
Fix hypoelastic probe stress columns and sound-speed volume fractions
ChrisZYJ Aug 2, 2026
7f10906
Drop the dead HLLD per-fluid flux_src finalize copy
ChrisZYJ Aug 2, 2026
c79d3c5
Fence unsupported hypoelastic and Method 2 option combinations
ChrisZYJ Aug 2, 2026
c6df9ea
Make the axisymmetric hypoelastic IC axis-regular and refresh its gol…
ChrisZYJ Aug 2, 2026
b4ba766
Extend hypoelastic regression coverage
ChrisZYJ Aug 2, 2026
6238606
Bound cross-compiler noise on the axisymmetric HLLD base golden
ChrisZYJ Aug 2, 2026
790e5e5
Correct hypoelastic documentation and stale dev notes
ChrisZYJ Aug 2, 2026
93cfa4b
Mirror the global HLLD option fences in the Python validator
ChrisZYJ Aug 2, 2026
5712c14
Set fd_order in the 1D_sodHypo example
ChrisZYJ Aug 2, 2026
917e6f1
Use consistent HLL traces on the HLLD fan fallback
ChrisZYJ Aug 2, 2026
6c7a589
Reconstruct the anchored HLLD volume-fraction flux at characteristic …
ChrisZYJ Aug 2, 2026
7d5e032
Widen the axisymmetric HLLD noise bound for unseen CI lanes
ChrisZYJ Aug 2, 2026
65ef745
Tighten hypoelastic comments and document CBC support scope
ChrisZYJ Aug 2, 2026
3110c49
Widen the axisymmetric HLLD ADC noise bound
ChrisZYJ Aug 3, 2026
d3e9fd9
Limit hypoelastic HLLD characteristic boundaries to near-pure fluid s…
ChrisZYJ Aug 3, 2026
a7a6ad0
Restore the branchless HLL advection flux on the default path
ChrisZYJ Aug 4, 2026
e2fc4bf
Remove the unreachable elastic-flux block from the HLLC fluid path
ChrisZYJ Aug 4, 2026
ea155da
Emit separate pure-fluid and hypoelastic HLLC kernels for the 5-equat…
ChrisZYJ Aug 4, 2026
c4b391f
Give the two HLLC kernel emissions distinct source lines
ChrisZYJ Aug 5, 2026
56cc352
Give the pure-fluid HLLC emission master's exact private list
ChrisZYJ Aug 5, 2026
9e877ac
Strip hypoelastic text from the pure-fluid HLLC emission with fypp gu…
ChrisZYJ Aug 5, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 18 additions & 4 deletions docs/documentation/case.md
Original file line number Diff line number Diff line change
Expand Up @@ -515,7 +515,8 @@ See @ref equations "Equations" for the mathematical models these parameters cont
| `flux_lim` | Integer | Flux limiter for post-process: [1] minmod; [2] MUSCL; [3] OSPRE; [4] SUPERBEE |
| `ic_eps` | Real | Interface compression threshold (default: 1e-4) |
| `ic_beta` | Real | Interface compression sharpness parameter (default: 1.6) |
| `riemann_solver` | Integer | Riemann solver algorithm: [1] HLL*; [2] HLLC; [3] Exact*; [4] HLLD (only for MHD) |
| `riemann_solver` | Integer | Riemann solver algorithm: [1] HLL*; [2] HLLC; [3] Exact*; [4] HLLD (MHD or hypoelasticity) |
| `hll_u_interface` | Logical | HLL Method 2 (u-interface) for volume fraction advection (default F) |
| `low_Mach` | Integer | Low Mach number correction for HLLC Riemann solver: [0] None; [1] Pressure (\cite Chen22); [2] Velocity (\cite Thornber08) |
| `avg_state` | Integer | Averaged state evaluation method: [1] Roe average*; [2] Arithmetic mean |
| `wave_speeds` | Integer | Wave-speed estimation: [1] Direct (\cite Batten97); [2] Pressure-velocity* (\cite Toro09) |
Expand All @@ -536,6 +537,9 @@ See @ref equations "Equations" for the mathematical models these parameters cont
| `surface_tension` | Logical | Activate surface tension |
| `viscous` | Logical | Activate viscosity |
| `hypoelasticity` | Logical | Activate hypoelasticity* |
| `riemann_hypo_ADC` | Logical | Enable hypo anti-diffusion correction for HLLC/HLLD (default F) |
| `ADC_kappa` | Real | ADC sensor scaling parameter (default 1.0) |
| `hypo_hll_interface_rhs` | Logical | HLL uses interface-consistent hypo RHS (default F) |
| `igr` | Logical | Enable solution via information geometric regularization (IGR) \cite Cao24 |
| `igr_order` | Integer | Order of reconstruction for IGR [3,5] |
| `alf_factor` | Real | Alpha factor for IGR entropic pressure (default 10) |
Expand Down Expand Up @@ -569,7 +573,7 @@ Tangential velocities require viscosity, `weno_avg = T`, and `bc_[x,y,z]%%end =
The difference of the two models is assessed by (\cite Schmidmayer20).
Note that some code parameters are only compatible with 5-equation model.

- `alt_soundspeed` activates the source term in the advection equations for the volume fractions, \f$K\nabla\cdot \underline{u}\f$, that regularizes the speed of sound in the mixture region when the 5-equation model is used.
- `alt_soundspeed` activates the source term in the advection equations for the volume fractions, \f$K\nabla\cdot \underline{u}\f$, that regularizes the speed of sound in the mixture region when the 5-equation model is used. Requires exactly two fluid components (\f$K\f$ is a two-fluid closure).
The effect and use of the source term are assessed by \cite Schmidmayer20.

- `adv_n` activates the direct computation of number density by the Riemann solver instead of computing number density from the void fraction in the method of classes.
Expand Down Expand Up @@ -615,7 +619,11 @@ Setting `muscl_eps = 0` gives textbook limiter behavior where limiters activate

- `riemann_solver` specifies the choice of the Riemann solver that is used in simulation by an integer from 1 through 4.
`riemann_solver = 1`, `2`, and `3` correspond to HLL, HLLC, and Exact Riemann solver, respectively (\cite Toro09).
`riemann_solver = 4` is only for MHD simulations. It resolves 5 of the full seven-wave structure of the MHD equations (\cite Miyoshi05).
`riemann_solver = 4` is the HLLD solver for MHD or hypoelasticity simulations. For MHD it resolves 5 of the full seven-wave structure of the MHD equations (\cite Miyoshi05).

- `hll_u_interface`: Selects between two HLL discretizations of volume fraction advection (`riemann_solver = 1`):
- **Default** (``'F'``): \f$\partial_t \alpha_k + u\,\partial_x \alpha_k = 0\f$
- **u-interface** (``'T'``, consistent with HLLC): \f$\partial_t \alpha_k + \partial_x(\alpha_k\, u) = \alpha_k\,\partial_x u\f$

- `low_Mach` specifies the choice of the low Mach number correction scheme for the HLLC Riemann solver. `low_Mach = 0` is default value and does not apply any correction scheme. `low_Mach = 1` and `2` apply the anti-dissipation pressure correction method (\cite Chen22) and the improved velocity reconstruction method (\cite Thornber08). This feature requires `model_eqns = 2` or `3`. `low_Mach = 1` works for `riemann_solver = 1` and `2`, but `low_Mach = 2` only works for `riemann_solver = 2`.

Expand All @@ -635,7 +643,13 @@ This option requires `weno_Re_flux` to be true because cell boundary values are

- `viscous` activates viscosity when set to ``'T'``. Requires `Re(1)` and `Re(2)` to be set.

- `hypoelasticity` activates elastic stress calculations for fluid-solid interactions. Requires `G` to be set in the fluid material's parameters.
- `hypoelasticity` activates elastic stress calculations for fluid-solid interactions. Requires `G` to be set in `fluid_pp`, and `fd_order` to be set (1, 2, or 4). Compatible with HLL (`riemann_solver = 1`), HLLC (`riemann_solver = 2`), and HLLD (`riemann_solver = 4`). The Riemann solver choice determines how the elastic stress source term \f$\mathbf{S}^e\f$ is discretized:
- **HLL**: finite-difference velocity gradient (default), or interface-consistent velocity gradient when ``hypo_hll_interface_rhs = 'T'`` (matches HLLC).
- **HLLC**: interface-consistent velocity gradient from the Riemann solution.
- **HLLD**: dual-pass approach resolving the elastic wave structure. Requires 2D+ and exactly 2 fluid components.
- With hypoelastic HLLD, use characteristic boundary conditions (`bc_{x,y,z}%%beg/end` between -5 and -12) only where the domain boundary remains in a fluid region throughout the simulation. Keep material interfaces and solids out of the nearby cells used by the boundary calculation. A material present only at the numerical volume-fraction floor is allowed, even if it has nonzero `G`. These boundaries treat acoustic waves only. `alt_soundspeed` is supported.

- `riemann_hypo_ADC`: Enables anti-diffusion correction (ADC) for hypoelastic HLLC or HLLD. Blends the HLLC/HLLD flux locally toward the more diffusive HLL flux where a jump sensor (total normal stress, tangential velocity, and tangential stress) detects a strong contact or material interface, improving robustness and reducing interfacial overshoots. This trades contact and shear resolution for robustness where the sensor activates. `ADC_kappa` (default 1.0) scales the reference jump the sensor is normalized by; smaller values blend more toward HLL (more diffusive and robust). Off by default and recommended off: in MFC's tested hypoelastic cases, including strong shock-interface interactions, HLLD is stable and accurate without ADC. The option is a robustness fallback intended for regimes with intense shocks and intense shear at material interfaces.

#### Boundary Condition Patches {#boundary-condition-patches}

Expand Down
21 changes: 19 additions & 2 deletions docs/documentation/equations.md
Original file line number Diff line number Diff line change
Expand Up @@ -874,16 +874,33 @@ Four-state solver resolving the contact discontinuity. Star-state satisfies:

Iterative exact Riemann solver.

#### HLLD (`riemann_solver = 4`, MHD only)
#### HLLD (`riemann_solver = 4`, MHD or hypoelasticity)

Seven-state solver for ideal MHD resolving fast magnetosonic, Alfven, and contact waves (\cite Miyoshi05). The Riemann fan is divided by outer wave speeds \f$S_L\f$, \f$S_R\f$, Alfven speeds \f$S_L^*\f$, \f$S_R^*\f$, and a middle contact \f$S_M\f$:
**MHD HLLD.** Seven-state solver for ideal MHD resolving fast magnetosonic, Alfven, and contact waves (\cite Miyoshi05). The Riemann fan is divided by outer wave speeds \f$S_L\f$, \f$S_R\f$, Alfven speeds \f$S_L^*\f$, \f$S_R^*\f$, and a middle contact \f$S_M\f$:

\f[S_M = \frac{(S_R - u_R)\rho_R u_R - (S_L - u_L)\rho_L u_L - p_{T,R} + p_{T,L}}{(S_R - u_R)\rho_R - (S_L - u_L)\rho_L}\f]

\f[S_L^* = S_M - \frac{|B_x|}{\sqrt{\rho_L^*}}, \qquad S_R^* = S_M + \frac{|B_x|}{\sqrt{\rho_R^*}}\f]

where \f$p_T = p + |\mathbf{B}|^2/2\f$ is the total (thermal + magnetic) pressure. Continuity of normal velocity and total pressure is enforced across the Riemann fan.

**Hypoelastic HLLD.** Shares the five-wave Riemann fan structure with MHD HLLD, but differs substantially in formulation. Elastic shear waves play the role of Alfven waves, with total pressure \f$p_T = p - \tau_{nn}\f$ and shear wave impedance \f$C = \hat{\rho}(\hat{G} + \hat{\tau}_{nn})\f$. However, the non-conservative nature of the multi-component elastic stress equations — particularly at material interfaces where \f$G\f$ is discontinuous — requires a dedicated treatment distinct from the MHD solver.

The solver uses an **anchored dual-pass** formulation. Each Riemann solve at interface \f$j{+}1/2\f$ requires cell-centered quantities for the non-conservative products; these are taken as cell-centered values from the cell that the flux will update, rather than from the reconstructed interface states:

\f[\mathbf{F}_{j+1/2}^{\text{left}} = \text{HLLD}\!\left(\mathbf{q}_{j+1/2}^L,\;\mathbf{q}_{j+1/2}^R;\;\mathbf{q}_{\text{cell},\,j}\right), \qquad \mathbf{F}_{j-1/2}^{\text{right}} = \text{HLLD}\!\left(\mathbf{q}_{j-1/2}^L,\;\mathbf{q}_{j-1/2}^R;\;\mathbf{q}_{\text{cell},\,j}\right)\f]

\f[\frac{d\mathbf{U}_j}{dt} = \frac{1}{\Delta x}\!\left(\mathbf{F}_{j-1/2}^{\text{right}} - \mathbf{F}_{j+1/2}^{\text{left}}\right)\f]

This formulation enables HLLD to be used with the non-conservative terms that affect the eigenstructure of the quasi-linear Jacobian. Volume fraction advection is built into the HLLD flux rather than treated as a separate non-conservative step.

#### Developer Notes on Non-Conservative Term Implementation

For details on how the Riemann solvers discretize non-conservative terms (volume fraction advection, Kapila \f$K\,\nabla\!\cdot\!\mathbf{u}\f$, and hypoelastic velocity gradients) and hand off interface quantities to the RHS, see the notes in `misc/dev_notes/`:

- `HLL_HLLC_non_conservative_terms_derivations.md` — Mathematical derivation of HLL Method 1 (alpha-interface), Method 2 (u-interface), and HLLC transport traces, including the \f$S_M\zeta_K\f$ star-branch construction and ADC blending.
- `Riemann_and_RHS_source_terms_explanations.md` — Code dataflow: which arrays carry what between m_riemann_solvers and m_rhs, overloading of flux_src, the three NC advection modes (adv_src_mode_alpha_iface, adv_src_mode_vel_iface, adv_src_mode_none), and the nc_iface_vel second export channel.

### 15.3 Time Integration

**Source:** `src/simulation/m_time_steppers.fpp`
Expand Down
1 change: 1 addition & 0 deletions docs/module_categories.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
"m_riemann_solver_hll",
"m_riemann_solver_lf",
"m_riemann_solver_hllc",
"m_riemann_solver_hypo_hlld",
"m_muscl",
"m_variables_conversion",
"m_thinc"
Expand Down
1 change: 1 addition & 0 deletions examples/1D_sodHypo/case.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
"bc_x%end": -3,
# Turning on Hypoelasticity
"hypoelasticity": "T",
"fd_order": 4,
# Formatted Database Files Structure Parameters
"format": "silo",
"precision": "double",
Expand Down
110 changes: 110 additions & 0 deletions examples/2D_axisym_hypo_hlld/case.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
#!/usr/bin/env python3
import json

# 2D axisymmetric hypoelastic case with HLLD solver.
# Epoxy rectangular inclusion in water hit by focused acoustic pulse.
# Water: gamma=4.4, pi_inf=6.0e8, G=0
# Epoxy: gamma=4.4, pi_inf=2.4e9, rho=1180, G=1.5e9

gamma_w, pi_inf_w, rho_w = 4.4, 6.0e8, 1000.0
gamma_e, pi_inf_e, rho_e = 4.4, 2.4e9, 1180.0

config = {
"run_time_info": "T",
# Computational Domain
"x_domain%beg": 0.0,
"x_domain%end": 1.0,
"y_domain%beg": 0.0,
"y_domain%end": 1.0,
"cyl_coord": "T",
"m": 99,
"n": 99,
"p": 0,
"dt": 1.5e-6,
"t_step_start": 0,
"t_step_stop": 400,
"t_step_save": 100,
# Simulation Algorithm
"num_patches": 2,
"model_eqns": 2,
"alt_soundspeed": "F",
"num_fluids": 2,
"mpp_lim": "F",
"mixture_err": "F",
"time_stepper": 3,
"weno_order": 5,
"weno_eps": 1.0e-16,
"mapped_weno": "T",
"null_weights": "F",
"mp_weno": "F",
"riemann_solver": 4,
"wave_speeds": 1,
"avg_state": 2,
"bc_x%beg": -6,
"bc_x%end": -6,
"bc_y%beg": -2,
"bc_y%end": -6,
# Output
"format": 1,
"precision": 2,
"prim_vars_wrt": "T",
"rho_wrt": "T",
"parallel_io": "T",
# Hypoelasticity
"hypoelasticity": "T",
"fd_order": 4,
# Patch 1: Water background
"patch_icpp(1)%geometry": 3,
"patch_icpp(1)%x_centroid": 0.5,
"patch_icpp(1)%y_centroid": 0.5,
"patch_icpp(1)%length_x": 1.0,
"patch_icpp(1)%length_y": 1.0,
"patch_icpp(1)%vel(1)": 0.0,
"patch_icpp(1)%vel(2)": 0.0,
"patch_icpp(1)%pres": 1e05,
"patch_icpp(1)%tau_e(1)": 0.0,
"patch_icpp(1)%alpha_rho(1)": rho_w * (1.0 - 1e-8),
"patch_icpp(1)%alpha(1)": 1.0 - 1e-8,
"patch_icpp(1)%alpha_rho(2)": rho_e * 1e-8,
"patch_icpp(1)%alpha(2)": 1e-8,
# Patch 2: Epoxy rectangular inclusion
"patch_icpp(2)%alter_patch(1)": "T",
"patch_icpp(2)%geometry": 3,
"patch_icpp(2)%x_centroid": 0.6,
"patch_icpp(2)%y_centroid": 0.2,
"patch_icpp(2)%length_x": 0.2,
"patch_icpp(2)%length_y": 0.2,
"patch_icpp(2)%smoothen": "T",
"patch_icpp(2)%smooth_patch_id": 1,
"patch_icpp(2)%smooth_coeff": 2.0,
"patch_icpp(2)%vel(1)": 0.0,
"patch_icpp(2)%vel(2)": 0.0,
"patch_icpp(2)%pres": 1e05,
"patch_icpp(2)%tau_e(1)": 0.0,
"patch_icpp(2)%alpha_rho(1)": rho_w * 1e-8,
"patch_icpp(2)%alpha(1)": 1e-8,
"patch_icpp(2)%alpha_rho(2)": rho_e * (1.0 - 1e-8),
"patch_icpp(2)%alpha(2)": 1.0 - 1e-8,
# Acoustic source (axisymmetric focused)
"acoustic_source": "T",
"num_source": 1,
"acoustic(1)%support": 6,
"acoustic(1)%loc(1)": 0.1,
"acoustic(1)%loc(2)": 0.0,
"acoustic(1)%pulse": 2,
"acoustic(1)%npulse": 1,
"acoustic(1)%mag": 1.0,
"acoustic(1)%foc_length": 0.8,
"acoustic(1)%aperture": 0.8,
"acoustic(1)%gauss_sigma_time": 4e-5,
"acoustic(1)%delay": 2e-4,
# Fluids Physical Parameters
"fluid_pp(1)%gamma": 1.0 / (gamma_w - 1.0),
"fluid_pp(1)%pi_inf": gamma_w * pi_inf_w / (gamma_w - 1.0),
"fluid_pp(1)%G": 0.0,
"fluid_pp(2)%gamma": 1.0 / (gamma_e - 1.0),
"fluid_pp(2)%pi_inf": gamma_e * pi_inf_e / (gamma_e - 1.0),
"fluid_pp(2)%G": 1.5e9,
}

print(json.dumps(config, indent=4))
110 changes: 110 additions & 0 deletions examples/2D_hypo_hlld/case.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
#!/usr/bin/env python3
import json

# 2D hypoelastic case with HLLD solver.
# Epoxy square in water hit by focused acoustic pulse.
# Water: gamma=4.4, pi_inf=6.0e8, G=0
# Epoxy: gamma=4.4, pi_inf=2.4e9, rho=1180, G=1.5e9

gamma_w, pi_inf_w, rho_w = 4.4, 6.0e8, 1000.0
gamma_e, pi_inf_e, rho_e = 4.4, 2.4e9, 1180.0

config = {
"run_time_info": "T",
# Computational Domain
"x_domain%beg": 0.0,
"x_domain%end": 1.0,
"y_domain%beg": 0.0,
"y_domain%end": 1.0,
"m": 99,
"n": 99,
"p": 0,
"dt": 1.5e-6,
"t_step_start": 0,
"t_step_stop": 400,
"t_step_save": 100,
# Simulation Algorithm
"num_patches": 2,
"model_eqns": 2,
"alt_soundspeed": "F",
"num_fluids": 2,
"mpp_lim": "F",
"mixture_err": "F",
"time_stepper": 3,
"weno_order": 5,
"weno_eps": 1.0e-16,
"mapped_weno": "T",
"null_weights": "F",
"mp_weno": "F",
"riemann_solver": 4,
"wave_speeds": 1,
"avg_state": 2,
"bc_x%beg": -6,
"bc_x%end": -6,
"bc_y%beg": -6,
"bc_y%end": -6,
# Output
"format": 1,
"precision": 2,
"prim_vars_wrt": "T",
"rho_wrt": "T",
"parallel_io": "T",
# Hypoelasticity
"hypoelasticity": "T",
"fd_order": 4,
# Patch 1: Water background
"patch_icpp(1)%geometry": 3,
"patch_icpp(1)%x_centroid": 0.5,
"patch_icpp(1)%y_centroid": 0.5,
"patch_icpp(1)%length_x": 1.0,
"patch_icpp(1)%length_y": 1.0,
"patch_icpp(1)%vel(1)": 0.0,
"patch_icpp(1)%vel(2)": 0.0,
"patch_icpp(1)%pres": 1e05,
"patch_icpp(1)%tau_e(1)": 0.0,
"patch_icpp(1)%alpha_rho(1)": rho_w * (1.0 - 1e-8),
"patch_icpp(1)%alpha(1)": 1.0 - 1e-8,
"patch_icpp(1)%alpha_rho(2)": rho_e * 1e-8,
"patch_icpp(1)%alpha(2)": 1e-8,
# Patch 2: Epoxy square
"patch_icpp(2)%alter_patch(1)": "T",
"patch_icpp(2)%geometry": 3,
"patch_icpp(2)%x_centroid": 0.6,
"patch_icpp(2)%y_centroid": 0.5,
"patch_icpp(2)%length_x": 0.2,
"patch_icpp(2)%length_y": 0.2,
"patch_icpp(2)%smoothen": "T",
"patch_icpp(2)%smooth_patch_id": 1,
"patch_icpp(2)%smooth_coeff": 2.0,
"patch_icpp(2)%vel(1)": 0.0,
"patch_icpp(2)%vel(2)": 0.0,
"patch_icpp(2)%pres": 1e05,
"patch_icpp(2)%tau_e(1)": 0.0,
"patch_icpp(2)%alpha_rho(1)": rho_w * 1e-8,
"patch_icpp(2)%alpha(1)": 1e-8,
"patch_icpp(2)%alpha_rho(2)": rho_e * (1.0 - 1e-8),
"patch_icpp(2)%alpha(2)": 1.0 - 1e-8,
# Acoustic source (2D focused arc)
"acoustic_source": "T",
"num_source": 1,
"acoustic(1)%support": 5,
"acoustic(1)%loc(1)": 0.1,
"acoustic(1)%loc(2)": 0.5,
"acoustic(1)%pulse": 2,
"acoustic(1)%npulse": 1,
"acoustic(1)%dir": 1.0,
"acoustic(1)%mag": 1.0,
"acoustic(1)%foc_length": 0.4,
"acoustic(1)%aperture": 0.75,
"acoustic(1)%gauss_sigma_time": 4e-5,
"acoustic(1)%delay": 2e-4,
# Fluids Physical Parameters
"fluid_pp(1)%gamma": 1.0 / (gamma_w - 1.0),
"fluid_pp(1)%pi_inf": gamma_w * pi_inf_w / (gamma_w - 1.0),
"fluid_pp(1)%G": 0.0,
"fluid_pp(2)%gamma": 1.0 / (gamma_e - 1.0),
"fluid_pp(2)%pi_inf": gamma_e * pi_inf_e / (gamma_e - 1.0),
"fluid_pp(2)%G": 1.5e9,
}

print(json.dumps(config, indent=4))
Loading
Loading