Skip to main content

Rigid Impingement

Last updated: September 7, 2026

Files​

FileDescription
input-baseflow.sdfInput file for the first pass (single-phase baseflow)
input-droplets.sdfInput file for the second pass (multiphase droplet impingement)
cylinder.vtkTriangulation for the rigid cylindrical body

Introduction​

This case studies liquid droplet impingement on a rigid body in high-speed flow: a blunt, rounded-nose cylindrical rod, 32.5 mm in diameter, sitting in a Mach 5.83 freestream. The rod is represented as a triangulated cylinder.vtk geometry and coupled to the Cartesian grid through the immersed boundary method (IBM), with a slip-wall boundary condition. A bow shock stands off the nose, and it's this shocked flowfield that liquid droplets carried in the freestream must cross before striking the body.

Getting there is a two-step process:

  1. Baseflow — run the single-phase gas dynamics to steady state, so the bow shock and surrounding flowfield are fully established.
  2. Droplet impingement — restart from the baseflow solution using the multiphase formulation, with droplets seeded into the initial condition and carried through the established shock toward the body.

Splitting the case this way avoids paying for the multiphase solve while the gas-phase flowfield is still transient, and lets the baseflow be reused as the starting point for different droplet conditions.

Case Summary​

QuantityValue
Freestream Mach number5.83
Freestream pressure (P∞P_\infty)102 kPa
Freestream temperature (T∞T_\infty)289 K
Body diameter32.5 mm
Target grid spacing (Δx\Delta x)80 μm
Achieved grid spacing (Δx\Delta x)≈\approx 77–79 μm
Initial grid size≈\approx 984,000 cells

Running the First Simulation​

The first pass, input-baseflow.sdf, runs the rod through the freestream as a single-phase (gas-only) simulation — no droplets are present yet. To run it, simply invoke:

champs+ input-baseflow.sdf
Command line reference

See the command line reference for the full set of available flags, including other device-selection options.

The case runs for max_steps = 10000 steps (Integration::max_steps) at CFL = 0.5 using explicit ssprk3 time integration, with shock-tracking AMR (Domain::Grid::Refinement::AMR::shock_refine) kicking in from step 2000 onward and refreshing every 500 steps. The grid grows from its initial ≈\approx 984,000 cells to roughly 40 million cells once the shock-adapted region fills in.

This writes output under sim-baseflow/ (set by IO::output_directory), including the restart/ checkpoint that the second-pass, multiphase restart will read from.

Results​

Run the case to completion and compare your slice_z output against the figures below.

Baseflow — symmetry-plane slice Symmetry-plane (z = 0) slice of the steady baseflow: a bow shock stands off the rounded nose, with the high-pressure shock layer (red/orange) wrapping around the body.

Baseflow with grid blocks — symmetry-plane slice The same slice with grid blocks overlaid: spacing is finest on the body surface and along the bow shock, coarsening away from both, courtesy of the dx_surface/dx_shock Refinement::Spacing levels and the shock_refine AMR criterion tracking pressure.

You should see the same overall picture in your own run: a well-formed, steady bow shock standing off the nose, with no further changes in the shock shape or standoff distance from one output interval to the next. Once you've confirmed that, the restart/ checkpoint from this run is what the second-pass, multiphase droplet-impingement simulation will build on.

Running the Second Simulation​

input-droplets.sdf restarts from that baseflow checkpoint (Restart::file = "./sim-baseflow/restart/restart_000010000.db") and switches the physics over to the five-equation multiphase model (phys_model = "multiphase_5eqn", with stiffened-gas equation-of-state parameters for the two phases). The restarted gas-phase state is carried over as-is; two liquid droplets are then stamped into it via modify_after_restart and a pair of Modifiers:

  • drop0 — 1.2 mm diameter, centered on the stagnation-line axis at x0=−10x_0 = -10 mm
  • drop1 — 1.2 mm diameter, offset 2.4 mm off-axis (y1=−2dpy_1 = -2 d_p) at the same xx

Both start as pure liquid (α1=1\alpha_1 = 1, ρ1=1000 kg/m3\rho_1 = 1000\ \text{kg/m}^3), surrounded by the restarted gas-phase flowfield elsewhere. This setup makes for a natural comparison: the on-axis droplet travels straight down the stagnation streamline into the body, while the off-axis droplet's fate depends on whether its inertia carries it through the diverted post-shock streamlines or lets the flow sweep it around the body.

The grid is regenerated around this initial condition (regenerate_grid = true), refining a small box around each droplet to dx_drop = dp/ppd (≈\approx 6 μm) and dynamically tracking both the bow shock (via pressure) and each droplet's wake (via the liquid variable) as they advect downstream.

To run it:

champs+ input-droplets.sdf

This runs for max_steps = 23000 steps, writing output under sim-droplets/ (slice_z every 250 steps).

Results​

Droplet impingement — gas-phase density contour Contour of αgasρgas\alpha_{gas}\rho_{gas} (black = liquid) as the droplets cross the bow shock and impinge on the body, with slower motion as the droplets impinge.