Lid-driven Cavity
Steady incompressible flow in a square cavity driven by a moving lid — a boundary-value problem (no time variable):
Problem setup
The domain is the unit square
Both boundary conditions enter the loss as sampled point sets: a u_bc term fitting the lid profile (including the discontinuous corners) and a v_bc term enforcing zero normal flow, alongside the three momentum/continuity residuals — five loss terms balanced by grad-norm weighting.
Results
Direct training at Re 5000 stalls: the baseline plateaus at a relative L2 error of 0.64 in the velocity magnitude, trapped in a low-circulation spurious solution (swapping SOAP for Adam changes nothing — 0.68). Adaptive pseudo-time stepping acts as an artificial-time continuation toward the steady state and reaches 0.043 — a 15× improvement and the difference between a wrong flow field and a quantitatively correct one. The comparison is sharp: constant pseudo-time weights do not help here (0.84); the adaptive step-size estimate is what tracks the slowly developing circulation.


Run
cd examples/lid_driven_cavity
python3 main.py --config=configs/pseudo_time.py| Config | Description |
|---|---|
configs/baseline.py | Modified MLP baseline |
configs/pseudo_time.py | Adaptive pseudo-time stepping (showcase) |
configs/fixed_pseudo_time.py | Constant pseudo-time weights |
Notes
- Steady problems subclass
ForwardBVP— same trainer, no causal weighting. - Reference data ships for Re ∈ {100, 400, 1000, 1600, 3200, 5000} (
--config.Re=...).