Skip to content

Commit f699090

Browse files
rois1995claude
andcommitted
Describe the SST DES fixes of PR #2150 and the block of the SST compressibility corrections
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013YFdgQwrRqCQ2ihG446aNe
1 parent edd6f4d commit f699090

3 files changed

Lines changed: 36 additions & 24 deletions

File tree

‎_docs_v7/Hybrid-RANS-LES.md‎

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,11 @@ The variants differ in two points: how they protect attached boundary layers fro
4646

4747
SU2 computes the DES length scale at the start of every iteration, in the turbulence solver: `CTurbSASolver::SetDES_LengthScale` for SA and `CTurbSSTSolver::SetDES_LengthScale` for SST. Both are called from `Preprocessing`.
4848

49-
SU2 checks two things before the run (`CConfig::SetPostprocessing`). It stops with an error if:
49+
SU2 checks the setup before the run (`CConfig::SetPostprocessing`). It stops with an error if:
5050

5151
- `HYBRID_RANSLES` is set and `TIME_DOMAIN= NO`. A steady DES has no physical meaning.
5252
- The variant does not match the turbulence model. The `SA_*` variants need `KIND_TURB_MODEL= SA`, the `SST_*` variants need `KIND_TURB_MODEL= SST`. This also stops a run with `KIND_TURB_MODEL= NONE`.
53+
- An `SST_*` variant is combined with an option it does not support: `STOCHASTIC_BACKSCATTER= YES`, `COMPRESSIBILITY-WILCOX` or `COMPRESSIBILITY-SARKAR` in `SST_OPTIONS`, `DES_CONST`, a positive `LES_FILTER_WIDTH`, or `ENFORCE_LES= YES`. See [SST variants](#sst-variants).
5354

5455
DES works with the compressible (`RANS`) and the incompressible (`INC_RANS`) solvers. Both pass the DES length scale and the LES sensor to the output. The regression tests of the SST variants use only the compressible solver.
5556

@@ -83,7 +84,9 @@ For SST, set `KIND_TURB_MODEL= SST` and an `SST_*` variant, for example `HYBRID_
8384

8485
### DES length scale options
8586

86-
These options act only on the `SA_*` variants. The `SST_*` variants ignore them, without a warning.
87+
These options act only on the `SA_*` variants. With an `SST_*` variant, SU2 stops with an error if you set `DES_CONST`, give a positive `LES_FILTER_WIDTH`, or set `ENFORCE_LES= YES`.
88+
89+
At the start of the run, the screen shows the DES constant in use. For SA it is the value of `DES_CONST`. For SST it is the blended formula of the [SST variants](#sst-variants).
8790

8891
| Option | Default | What it does |
8992
|---|---|---|
@@ -111,7 +114,7 @@ Facts from the code:
111114
- The sensor is computed in the compressible Navier-Stokes solver (`CNSSolver::SetRoe_Dissipation`). The incompressible solver does not use this option.
112115
- The minimum upwind fraction is fixed at 0.05 in the code. The Ducros threshold for `FD_DUCROS` is fixed at 0.65.
113116
- `FD` computes its own f_d from the wall distance and the eddy viscosity. It does not need `HYBRID_RANSLES`. It always uses the SA form of f_d (constant 8), also with an SST variant.
114-
- `NTS` always reads `DES_CONST`, also with an SST variant.
117+
- `NTS` always reads `DES_CONST`, also with an SST variant. With an SST variant you cannot set `DES_CONST`, so `NTS` uses the default, 0.65.
115118
- With the option on, the volume output gets the field `ROE_DISSIPATION`.
116119

117120
For incompressible LES regions, SU2 has the centered scheme `CONV_NUM_METHOD_FLOW= LD2` (low dissipation, low dispersion). It works only with the incompressible solver and a constant-density fluid. The backscatter test case uses it.
@@ -120,11 +123,11 @@ For incompressible LES regions, SU2 has the centered scheme `CONV_NUM_METHOD_FLO
120123

121124
In the "grey area" just after separation, a DES has neither modeled nor resolved turbulence: the RANS eddy viscosity is gone and the resolved eddies have not grown yet. The stochastic backscatter model (Kok 2017) adds random forcing in LES regions to speed up the growth of resolved eddies. *Backscatter* means energy that flows from the small, modeled scales back to the large, resolved ones.
122125

123-
SU2 adds a random stress to the momentum equations. The random field comes from three extra equations (Langevin equations) for a random vector, solved together with the SA equation. The model works only with the `SA_*` variants (see [Known limits](#known-limits)).
126+
SU2 adds a random stress to the momentum equations. The random field comes from three extra equations (Langevin equations) for a random vector, solved together with the SA equation. The model works only with the `SA_*` variants. With an `SST_*` variant, SU2 stops with an error.
124127

125128
| Option | Default | What it does |
126129
|---|---|---|
127-
| `STOCHASTIC_BACKSCATTER` | `NO` | Turns the model on. Needs `HYBRID_RANSLES` other than `NONE` and a 3D mesh, else SU2 stops with an error. |
130+
| `STOCHASTIC_BACKSCATTER` | `NO` | Turns the model on. Needs an `SA_*` variant in `HYBRID_RANSLES` and a 3D mesh, else SU2 stops with an error. |
128131
| `SBS_INTENSITY_COEFF` | `1.0` | Strength of the random stress. Must not be negative. |
129132
| `SBS_TIMESCALE_COEFF` | `0.05` | Time scale coefficient of the Langevin equations. If `0` or less, SU2 does not solve them. It then uses a new, uncorrelated random field at every time step. |
130133
| `SBS_LENGTHSCALE_COEFF` | `0.02` | Strength of the spatial smoothing of the random source. The smoothing length grows with this coefficient times the squared cell size. |
@@ -181,6 +184,8 @@ All facts below are from `SU2_CFD/src/solvers/CTurbSASolver.cpp` (`SetDES_Length
181184

182185
**Roughness.** With DES on, the SA source term uses the DES length scale and ignores `WALL_ROUGHNESS`. The rough-wall boundary condition and the eddy viscosity still use it. See [Wall Treatment](../Wall-Treatment/#roughness-with-sa).
183186

187+
**Compressibility correction.** With `SA_OPTIONS= COMPRESSIBILITY`, the extra destruction term −C5 ν̃² Σ(∂u_i/∂x_j)² / a² (C5 = 3.5, a the speed of sound) acts everywhere, also in LES mode, but it scales with ν̃², so it is small there. Forsythe et al. (2002) used the same term with SA-based DES and found a negligible effect.
188+
184189
**Backscatter inside the SA equation.** Where the backscatter model is active (LES sensor above `SBS_FD_LOWER_THRESHOLD`), the SA source term uses fv1 = 1, fv2 = 0 and fw = 0 (`SU2_CFD/include/numerics/turbulent/turb_sources.hpp`). With fw = 0, the SA destruction term is switched off there. The random source added to the SA equation is limited to 5 times the production term.
185190

186191
**Backscatter energy estimate.** The random stress scales with an estimate of the subgrid kinetic energy, (eddy viscosity / DES length scale)². In the momentum equations, SU2 uses the dynamic eddy viscosity μt for this estimate (`SU2_CFD/src/numerics/flow/flow_diffusion.cpp`). In the SA equation and in the averaged output, it uses the kinematic eddy viscosity νt (to be reviewed).
@@ -192,7 +197,7 @@ The length scale is computed in `CTurbSSTSolver::SetDES_LengthScale` (`SU2_CFD/s
192197
**Common parts.**
193198

194199
- l_RANS = √k / (β* ω), with β* = 0.09.
195-
- The DES constant is blended with the SST function F1: C_DES = 0.78·F1 + 0.61·(1 − F1). SU2 does not read `DES_CONST` here.
200+
- The DES constant is blended with the SST function F1: C_DES = 0.78·F1 + 0.61·(1 − F1). SU2 does not use `DES_CONST` here, and stops with an error if you set it.
196201
- h_max is the longest edge from the node, as for SA. The paper uses the longest edge of the cell.
197202
- The shielding functions use r_d = (ν_t + ν) / (κ² d² √(0.5 (S² + Ω²))), with κ = 0.41, the strain rate magnitude S and the vorticity magnitude Ω. To avoid a division by zero, SU2 keeps S and Ω above 1e-12 and the denominator of r_d above 1e-10.
198203

@@ -210,15 +215,18 @@ The length scale is computed in `CTurbSSTSolver::SetDES_LengthScale` (`SU2_CFD/s
210215

211216
**`SST_EDDES`.** The same as `SST_DDES`, with h_max replaced by the [shear-layer-adapted cell size](#shear-layer-adapted-cell-size). The paper of Shur et al. (2015) uses SA. The code comment cites Guseva et al. (2017) and Xiao et al. (2020) for the use with SST.
212217

218+
**LES sensor.** `CTurbSSTSolver::SetDES_LengthScale` also sets the LES sensor, with the same meaning as for SA. Where the LES length is shorter than l_RANS, the sensor is the weight of the LES branch: f_d for `SST_DDES` and `SST_EDDES`, and 1 − f̃\_d for `SST_IDDES` and `SST_SIDDES`. Elsewhere it is 0.
219+
213220
**Source term.**
214221

215222
- In every SST variant, the k destruction is ρ k^{3/2} / l_DES. The ω equation does not change.
216223
- The production limiter keeps its RANS form, based on ω, as in the paper (Eq. 3). Its constant is 20 with `V1994m` and 10 with `V2003m`, as in RANS.
217-
- The implicit Jacobian of the k destruction keeps its RANS form, β* ω. This affects only how the inner iterations converge, not the converged solution.
224+
- The implicit Jacobian of the k destruction follows the hybrid term. SU2 treats l_DES as a constant there. The derivative with respect to ρk is then 1.5 √k / l_DES, times the cell volume, and there is no ω term.
225+
- The source term declares l_DES as an input of the algorithmic differentiation (AD) preaccumulation. The discrete adjoint then gets the derivatives that pass through the length scale.
218226

219-
**`SST_OPTIONS`.** SU2 accepts every `SST_OPTIONS` value with a hybrid variant. The regression tests use the default, `V2003m`. Points to know:
227+
**`SST_OPTIONS`.** The regression tests use the default, `V2003m`. Points to know:
220228

221-
- `COMPRESSIBILITY-WILCOX` and `COMPRESSIBILITY-SARKAR`: in hybrid mode, the k destruction loses the compressibility factor (1 + ζ F(Mt)). The ω destruction and the Sarkar dilatation term keep their corrections.
229+
- `COMPRESSIBILITY-WILCOX` and `COMPRESSIBILITY-SARKAR`: SU2 stops with an error if you use them with an SST variant. How these corrections should act in the LES region is not validated yet, and the literature does not agree. Forsythe et al. (2002) put the correction only into the RANS length scale, so it switches off in LES mode. Xiao and Fu (2009) keep the correction factor on the whole k destruction.
222230
- `SUSTAINING`: the sustaining source of k keeps its RANS form: β* ρ k ω, with the free-stream values of k and ω.
223231
- With the LM transition model, SU2 multiplies the hybrid k destruction by the effective intermittency (limited to between 0.1 and 1), as in RANS.
224232

@@ -259,6 +267,8 @@ This page does not repeat the model equations. See the original papers:
259267
- ZDES: S. Deck, "Recent improvements in the Zonal Detached Eddy Simulation (ZDES) formulation", *Theor. Comput. Fluid Dyn.* 26, 523–550, 2012. [doi:10.1007/s00162-011-0240-z](https://doi.org/10.1007/s00162-011-0240-z)
260268
- EDDES and the SLA cell size: M. L. Shur et al., "An enhanced version of DES with rapid transition from RANS to LES in separated flows", *Flow Turbul. Combust.* 95, 709–737, 2015. [doi:10.1007/s10494-015-9618-0](https://doi.org/10.1007/s10494-015-9618-0)
261269
- SST DDES and IDDES: M. S. Gritskevich, A. V. Garbaruk, J. Schütze, F. R. Menter, "Development of DDES and IDDES formulations for the k-ω shear stress transport model", *Flow Turbul. Combust.* 88, 431–449, 2012. [doi:10.1007/s10494-011-9378-4](https://doi.org/10.1007/s10494-011-9378-4)
270+
- Compressibility corrections in DES (SA and SST): J. R. Forsythe, K. A. Hoffmann, R. M. Cummings, K. D. Squires, "Detached-eddy simulation with compressibility corrections applied to a supersonic axisymmetric base flow", *J. Fluids Eng.* 124(4), 911–923, 2002. [doi:10.1115/1.1517572](https://doi.org/10.1115/1.1517572)
271+
- Compressibility correction kept on the whole k destruction: Z. Xiao, S. Fu, "Studies of the unsteady supersonic base flows around three afterbodies", *Acta Mech. Sin.* 25(4), 471–479, 2009. [doi:10.1007/s10409-009-0248-4](https://doi.org/10.1007/s10409-009-0248-4)
262272
- SLA with SST, as cited in the code: Guseva et al., *Flow Turbul. Combust.* 98, 2017; Xiao et al., *Int. J. Heat Fluid Flow* 85, 2020.
263273
- NTS blending: A. Travin et al., "Physical and numerical upgrades in the detached-eddy simulation of complex turbulent flows", *Advances in LES of Complex Flows*, 239–254, 2002. [doi:10.1007/0-306-48383-1_16](https://doi.org/10.1007/0-306-48383-1_16)
264274
- NTS form used in SU2: Z. Xiao et al., "Numerical dissipation effects on massive separation around tandem cylinders", *AIAA J.* 50(5), 1119–1136, 2012. [doi:10.2514/1.J051299](https://doi.org/10.2514/1.J051299)
@@ -278,8 +288,8 @@ All advice in this section is general practice, not checked in SU2 (to be review
278288
- **Time marching.** Use `TIME_MARCHING= DUAL_TIME_STEPPING-2ND_ORDER`, as in the flat plate and backscatter tests. Converge the inner iterations by 2 to 3 orders per time step (to be reviewed).
279289
- **Convective scheme.** Use a second-order scheme (`MUSCL_FLOW= YES`) without a slope limiter where there are no shocks. With `ROE`, `SLAU` or `SLAU2`, try `ROE_LOW_DISSIPATION= FD` or `NTS`. Add a `_DUCROS` variant if there are shocks (to be reviewed).
280290
- **Statistics.** Exclude the start-up transient with `WINDOW_START_ITER`, then sample over many characteristic times. Compare separate sampling blocks and extend the interval; a flat cumulative average or passing Cauchy criterion alone does not establish statistical convergence (advice, to be reviewed).
281-
- **Check the switch (SA).** Plot `LES_SENSOR` and `DES_LENGTHSCALE`. Attached boundary layers should stay at sensor 0 (RANS). Separated regions should show sensor near 1 (LES).
282-
- **Check the switch (SST).** `LES_SENSOR` is zero for the SST variants. Instead, divide `DES_LENGTHSCALE` by 10 × `SRS_GRID_SIZE`, which is l_RANS. For `SST_DDES` and `SST_EDDES`, the ratio is 1 in RANS mode and smaller in LES mode.
291+
- **Check the switch.** Plot `LES_SENSOR` and `DES_LENGTHSCALE`, for SA and SST variants alike. Attached boundary layers should stay at sensor 0 (RANS). Separated regions should show sensor near 1 (LES). With `SST_IDDES` and `SST_SIDDES`, the wall-modelled LES branch can put the outer part of an attached boundary layer in LES mode on purpose.
292+
- **Extra check (SST).** Divide `DES_LENGTHSCALE` by 10 × `SRS_GRID_SIZE`, which is l_RANS. For `SST_DDES` and `SST_EDDES`, the ratio is 1 in RANS mode and smaller in LES mode.
283293

284294
## Output fields
285295

@@ -298,7 +308,7 @@ All advice in this section is general practice, not checked in SU2 (to be review
298308
The fields that are new with PR #2150 (`CFlowOutput.cpp`):
299309

300310
- `DES_LENGTHSCALE` holds the hybrid length. For SA it is the length that replaces the wall distance in the destruction term. For SST it is l_DES in the k destruction; in RANS mode it equals l_RANS.
301-
- `LES_SENSOR` comes from the SA solver. For the SST variants, SU2 writes 0 everywhere.
311+
- `LES_SENSOR` comes from the turbulence solver, for SA and SST variants. It is 0 in RANS mode. See [SA variants](#sa-variants) and [SST variants](#sst-variants) for its value in LES mode.
302312
- `LESIQ` = 1 / (1 + 0.05 ((μ_t + μ)/μ)^0.53). This is the viscosity-based LES index of quality of Celik et al. (2005). It is near 1 where the eddy viscosity is small compared with the laminar viscosity.
303313
- `SRS_GRID_SIZE` = 0.1 · √k / (0.09 ω), one tenth of l_RANS. It suggests a cell size for a scale-resolving simulation. The factor 0.1 is fixed in the code.
304314
- `GRAD_VEL_` fields hold the velocity gradient: the first letter is the velocity component, the second the direction. For example, `GRAD_VEL_XY` is ∂u/∂y.
@@ -316,18 +326,16 @@ The regression tests only check that the options run and that the results do not
316326

317327
- [`TestCases/ddes/flatplate/ddes_flatplate.cfg`](https://github.com/su2code/SU2/blob/develop/TestCases/ddes/flatplate/ddes_flatplate.cfg): `SA_EDDES` on a 2D flat plate, compressible, `SLAU2`. A 2D flat plate is not a real DES case.
318328
- [`TestCases/backscatter/backward_step/backwardStep.cfg`](https://github.com/su2code/SU2/blob/develop/TestCases/backscatter/backward_step/backwardStep.cfg): `SA_DDES` with stochastic backscatter in a box, incompressible, `LD2` scheme, periodic in the spanwise direction. It shows all `SBS_*` options and the `TIME_AVERAGE` output.
319-
- `TestCases/ddes/oneram6/ddes_oneram6_*.cfg` (PR #2150), one per model: [`sst_ddes`](https://github.com/su2code/SU2/blob/e9e85686ad3b53fb76eb912d1e8be3b521372838/TestCases/ddes/oneram6/ddes_oneram6_sst_ddes.cfg), [`sst_iddes`](https://github.com/su2code/SU2/blob/e9e85686ad3b53fb76eb912d1e8be3b521372838/TestCases/ddes/oneram6/ddes_oneram6_sst_iddes.cfg), [`sst_siddes`](https://github.com/su2code/SU2/blob/e9e85686ad3b53fb76eb912d1e8be3b521372838/TestCases/ddes/oneram6/ddes_oneram6_sst_siddes.cfg), [`sst_eddes`](https://github.com/su2code/SU2/blob/e9e85686ad3b53fb76eb912d1e8be3b521372838/TestCases/ddes/oneram6/ddes_oneram6_sst_eddes.cfg) and [`sa_eddes`](https://github.com/su2code/SU2/blob/e9e85686ad3b53fb76eb912d1e8be3b521372838/TestCases/ddes/oneram6/ddes_oneram6_sa_eddes.cfg). They use the ONERA M6 wing on a hexahedral mesh, compressible, `ROE`. Each one restarts from an SA or SST RANS solution, so that the LES branch of the length scale is active, and runs a few short time steps. They are in the serial, parallel and hybrid regression scripts. They are not a setup example.
329+
- `TestCases/ddes/oneram6/ddes_oneram6_*.cfg` (PR #2150), one per model: [`sst_ddes`](https://github.com/su2code/SU2/blob/1bcd4a74257d5cce1929187d635fc1dc0d1ae5c8/TestCases/ddes/oneram6/ddes_oneram6_sst_ddes.cfg), [`sst_iddes`](https://github.com/su2code/SU2/blob/1bcd4a74257d5cce1929187d635fc1dc0d1ae5c8/TestCases/ddes/oneram6/ddes_oneram6_sst_iddes.cfg), [`sst_siddes`](https://github.com/su2code/SU2/blob/1bcd4a74257d5cce1929187d635fc1dc0d1ae5c8/TestCases/ddes/oneram6/ddes_oneram6_sst_siddes.cfg), [`sst_eddes`](https://github.com/su2code/SU2/blob/1bcd4a74257d5cce1929187d635fc1dc0d1ae5c8/TestCases/ddes/oneram6/ddes_oneram6_sst_eddes.cfg) and [`sa_eddes`](https://github.com/su2code/SU2/blob/1bcd4a74257d5cce1929187d635fc1dc0d1ae5c8/TestCases/ddes/oneram6/ddes_oneram6_sa_eddes.cfg). They use the ONERA M6 wing on a hexahedral mesh, compressible, `ROE`. Each one restarts from an SA or SST RANS solution, so that the LES branch of the length scale is active, and runs a few short time steps. They are in the serial, parallel and hybrid regression scripts. They are not a setup example.
320330

321331
Background: [An Overview of DDES in SU2: Implementation and Recent Results](/documents/dev_meeting_2017/su2_dev_molina.pdf) (2017 developers meeting).
322332

323333
## Known limits
324334

325335
- **`ROE_LOW_DISSIPATION` is ignored** with schemes other than `ROE`, `SLAU` and `SLAU2`, and in the incompressible solver, without a warning.
326-
- **Backscatter is 3D only and needs an `SA_*` variant.** SU2 does not stop if you turn it on with an `SST_*` variant. The SST solver has no random field, so the flow solver reads other turbulence variables in its place. Do not use this combination.
327-
- **The SST variants ignore `DES_CONST`, `LES_FILTER_WIDTH` and `ENFORCE_LES`**, without a warning. With `ENFORCE_LES= YES`, the screen still says that LES is enforced everywhere.
328-
- **No LES sensor for SST.** `LES_SENSOR` is zero for the SST variants (see [Recommended use](#recommended-use) for another check).
329-
- **SST compressibility corrections.** In hybrid mode, the k destruction has no compressibility factor (see [SST variants](#sst-variants)).
330-
- **Discrete adjoint with SST variants.** The SST source term does not declare the DES length scale as an input of the algorithmic differentiation (AD) preaccumulation (`turb_sources.hpp`). Derivatives that pass through the length scale can be missing (to be reviewed).
336+
- **Backscatter is 3D only and needs an `SA_*` variant.** SU2 stops with an error in 2D or with an `SST_*` variant.
337+
- **The SST variants do not use `DES_CONST`, `LES_FILTER_WIDTH` and `ENFORCE_LES`.** SU2 stops with an error if you set `DES_CONST`, give a positive `LES_FILTER_WIDTH`, or set `ENFORCE_LES= YES` with an SST variant.
338+
- **No SST compressibility corrections in hybrid mode.** SU2 stops with an error if `SST_OPTIONS` contains `COMPRESSIBILITY-WILCOX` or `COMPRESSIBILITY-SARKAR` with an SST variant (see [SST variants](#sst-variants)).
331339
- **Wall roughness is only partly used with SA DES** (see [Roughness](#sa-variants)).
332340
- **Time averages restart from zero** after a restart.
333341

@@ -343,4 +351,4 @@ Background: [An Overview of DDES in SU2: Implementation and Recent Results](/doc
343351

344352
---
345353

346-
Source review: 23 October 2026, against [SU2 PR #2150 at `e9e85686ad`](https://github.com/su2code/SU2/tree/e9e85686ad3b53fb76eb912d1e8be3b521372838). See the [review scope and outstanding validation](../Documentation-Status/#guide-and-model-review). Setup recommendations remain draft where indicated.
354+
Source review: 23 October 2026, against [SU2 PR #2150 at `1bcd4a7425`](https://github.com/su2code/SU2/tree/1bcd4a74257d5cce1929187d635fc1dc0d1ae5c8). See the [review scope and outstanding validation](../Documentation-Status/#guide-and-model-review). Setup recommendations remain draft where indicated.

0 commit comments

Comments
 (0)