# Turbulence model

The turbulence model determines how Flow360 simulates turbulent flow structures. It significantly impacts flow separation prediction, wall shear stress calculations, and overall solution accuracy. Flow360 provides multiple turbulence model options to address different flow regimes and application requirements.


# Available Parameters

Parameter Description
Type Turbulence model selection (SA, SST, or None)
Absolute tolerance Convergence criteria for turbulence residual
Relative tolerance Relative residual reduction for unsteady cases
Rotation correction Correction for rotating flows
Hybrid model DES/RANS hybrid model settings
Quadratic constitutive relation Non-linear Reynolds stress model toggle
Order of accuracy Spatial discretization order (1st or 2nd)
Equation evaluation frequency How often to update turbulence equations
Linear solver - max iterations Maximum iterations for linear solver
CFL multiplier Factor applied to CFL from Time Stepping
Reconstruction gradient limiter Gradient limiting strength for stability
Modeling constants Model-specific constants
Update Jacobian frequency Frequency of Jacobian matrix updates
Max force jacobian update physical pseudo steps Controls Jacobian matrix update criteria

# Detailed Descriptions

# Type

The turbulence modeling approach used in the simulation.

  • Options:
    • Spalart-Allmaras: One-equation model, robust for aerospace applications
    • k-Omega SST: Two-equation model, better for adverse pressure gradients
    • None: Laminar flow simulation or Implicit Large Eddy Simulation (ILES)
  • Default: Spalart-Allmaras

Notes:

  • SA is computationally efficient and robust for attached boundary layers
  • SST provides better predictions for separated flows and adverse pressure gradients
  • None can be used for laminar flow simulations or for ILES simulations when combined with appropriate numerical settings

# Absolute tolerance

The convergence threshold for turbulence equation residuals.

  • Default: 1.0e-8 (both SA and SST)
  • Example: 1.0e-6

Notes:

  • Typically can be 1-2 orders of magnitude larger than the Navier-Stokes solver tolerance
  • Controls when the solver considers the turbulence equations converged
  • May need to be relaxed for challenging cases

# Relative tolerance

Relative residual reduction target for the turbulence equations per physical step.

  • Default: 0.0
  • Example: 1e-2

Notes:

  • Applicable only with unsteady simulations
  • For unsteady cases, typically set to 1e-2
  • Once residuals drop by prescribed order of magnitude (0.01 means 2 orders of magnitude), solver proceeds to next physical step

# Rotation correction

Applies corrections to the turbulence model for rotation and curvature effects.

  • Default: False
  • Example: True (for rotating machinery)

Notes:

  • Improves accuracy for flows with system rotation
  • Accounts for effects of rotation and curvature on turbulence production

# Hybrid model

Settings for Detached Eddy Simulation (DES) or other hybrid RANS-LES approaches.

  • Default: None (pure RANS)
  • Options:
    • DDES: Delayed Detached Eddy Simulation
    • ZDES: Zonal Detached Eddy Simulation

Notes:

  • Hybrid models combine RANS near walls with LES-like behavior in separated regions
  • Requires sufficiently fine mesh in regions of interest
  • Better captures unsteady large-scale structures than pure RANS

# Quadratic constitutive relation

Uses a non-linear relation for the Reynolds stress tensor instead of the Boussinesq approximation.

  • Default: False
  • Example: True (for highly swirling flows)

Notes:

  • Improves prediction of secondary flows and anisotropic turbulence
  • Particularly useful for strongly swirling flows
  • Slightly increases computational cost

# Order of accuracy

Spatial discretization order for turbulence variables.

  • Default: 2
  • Example: 1

Notes:

  • 1 is more robust; 2 is more accurate
  • In most cases it should be kept at default value

# Equation evaluation frequency

Controls how often (in pseudo steps) turbulence equations are solved.

  • Default: 4
  • Example: 1

Notes:

  • 1 provides the most robust convergence
  • Higher values can reduce time cost but may slow down convergence

# Linear solver - max iterations*

Configures the maximum number of iterations solved at each pseudo-step for turbulence equations.

  • Default: 20
  • Example: 40

Note:

  • Increasing the parameter can improve robustness at added cost per pseudo-step

# CFL multiplier

Scales the CFL number specifically for the turbulence equations.

  • Default: 2.0
  • Example: 1.0 (for better stability)

Notes:

  • Can often be set higher than the Navier-Stokes CFL multiplier
  • Reducing this can improve stability for difficult cases
  • Effective turbulence CFL = Time Stepping CFL × CFL Multiplier

# Reconstruction gradient limiter

Controls the aggressiveness of gradient limiting for turbulence variables.

  • Default: 0.5 (SA), 1.0 (SST)
  • Example: 0.3 (more limiting for stability)

Notes:

  • Range: [0.0, 2.0]
  • 0.0: Maximum limiting (first-order accuracy)
  • 2.0: No limiting (can be unstable)
  • Lower values improve stability but increase numerical dissipation

# Modeling constants

Model-specific constants that control various aspects of the turbulence model.

  • Default: Standard model values
  • Examples:
    • SA: C_DES = 0.72, C_d = 8.0, C_cb1 = 0.1355
    • SST: C_DES1 = 0.78, C_DES2 = 0.61, C_sigma_k1 = 0.85

Notes:

  • Calibrated for standard test cases
  • Only modify if you have specific reason and validation data
  • Proper validation required when modifying constants

# Update Jacobian frequency

Controls how often the Jacobian matrix for the turbulence equations is updated.

  • Default: 4 (every 4 pseudo-steps)
  • Example: 1 (every iteration)

Notes:

  • Lower values improve robustness but increase cost
  • For challenging cases, set to 1
  • For well-behaved flows, 4 is typically sufficient

# Max force jacobian update physical steps

If the current physical step is lower than this value, jacobian matrix will be updated at every pseudo step.

  • Default: 0 (disabled)
  • Example: 10

Notes:

  • Useful for cases where more stability is needed at the beginning

💡 Tips

  • Model selection:
    • For aerospace external flows: SA is often sufficient and computationally efficient
    • For flows with significant separation: SST typically provides better results
    • For ILES: Use None with appropriate mesh resolution and low numerical dissipation settings

Stability Improvements

  • Reduce the reconstruction gradient limiter (0.3-0.5)
  • Reduce the CFL multiplier if necessary (only applicable when using rampCFL)
  • Increase equation evaluation frequency (lower value)
  • Update the Jacobian more frequently (set update Jacobian frequency = 1)

Hybrid RANS-LES Configuration

  • Ensure mesh is sufficiently refined in regions of interest
  • Use time-accurate simulation with appropriate time step
  • Consider using 'maxEdgeLength' for LES length scale in regions with anisotropic cells

ILES Configuration

  • Set turbulence model to None
  • Use high-order (2nd) accuracy
  • Use kappa_MUSCL value of 0.33 in Navier-Stokes solver
  • Reduce numerical dissipation with appropriate numerical dissipation factor
  • Ensure sufficient mesh resolution in regions of interest

For Challenging Cases

  • Initialize with a stable, converged solution at lower Reynolds number
  • Gradually increase Reynolds number to target value
  • Consider temporarily reducing order of accuracy in turbulence model

❓ Frequently Asked Questions

  • Which turbulence model should I choose for my application?

    For external aerodynamics with attached flow, Spalart-Allmaras is efficient and accurate. For flows with adverse pressure gradients or separation, k-Omega SST often provides better results. For capturing fine-scale turbulent structures, consider ILES (None) with appropriate numerical settings or hybrid RANS-LES approaches. Always validate your model choice against experimental data when possible.

  • How do turbulence model tolerances affect my solution?

    Turbulence model tolerance controls how tightly the turbulence equations must converge. Tighter tolerances (smaller values) provide more accurate results but may require more iterations. For most applications, 1e-7 to 1e-8 is sufficient.

  • When should I use hybrid RANS-LES approaches?

    Use hybrid models for flows where large-scale unsteady structures are important, such as massively separated flows, wake dynamics, or aeroacoustic predictions. These models require finer meshes and time-accurate simulation, making them more computationally expensive than pure RANS.

  • What's the difference between ILES and explicit LES or hybrid RANS-LES?

    In ILES (Implicit Large Eddy Simulation), the numerical scheme itself provides the dissipation of small turbulent scales without an explicit subgrid-scale model. This is achieved by setting the turbulence model to None and relying on controlled numerical dissipation. Explicit LES uses specific subgrid models, while hybrid RANS-LES approaches like DDES use RANS near walls and LES-like behavior away from walls.

  • What are the differences between DDES and ZDES?

    DDES is a hybrid turbulence model that combines the robustness of RANS for attached boundary layers with the detailed resolution of LES for separated flow regions. By modifying the turbulence length scale, DDES delays the switch from RANS to LES, preventing premature LES activation in near-wall areas and avoiding grid-induced separation while capturing large-scale turbulent structures in regions of separation. Shielding is shown to break down when dx / δ < 0.3, dx being the lateral grid spacing in the boundary layer, and δ being the local thickness of the BL. When such a situation occurs, DDES switches prematurely from RANS to LES in the BL causing grid-induced separation.

    ZDES by Deck and Renard 2020. An enhanced hybrid RANS/LES method, ZDES mode 2 (EP) robustly shields attached boundary layers by employing dual shielding functions and an inhibition mechanism based on wall-normal gradients. This formulation prevents premature transition from RANS to LES—regardless of mesh refinement and adverse pressure gradients—while ensuring a rapid switch to LES in free shear layers. Calibrated across various flow configurations, it offers a case-independent, automatic solution for accurately simulating both attached and massively separated turbulent flows. Contrary to DDES, ZDES is more tolerant to dx / δ ratio.

  • Should I modify the turbulence model constants?

    In general, no. The default constants have been carefully calibrated for a wide range of flows. Only modify them if you have specific validation data showing improved results for your particular application class. Document and validate any changes thoroughly.

  • Why does my simulation show excessive dissipation of vortices?

    Standard RANS models like SA and SST tend to dissipate vortical structures prematurely. For better vortex preservation, consider: 1) Using SST instead of SA, 2) Enabling quadratic constitutive relation, 3) Using hybrid RANS-LES approaches, 4) Refining the mesh in vortex regions, or 5) Reducing numerical dissipation in the Navier-Stokes solver.


🐍 Python Example Usage

Below are comprehensive examples showing how to configure different turbulence models for various applications:

import flow360 as fl
from flow360 import u

# Basic Spalart-Allmaras model for external aerodynamics
sa_model = fl.SpalartAllmaras(
    absolute_tolerance=1e-8,
    CFL_multiplier=2.0,
    equation_evaluation_frequency=4,
    reconstruction_gradient_limiter=0.5,
    update_jacobian_frequency=4,
)

# SST k-omega model for flows with adverse pressure gradients
sst_model = fl.KOmegaSST(
    absolute_tolerance=1e-8,
    CFL_multiplier=2.0,
    equation_evaluation_frequency=4,
    reconstruction_gradient_limiter=1.0,
    update_jacobian_frequency=4,
    linear_solver=LinearSolver(max_iterations=20)
)

# Example setup for rotating machinery using SST
turbomachinery_model = fl.KOmegaSST(
    absolute_tolerance=1e-8,
    CFL_multiplier=2.0,
    equation_evaluation_frequency=2,
    reconstruction_gradient_limiter=1.0,
    rotation_correction=True,
)

# Hybrid RANS-LES simulation using SA-DDES
hybrid_sa_model = fl.SpalartAllmaras(
    absolute_tolerance=1e-9,  # Tighter tolerance for hybrid simulation
    CFL_multiplier=1.5,  # Reduced for better stability
    equation_evaluation_frequency=1,  # Every Navier-Stokes step
    reconstruction_gradient_limiter=0.5,
    update_jacobian_frequency=1,  # Update every iteration
    hybrid_model=fl.DetachedEddySimulation(
        shielding_function="DDES",
        grid_size_for_LES="maxEdgeLength"
    )
)

# Advanced SST with custom modeling constants
advanced_sst_model = fl.KOmegaSST(
    absolute_tolerance=1e-8,
    CFL_multiplier=2.0,
    equation_evaluation_frequency=4,
    reconstruction_gradient_limiter=1.0,
    quadratic_constitutive_relation=True,  # Enable for better secondary flow prediction
    modeling_constants=KOmegaSSTModelConstants(
        C_DES1=0.78,
        C_DES2=0.61,
        C_sigma_k1=0.85,
        C_sigma_k2=1.0,
        C_sigma_omega1=0.5,
        C_sigma_omega2=0.856
    )
)

# No turbulence model for ILES simulation
iles_model = NoneSolver()

# Example of setting up a simulation with the turbulence model
# This would typically be part of the SimulationParams configuration
simulation_params = SimulationParams(
    # Other simulation parameters would be here
    models=[fl.Fluid(turbulence_model=sa_model)],  # Use the Spalart-Allmaras model defined above
    # Additional simulation parameters
)