Skip to content

Conversation

@AngPass
Copy link

@AngPass AngPass commented Sep 16, 2025

Proposed Changes

Hybrid RANS-LES methods aim to leverage the strengths of both Reynolds-Averaged Navier-Stokes (RANS) approaches and Large Eddy Simulation (LES), applying RANS near solid walls for computational efficiency and LES in outer flow regions for improved fidelity. A persistent challenge in these techniques is the appearance of the so-called grey area—the transitional region between RANS and LES zones—which is characterized by the absence of resolved turbulence. This leads to degraded accuracy in capturing free shear layers. The Stochastic Backscatter Model (Kok, 2017) aims to mitigate this issue. The model introduces stochastic forcing terms into the momentum and total energy equations that emulate the backscatter of energy from unresolved (subgrid) scales to resolved scales. The random forcing is formulated as the curl of a stochastic vector potential, say $\underline\xi$. The latter must be constructed using a three-step procedure:

  1. A vector of three mutually-uncorrelated normally-distributed random variables is generated at each node.
  2. A Laplacian smoothing in space (Passariello, 2025) is performed on each component of this vector.
  3. The smoothed fields are used as source terms in three stochastic differential equations (also known as Langevin equations). The latter are solved for the components of the vector potential $\underline\xi$.
  4. The curl of $\underline\xi$ is added to the momentum and total energy equations as source term. This can be done modifying the definition of the modeled stress tensor.

References:

  • Kok, J. C. (2017). A stochastic backscatter model for grey-area mitigation in detached eddy simulations. Flow, Turbulence and Combustion, 99(1), 119-150.
  • Passariello, A. (2025). Stochastic Backscatter Model for Unstructured Solvers. arXiv preprint arXiv:2508.17958.

Roadmap

  1. Modifying the definition of the modeled stress tensor using a stochastic contribution. As preliminary step, the vector of uncorrelated variables (point 1 in the procedure above) is employed.
  2. Performing a smoothing on the uncorrelated variables. This requires the solution of a Laplace equation at the beginning of each step.
  3. Implementing three additional equations for the components of the stochastic vector potential. These equations require the use of symmetry-preserving central scheme for the discretization of the convective terms (Kok, 2017).

Related Work

None.

PR Checklist

  • I am submitting my contribution to the develop branch.
  • My contribution generates no new compiler warnings (try with --warnlevel=3 when using meson).
  • My contribution is commented and consistent with SU2 style (https://su2code.github.io/docs_v7/Style-Guide/).
  • I used the pre-commit hook to prevent dirty commits and used pre-commit run --all to format old commits.
  • I have added a test case that demonstrates my contribution, if necessary.
  • I have updated appropriate documentation (Tutorials, Docs Page, config_template.cpp), if necessary.

AngPass and others added 2 commits September 15, 2025 18:26
The Reynolds stress tensor definition is modified to include a random contribution, which is expressed as the curl of a normally-distributed stochastic vector potential.
AngPass and others added 2 commits September 23, 2025 10:12
Add Langevin equations to Spalart-Allmaras solver (uncorrelated random source term) + add stochastic contribution to Reynolds stress tensor (using conservative variables from Langevin equations).
@pcarruscag pcarruscag changed the title Stochastic Backscatter Model for Grey Area Mitigation in Hybrid RANS-LES Simulations [WIP] Stochastic Backscatter Model for Grey Area Mitigation in Hybrid RANS-LES Simulations Sep 23, 2025
* \param[in] val_stochvar_j - Value of the stochastic variable at point j.
*/
inline void SetStochVar(su2double *val_stochvar_i, su2double *val_stochvar_j) {
stochVar_i = val_stochvar_i;

Check warning

Code scanning / CodeQL

Local variable address stored in non-local memory Warning

A stack address which arrived via a
parameter
may be assigned to a non-local variable.
*/
inline void SetStochVar(su2double *val_stochvar_i, su2double *val_stochvar_j) {
stochVar_i = val_stochvar_i;
stochVar_j = val_stochvar_j;

Check warning

Code scanning / CodeQL

Local variable address stored in non-local memory Warning

A stack address which arrived via a
parameter
may be assigned to a non-local variable.
if (backscatter) {
su2double currentTime = config->GetPhysicalTime();
su2double lastTime = numerics->GetLastTime();
if (currentTime != lastTime) {

Check notice

Code scanning / CodeQL

Equality test on floating-point values Note

Equality checks on floating point values can yield unexpected results.
std::normal_distribution<su2double> rnd(0.0,1.0);
for (unsigned long iPoint = 0; iPoint < npoint; iPoint++) {
Solution_Old(iPoint, 0) = Solution(iPoint, 0) = val_nu_tilde;
for (unsigned short iVar = 1; iVar < nvar; iVar++) {

Check failure

Code scanning / CodeQL

Comparison of narrow type with wide type in loop condition High

Comparison between
iVar
of type unsigned short and
nvar
of wider type unsigned long.
AngPass and others added 20 commits September 24, 2025 11:05
Fix sanitizer warnings and regression test failures

- Address issues reported by clang sanitizers.
- Adjust implementation to ensure regression tests pass.
- Enhance readability.
- Ensure consistent declaration types.
- Extend implementation to 2D configurations.
- Improve robustness.
Enforce boundary conditions in Langevin equations.
- Implement a skew-symmetric scheme for the discretization of the convective terms in the Langevin equations.
- Fix the seed for the generation of the random source terms at the beginning of the simulation.
- Add the flag for the simulation of the Decaying Isotropic Homogeneous Turbulence.
- Generate the initial velocity field matching the experimental data by Comte-Bellot & Corrsin.
- Include a preliminary test case.
- Implement flag to enforce LES in the whole domain.
- Add option to set the LES filter width to a user-specified value.
- Add velocity divergence to volume outputs.
- Remove internal generation of initial velocity field for simulating the Decaying Isotropic Homogeneous Turbulence (DIHT).
- Add consistent evaluation of the turbulent kinetic energy in the random source term appearing in the momentum equations.
- Add backscatter intensity coefficient in the configuration file.
- Add random initialization of the Langevin variables.
- Add Laplacian smoothing of source terms in Langevin equations.
Remark: pseudo-time integration is employed (residuals are printed on screen with fixed frequency, the maximum number of time iterations can be defined by the user).
- Fix redundancy in virtual member definition.
- Add stochastic source term to Spalart-Allmaras turbulence model equation (to ensure exchange of modeled and resolved kinetic energy).
- Replace dual-time integration with Successive Over-Relaxation for Laplacian smoothing.
- Initialize stochastic vector potential as equal to the stochastic source terms in Langevin equations.
- Add random source term to main balance equations in LES zones exclusively.
- Blend RANS and LES turbulence timescales using the LES sensor.
- Scale source terms in Langevin equations using Bessel functions to preserve the variance.
-  Compute Bessel integral at the beginning of the simulation for optimization.
- Add variance monitoring to screen output.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants