Skip to main content

Luminary Flow Solver Best Practices

Recommendations for solver settings for advanced users.

Overview

The Luminary solver presets encode a great deal of accumulated experience across a wide range of CFD applications. For the vast majority of cases, the right answer is to start from the appropriate preset and leave the spatial discretization and solution control settings alone. This document summarizes the small number of settings that are worth knowing about, the even smaller number that are worth tuning, and guidance for common mesh and convergence issues.

Default recommendation (steady RANS, ideal gas)

For steady-state external or internal aerodynamics with ideal gas, use the following combination. These are the defaults baked into the ideal gas presets and are the right choice for the overwhelming majority of cases:

  • Gradient method: NODAL_GRADIENT

  • Convective / inviscid flux: FDS (Flux Difference Splitting, a variant of Roe’s scheme)

  • Limiter: INVARIANT_VENKATAKRISHNAN_CV

Beyond these three, trust the preset. The other discretization and solution-control knobs are tuned together as part of the preset and should not be adjusted in isolation.

Constant-density flows

For constant-density (incompressible) simulations, the convective scheme switches to RHIE_CHOW (RC). It performs better than FDS on collocated grids in the low Mach / incompressible regime and is the default in the constant-density presets.

Spatial discretization presets

Three presets are exposed for the spatial discretization. They share the recommended scheme trio above (assumed ideal gas here) and differ only in how aggressively they trade accuracy against robustness on imperfect meshes:

  • DEFAULT — the right starting point for almost all cases. Standard FDS with second-order reconstruction and cell-based solution limiting. Geometry fixes are enabled at a mild level to handle typical mesh imperfections on a cell-local basis.

  • HIGH_ACCURACY — disables geometry fixes for maximum accuracy on high-quality meshes. Use only when your mesh is clean (low skewness, low non-orthogonality, no degenerate cells); on difficult meshes this preset will be less stable than DEFAULT.

  • CONSERVATIVE — adds robust dissipation on top of DEFAULT. Choose this if you see convergence difficulty or divergence on a difficult case and want a more forgiving setup. More dissipative than DEFAULT, so accuracy can suffer. Verify that it suits your accuracy requirements before sustained usage.

Solution control presets

Three presets are exposed for the solution controls. They drive the time-integration aggressiveness — CFL number, linear-solver tolerance, and Jacobian update interval:

  • DEFAULT — CFL 50, tighter linear-solver tolerance, Jacobian updated every step. The robust starting point.

  • INTERMEDIATE — CFL 100, looser linear-solver tolerance, Jacobian updated every 3 steps. Faster than DEFAULT for well-behaved cases.

  • AGGRESSIVE — CFL 150, looser linear-solver tolerance still, Jacobian updated every 5 steps. Fastest convergence when it works, but more likely to diverge on difficult cases. Try this once a case has converged once with DEFAULT or INTERMEDIATE and you are iterating on it.

If a run diverges or stalls with INTERMEDIATE or AGGRESSIVE, drop back to DEFAULT — the lost wall-clock time from one diverged run usually outweighs the speed-up of the more aggressive presets.

Strong shocks and high mach number / pressure cases

Solver tuning knobs for shock-related numerical noise

Two parameters are worth knowing about when a case exhibits strong shocks. Both should be left at their defaults otherwise.

  • entropyDelta (default 1e-5): try increasing to ~0.05 if you see noisy residuals near stagnation points or walls. Going much beyond this value can lead to reduced accuracy. Verify that it suits your accuracy requirements before sustained usage.

  • limiterKappa (default 0.1): try decreasing to 0.01–0.05 if oscillations are leaking past the limiter at shocks. Note that a smaller kappa coefficient implies more limiting of the solution.

Stability during mesh adaptation

When local mesh adaptation is active, the AUTO robust-startup mode caps the startup period at 5.5 adaptation intervals. In some high Mach / pressure cases — particularly those that destabilize after the first adaptation cycle — switching to a fixed value equal to one adaptation cycle's worth of iterations (e.g. 1000 if each interval is 1000 iterations) has empirically given better stability. If AUTO behaves well, leave it as-is.

Avoiding shock reflections at the outer boundary

In supersonic or transonic cases, shocks that propagate to the farfield can reflect back into the domain and pollute the solution. With local mesh adaptation enabled, defining an Adaptation Active Region around the body and setting its Error Weight below 1.0 can help. Error Weight is a multiplier applied to the adapter's error metric — 1.0 inside the region, dropping to the user-set value at Max Distance. A smaller value in the farfield means the adapter sees less error there and permits coarser elements. The resulting numerical dissipation in the coarse farfield attenuates the shock before it reaches the boundary. This is worth trying if you see unphysical structures near the farfield in a high-Mach case.

Avoiding negative pressures and temperatures in transients

Using a custom fluid with a minimum pressure of 10 Pa and minimum temperature of 10 K can prevent negative values during transient startup. Inspect the final solution to confirm no regions are clipping the minimum threshold before treating the result as converged.

High angle of attack / near-stall cases

In steady-state simulations near CL,max, initialize each high-AoA case from a converged solution at the next-lower angle of attack rather than from freestream. This emulates standard wind tunnel practice and has been observed to help maintain attached flow at the highest angles of attack, with improved iterative convergence as a side benefit. Without this staged approach, simulations on high-lift configurations can show spurious large flow separation on the upper wing at angles of attack as low as 12°, hindering convergence.

Transient and scale-resolving simulations

If you are planning a transient or scale-resolving simulation (LES, WMLES, DDES), please reach out to Luminary before configuring the case. Best practices in this area are evolving and we would rather walk you through the setup directly than have you work from a static recommendation.

Troubleshooting non-physical / diverged solutions

If your simulation terminates early or produces non-physical values (e.g. negative pressure, density, or temperature), the Luminary docs article below covers how to locate the problem region in the solution, common root causes, and recommended parameter and solver setting changes to try:

Quick reference

Regime

Recommended setup

Steady, ideal gas (default)

DEFAULT discretization preset: NODAL_GRADIENT + FDS + INVARIANT_VENKATAKRISHNAN_CV

Constant density / incompressible

DEFAULT discretization preset: GREEN_GAUSS + RHIE_CHOW + INVARIANT_VENKATAKRISHNAN_CV

Transient / scale-resolving (LES, WMLES, DDES)

Contact Luminary — we will help configure the case directly

Preset axis

When to use which

Spatial discretization

DEFAULT for almost everything; CONSERVATIVE on difficult meshes; HIGH_ACCURACY only on clean, high-quality meshes

Solution controls

DEFAULT to converge a case the first time; INTERMEDIATE or AGGRESSIVE for faster iteration once the case is known to be well-behaved

Customer rule of thumb

Start with DEFAULT + DEFAULT. Move along one axis at a time.

Summary

Start from the appropriate preset. For ideal-gas steady RANS, the recommended trio is NODAL_GRADIENT + FDS + INVARIANT_VENKATAKRISHNAN_CV — exactly what the DEFAULT discretization preset gives you. Switch to RHIE_CHOW for constant-density flows. The only knobs worth adjusting on your own are entropyDelta and limiterKappa (for shock-related noise), robust startup iterations (for high Mach / pressure cases that destabilize after the first adaptation cycle), and the minimum pressure/temperature floor on a custom fluid (to avoid negative values in transients). For transient or scale-resolving runs, or anything else beyond this, reach out to Luminary — we are happy to walk through the setup with you.

Appendix A: Common mesh and convergence issues

Uniform cell density throughout the volume

Symptom: a static volume mesh shows essentially uniform cell size everywhere instead of the expected variation (fine near walls and features, coarsening into the far field). This is almost always a mesh-sizing input issue rather than a mesher bug.

Two things to check, in order:

  • Farfield surfaces in the Mesh > Model > Applies to list. If both wall and farfield surfaces are added under the same Model entry, the max-size set there is applied to the farfield as well. The mesher then propagates that fine size inward from the farfield, producing a uniformly fine volume. Fix: remove farfield surfaces from the Model surface list, leaving only walls and geometry features that genuinely need that size.

  • Global volume max-size set too small. The volume parameters' max_size acts as a cap everywhere in the volume. If it is set near the surface size, the volume cannot coarsen away from boundaries. Fix: raise the global max_size to a value appropriate for the far-field region (often 1–2 orders of magnitude larger than the wall size).

Fluctuating residuals with converged forces

Symptom: at challenging operating points (e.g., Mach 2 / AoA 15° with the SST turbulence model), the Navier-Stokes residuals oscillate or look chaotic and never settle, while the integrated lift / drag / moment coefficients reach a steady value.

This is the classic signature of physical unsteadiness in the flow, not a numerical problem. At these conditions the solution genuinely contains unsteady features — depending on geometry, typically shock-induced separation and unsteady leeward-side vortex / wake structures — that a steady RANS solver cannot kill. The residual reflects those fluctuations and will not converge to machine zero. The integrated forces, however, time-average over the fluctuations and converge to a meaningful value. That is the quantity you should be judging convergence on.

Recommended approach:

  • Switch to coefficient-based stopping conditions. Configure the solver's stopping conditions on the integrated force / moment outputs (lift coefficient, drag coefficient, etc.) rather than on residuals. The solver supports stopping conditions on any defined output, and these will fire when the coefficients are stable to the threshold you specify, even if the residual is still oscillating.

  • Sanity-check the coefficient time history. Plot the coefficient versus iteration. If it shows a clean asymptote with a small ripple, the case is converged in the only sense that matters here. If it shows a slow drift or low-frequency oscillation, the steady RANS approximation is breaking down and you should consider a transient (URANS) run.

  • Consider URANS for genuinely unsteady cases. If the physics is dominated by unsteady separation that you actually need to capture (rather than just average through), switching to a time-accurate (transient) run is the appropriate fix. Contact Luminary to discuss — the trade-offs are case-specific.

Did this answer your question?