Wrong definition of LES constant in sigma LES model
Summary
The LES constant "Csigma" in the sigma LES model is wrongly defined in the source code. Instead of being located inside of the squared bracket together with the LES filter width delta, it is outside of the bracket as part of the D_sigma operator. See Eq. 20 of the Nicoud et al. (2011) paper in which the model is described:
The corresponding OpenFOAM source code is:
template
void sigma::correctNut()
{
this->nut_ =
sqr(this->delta())
*DESModel::Ssigma(fvc::grad(this->U_), Csigma_);
this->nut_.correctBoundaryConditions();
fv::options::New(this->mesh_).correct(this->nut_);
BasicTurbulenceModel::correctNut();
}
This means that the current default value of Csigma = 1.68 is actually too low to generate enough SGS viscosity, but should be set to Csigma = 1.68^2 = 2.8224 instead (if the current source code stays as is).
Steps to reproduce
Example case
Running the decaying isotropic turbulence test case illustrates the issue. Attached are results from a test case version based on DNS data of Wray. Three simulations were run in OF-v2412 with a) the current implementation as is (i.e. Csigma = 1.68), b) the current implementation with an increased Csigma value (i.e. Csigma = 2.8224), c) a FIXED implementation as proposed in section Possible fixes (in this case, Csigma can remain at its current value of 1.68)
It can be seen that the current implementation with Csigma = 1.68 does not produce sufficient eddy viscosity to correctly predict the energy decay. In contrast, the two alternative simulations with either an increased Csigma value or a fixed currentNut function show the expected behaviour (i.e. good agreement to the DNS data). The same qualitative findings can be made when running the standard OpenFOAM tutorial decayIsoTurb.
What is the current bug behaviour?
See section Example case.
What is the expected correct behavior?
See section Example case.
Relevant logs and/or images
Environment information
- OpenFOAM version : v2412|v2406|v2312|v2306|v2212
- Operating system : not relevant
- Hardware info : not relevant
- Compiler : not relevant
Possible fixes
Easy, just move the "Csigma" constant inside of the bracket in the function that computes the turbulent eddy viscosity:
template
void sigma::correctNut()
{
this->nut_ =
sqr(this->delta()*Csigma_)
*DESModel::Ssigma(fvc::grad(this->U_), 1.0);
this->nut_.correctBoundaryConditions();
fv::options::New(this->mesh_).correct(this->nut_);
BasicTurbulenceModel::correctNut();
}
In my eyes, this would be the preferred solution. One could also increase the default value for Csigma in the source code (as demonstrated in the example case), but then the inconsistency between the paper and the specific OpenFOAM code would remain (which is undesirable).

