Appearance
Becker's viscous shock
| ID | Group | Milestone | Backends | Figure | Regression |
|---|---|---|---|---|---|
| VV-4 | Dissipative terms (M4) | M4 (#65) | CPU, FNL | yes | becker-shock |
Case and scope
Becker's (1922) exact profile of a shock resolved by the viscosity, with constant
What the case catches: the strongest nonlinear viscous flux of the suite, with the energy flux carrying both the viscous work and the heat flux. A wrong coefficient, a wrong viscous work or a wrong heat flux moves the profile.
Models and numerics
| Item | Choice | Code |
|---|---|---|
| Equations | compressible Navier–Stokes, | models |
| Dissipative fluxes | dissipative_order = 4 | add_dissipative_fluxes_o4, adam_flume_cpu_dissipation_kernels.F90; compute_dissipative_flux, adam_flume_dissipation_library.F90; numerics |
| Inviscid fluxes | WENO5 flux splitting, characteristic variables | compute_residuals_weno, adam_flume_cpu_object.F90 |
| Time | runge-kutta-ssp-54, CFL 0.2 | adam_rk_object.F90 |
| Initial profile | Becker's implicit solution, solved cell by cell | becker_shock, adam_flume_ic_object.F90 |
| Boundaries | supersonic inflow upstream, extrapolation elsewhere | set_boundary_conditions, adam_flume_cpu_object.F90; boundary conditions |
| FNL backend | the same kernels on the device | add_dissipative_fluxes_o4_dev, adam_flume_fnl_dissipation_kernels.F90 |
Initial and boundary conditions
| Item | Value |
|---|---|
| Domain | |
| Grid | quadtree, |
| Ranks | 2 |
| Initial condition | becker-shock: upstream state |
bc_x_min | inflow with the upstream state |
| Other faces | extrapolation |
| Final time |
| Leg | Mach | Cells across the shock at | |
|---|---|---|---|
becker-m2-o4 | 2 | 0.005 | about 8 |
becker-m3-o4 | 3 | 0.01 | about 8 |
At Mach 3 with
Input files
| File | Role |
|---|---|
src/tests/flume/verification/viscous/profiles.py | make --case becker writes each input; oracle measures |
src/tests/flume/verification/viscous/check.sh --legs vv4 | runs the two ladders (--np N; FLUME_EXE selects the backend) |
src/tests/flume/regression/becker-shock/input.ini | the frozen case: Mach 2, 64 cells, |
make_doc_figures.py (fig_viscous) | the figure, from the CPU work directories of viscous/check.sh |
bash
cd src/tests/flume/verification/viscous && ./check.sh --legs vv4 # CPU
FLUME_EXE=$PWD/../../../../../exe/adam_flume_fnl ./check.sh --legs vv4 # FNLResults

Right panel:
Oracle: order
| Mach | 64 | 128 | 256 | Orders (RMS) |
|---|---|---|---|---|
| 2 | RMS | +2.45, +3.88 | ||
| 3 | RMS | +2.25, +3.48 |
CPU, 2 ranks. Every leg passes on FNL (2 ranks) with the same numbers to the printed digits.
Related cases: the other exact steady viscous profile is Couette; the backend agreement of these runs, the largest of the suite, is in CPU and FNL agree.
Findings
- The coarse pair converges at about second order and the finest pair above third: the shock width is fixed by
, so it spans about 2 cells at 64 cells and about 8 at 256. With 4 cells across it the order was still pre-asymptotic (+2.25). - The Becker runs hold the largest CPU–FNL differences of the suite (
of the momentum scale), being its steepest gradients.