Appearance
Compressible Couette flow
| ID | Group | Milestone | Backends | Figure | Regression |
|---|---|---|---|---|---|
| VV-3 | Dissipative terms (M4) | M4 (#65) | CPU, FNL | yes | couette |
Case and scope
A channel between a fixed isothermal wall at
What the case catches: the first test of the no-slip walls with the viscous fluxes, and of a nonlinear energy flux (the viscous heating
Models and numerics
| Item | Choice | Code |
|---|---|---|
| Equations | compressible Navier–Stokes, | models; load_from_file, adam_flume_dissipation_object.F90 |
| Dissipative fluxes | dissipative_order = 4 | add_dissipative_fluxes_o4, adam_flume_cpu_dissipation_kernels.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 |
| Wall ghosts | velocity mirrored about the wall's (exact for the linear | wall_noslip_ghost, adam_flume_bc_object.F90; set_boundary_conditions, adam_flume_cpu_object.F90; boundary conditions |
| FNL backend | the same fluxes and wall ghosts on the device | adam_flume_fnl_object.F90 |
Initial and boundary conditions
| Item | Value |
|---|---|
| Domain | |
| Grid | quadtree, |
| Ranks | 2 |
| Initial condition | couette: the exact profile, |
bc_x_min, bc_x_max | periodic |
bc_y_min ( | wall-isothermal, wall_temperature = 1 (at rest) |
bc_y_max ( | wall-noslip, wall_u = 1 (adiabatic, moving) |
bc_z_min, bc_z_max | extrapolation |
| Final time |
Input files
| File | Role |
|---|---|
src/tests/flume/verification/viscous/profiles.py | make --case couette writes each input; oracle measures the RMS of |
src/tests/flume/verification/viscous/check.sh --legs vv3 | runs the ladder (--np N; FLUME_EXE selects the backend) |
src/tests/flume/regression/couette/input.ini | the frozen case, |
make_doc_figures.py (fig_couette, fig_viscous) | the figures, from the CPU work directories of viscous/check.sh |
bash
cd src/tests/flume/verification/viscous && ./check.sh --legs vv3 # CPU
FLUME_EXE=$PWD/../../../../../exe/adam_flume_fnl ./check.sh --legs vv3 # FNLResults

Top:

The Couette temperature ladder is the "VV-3 Couette (T)" curve of the left panel.
Oracle: order
| Quantity | N | RMS error (CPU) | Order | FNL |
|---|---|---|---|---|
| 32 / 64 / 128 | +2.15, +2.14 | the same; the last digit at 128 cells differs | ||
| 32 / 64 / 128 | +2.19, +2.15 | the same |
Both backends ran on 2 ranks.
Related cases: the wall-free viscous waves are VV-1 and VV-2; the other exact steady profile is Becker's shock.
Findings
- The run is second order overall: the moving-wall mirror is exact for the linear
and the symmetric , the isothermal geometric mirror is second order. - The fields show where that second order comes from. Velocity and temperature are uniform along the periodic
, and the profiles lie on the exact ones (the linear , the viscous-heating parabola of ). The error enters at the isothermal wall and diffuses into the channel: at its front has reached about , and beyond it the solution is exact to round-off at 128 cells. The moving adiabatic wall adds nothing. - With the linear isothermal mirror of P1 (
) the errors were 18% lower, at the same orders. The geometric mirror was adopted because the linear one made negative ghost densities beside hot gas; the two differ by .