What
The Eulerian (grid, streamline-upwind) stress history fails on the Waters & King 1970 start-up problem, where the two trace-back histories do not.
Channel between plates at y = ±h, fluid at rest, constant pressure gradient switched on at t = 0. Maxwell (β = 0), elasticity number El = λη/ρh² = 1, so the problem is hyperbolic and the shear-wave fronts cross the channel at t = 1, 3, 5.
stress_transport = "eulerian", BDF-1, resolution 1/16, Δt = 0.02. The run tracks the first overshoot correctly:
| t |
u centreline |
reference |
| 1.00 |
0.9526 |
0.9988 at t = 1.005 |
| 1.50 |
0.8774 |
|
| 2.00 |
0.7266 |
|
then oscillates with growing amplitude from t = 2.3:
2.300000,-0.84525938
2.320000, 1.04146532
2.340000, 2.55333802
and the linear solve stops converging (DIVERGED_LINEAR_SOLVE, then the SNES makes no progress and the run hangs). Reproduced twice at the same settings.
The failure is at the first reflection of the shear-wave front off the far wall. semi_lagrangian and integration_point run the same problem to t = 10 without this.
Where
SNES_Stokes.stress_transport == "eulerian" builds the history on the Eulerian SUPG DDt manager. The suspicion is the upwinding: at a reflection the stress discontinuity travels against the local flow direction rather than along it, and the streamline-upwind term stabilises the wrong direction.
Reproduce
~/+Simulations/stress_transport/waters_king/wk_uw.py (session scripts, not in the repo):
python wk_uw.py -uw_stress_transport eulerian -uw_resolution 16 -uw_dt 0.02 -uw_out out.csv
Records in ~/+Simulations/stress_transport/waters_king/wk_eulerian_r16_dt0.02.blowup.csv; the benchmark ledger has the full entry.
Why it matters
The grid history is the partition-independent one and the cheapest, and it is the flavour the cylinder drag tables have been run with. This says it cannot be trusted where the flow is elastically hyperbolic and a front reflects — which is exactly the regime the high-Wi runs are heading into.
What
The Eulerian (grid, streamline-upwind) stress history fails on the Waters & King 1970 start-up problem, where the two trace-back histories do not.
Channel between plates at y = ±h, fluid at rest, constant pressure gradient switched on at t = 0. Maxwell (β = 0), elasticity number El = λη/ρh² = 1, so the problem is hyperbolic and the shear-wave fronts cross the channel at t = 1, 3, 5.
stress_transport = "eulerian", BDF-1, resolution 1/16, Δt = 0.02. The run tracks the first overshoot correctly:then oscillates with growing amplitude from t = 2.3:
and the linear solve stops converging (
DIVERGED_LINEAR_SOLVE, then the SNES makes no progress and the run hangs). Reproduced twice at the same settings.The failure is at the first reflection of the shear-wave front off the far wall.
semi_lagrangianandintegration_pointrun the same problem to t = 10 without this.Where
SNES_Stokes.stress_transport == "eulerian"builds the history on the Eulerian SUPG DDt manager. The suspicion is the upwinding: at a reflection the stress discontinuity travels against the local flow direction rather than along it, and the streamline-upwind term stabilises the wrong direction.Reproduce
~/+Simulations/stress_transport/waters_king/wk_uw.py(session scripts, not in the repo):Records in
~/+Simulations/stress_transport/waters_king/wk_eulerian_r16_dt0.02.blowup.csv; the benchmark ledger has the full entry.Why it matters
The grid history is the partition-independent one and the cheapest, and it is the flavour the cylinder drag tables have been run with. This says it cannot be trusted where the flow is elastically hyperbolic and a front reflects — which is exactly the regime the high-Wi runs are heading into.