# Turbulence Model
# ๐ Turbulence Model Configuration
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 | Unit |
---|---|---|
Type | Turbulence model selection (SA, SST, or None) | |
Absolute Tolerance | Convergence criteria for turbulence residual | |
CFL Multiplier | Factor applied to CFL from Time Stepping | |
Equation Evaluation Frequency | How often to update turbulence equations | steps |
Reconstruction Gradient Limiter | Gradient limiting strength for stability | |
Quadratic Constitutive Relation | Non-linear Reynolds stress model toggle | |
Update Jacobian Frequency | Frequency of Jacobian matrix updates | steps |
Rotation Correction | Correction for rotating flows | |
Hybrid Model | DES/RANS hybrid model settings | |
Modeling Constants | Model-specific constants |
# ๐ Detailed Descriptions
# Type
The turbulence modeling approach used in the simulation.
- Options:
Spalart-Allmaras
: One-equation model, robust for aerospace applicationsk-Omega SST
: Two-equation model, better for adverse pressure gradientsNone
: Laminar flow simulation or Implicit Large Eddy Simulation (ILES)
- Default:
Spalart-Allmaras
- Python Example:
# Spalart-Allmaras model turbulence_model = SpalartAllmaras( absolute_tolerance=1e-8, equation_evaluation_frequency=4 ) # k-Omega SST model turbulence_model = KOmegaSST( absolute_tolerance=1e-8, equation_evaluation_frequency=4 ) # No turbulence model (laminar or ILES) turbulence_model = NoneSolver()
- 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
# 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
# Equation Evaluation Frequency
Controls how frequently the turbulence equations are solved relative to the Navier-Stokes equations.
- Default:
4
(every 4 Navier-Stokes steps) - Example:
1
(same frequency as Navier-Stokes) - Notes:
- Higher values reduce computational cost
- For challenging cases, set to 1 for better coupling
- For well-behaved flows, 4-10 is typically sufficient
# 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
# 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
# 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
# Rotation Correction
Applies corrections to the turbulence model for rotating flows.
- Default:
False
- Example:
True
(for rotating machinery) - Notes:
- Improves accuracy for flows with system rotation
- Recommended for turbomachinery applications
- Accounts for effects of rotation 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 SimulationZDES
: 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
# 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
- SA:
- Python Example:
# Spalart-Allmaras with custom constants turbulence_model = SpalartAllmaras( modeling_constants=SpalartAllmarasModelConstants( C_DES=0.72, C_d=8.0, C_cb1=0.1355 ) ) # SST with custom constants turbulence_model = KOmegaSST( modeling_constants=KOmegaSSTModelConstants( 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
๐ก 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 rotating machinery: Consider using SST with rotation correction enabled
- 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 rotating machinery, SST with rotation correction is recommended. 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,
quadratic_constitutive_relation=False,
update_jacobian_frequency=4,
rotation_correction=False
)
# 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,
quadratic_constitutive_relation=False,
update_jacobian_frequency=4,
rotation_correction=False,
linear_solver=LinearSolver(max_iterations=20)
)
# Specialized 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, # Enable rotation correction for turbomachinery
update_jacobian_frequency=2 # Update more frequently
)
# 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
)
โ Navier-Stokes Solver Transition Model โ