Last Updated: May 6, 2019
The WALE (Wall-Adapting Local Eddy-viscosity) SGS model is one of the major SGS models. It is an algebraic eddy viscosity model (0-equation model) as with the Smagorinsky SGS model, but it has some excellent features that the Smagorinsky model does not have.
Implementation in OpenFOAM
In the WALE model, the subgrid scale eddy viscosity \(\nu_{sgs}\) is evaluated as
\begin{equation}
\nu_{sgs} = C_{k} \Delta \sqrt{k_{sgs}}, \tag{1} \label{eq:nusgs}
\end{equation}
where \(C_{k}\) is a model constant and \(k_{sgs}\) is the subgrid scale kinetic energy. You can find its definition in this post.
1 2 3 4 5 6 7 8 9 |
template<class BasicTurbulenceModel> void WALE<BasicTurbulenceModel>::correctNut() { this->nut_ = Ck_*this->delta()*sqrt(this->k(fvc::grad(this->U_))); this->nut_.correctBoundaryConditions(); fv::options::New(this->mesh_).correct(this->nut_); BasicTurbulenceModel::correctNut(); } |
The traceless symmetric part of the square of the velocity gradient tensor \(S^d\) is calculated in the following function.
\begin{eqnarray}
S_{ij}^d = \frac{1}{2} \left( \frac{\partial \overline{u}_k}{\partial x_i}\frac{\partial \overline{u}_j}{\partial x_k} + \frac{\partial \overline{u}_k}{\partial x_j}\frac{\partial \overline{u}_i}{\partial x_k} \right) – \frac{1}{3} \delta_{ij} \frac{\partial \overline{u}_k}{\partial x_l}\frac{\partial \overline{u}_l}{\partial x_k}, \tag{2} \label{eq:sd}
\end{eqnarray}
where \(\delta_{ij}\) is the Kronecker delta.
1 2 3 4 5 6 7 8 |
template<class BasicTurbulenceModel> tmp<volSymmTensorField> WALE<BasicTurbulenceModel>::Sd ( const volTensorField& gradU ) const { return dev(symm(gradU & gradU)); } |
These tensor operations used above are summarized in the following post:
The subgrid scale kinetic energy \(k_{sgs}\) is
\begin{equation}
k_{sgs} = \left( \frac{C_w^2 \Delta}{C_k} \right)^2 \frac{\left( S_{ij}^d S_{ij}^d \right)^3}{\left( \left( \overline{S}_{ij} \overline{S}_{ij} \right)^{5/2} + \left( S_{ij}^d S_{ij}^d \right)^{5/4} \right)^2}, \tag{3} \label{eq:ksgs}
\end{equation}
where
\begin{equation}
\overline{S}_{ij} = \frac{1}{2} \left( \frac{\partial \overline{u}_{i}}{\partial x_{j}} + \frac{\partial \overline{u}_{j}}{\partial x_{i}}\right), \tag{4} \label{eq:s}
\end{equation}
is the resolved-scale strain rate tensor.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
template<class BasicTurbulenceModel> tmp<volScalarField> WALE<BasicTurbulenceModel>::k ( const volTensorField& gradU ) const { volScalarField magSqrSd(magSqr(Sd(gradU))); return volScalarField::New ( IOobject::groupName("k", this->alphaRhoPhi_.group()), sqr(sqr(Cw_)*this->delta()/Ck_)* ( pow3(magSqrSd) /( sqr ( pow(magSqr(symm(gradU)), 5.0/2.0) + pow(magSqrSd, 5.0/4.0) ) + dimensionedScalar ( "small", dimensionSet(0, 0, -10, 0, 0), small ) ) ) ); } |
Finally, we can get the following expression by substituting Eq. \eqref{eq:ksgs} into Eq. \eqref{eq:nusgs}:
\begin{eqnarray}
\nu_{sgs} = \left( C_w \Delta \right)^2 \frac{\left( S_{ij}^d S_{ij}^d \right)^{3/2}}{\left( \overline{S}_{ij} \overline{S}_{ij} \right)^{5/2} + \left( S_{ij}^d S_{ij}^d \right)^{5/4}}, \tag{5} \label{eq:nusgs2}
\end{eqnarray}
It is the same as Eq. (13) in [1].
Features
- Algebraic eddy viscosity model (0-equation model)
- The rotation rate is taken into account in the calculation of \(\nu_{sgs}\)
- To be able to handle transition
- Damping is Not necessary for \(\nu_{sgs}\)ย in the near-wall region
References
Final expression of the SGS eddy viscosity is relatively simple and the implementation into OpenFOAM is not so complicated but the process of deriving the expression described in [1] is not easy to understand. I want to develop my SGS model someday ๐
Hi, fumiya. I am not good at symbolic expression operations, could you tell me how to calculate (S^d_ij)(S^d_ij) or (S_ij)(S_ij) ? Besides, in Eq. (2) (โu_k/โx_i)(โu_j/โx_k) should be a Einstein summation convention, but how to understand (โu_k/โx_l)(โu_l/โx_k) cuz both the subscripts k and l appear in pairs?
Thanks.
Hi Ash,
Thanks for your question!
The value of \(S_{ij}S_{ij}\) is the sum of the 9 products of the tensor components, so the result is scalar value.
You might want to have a quick look at the double inner product of two second rank tensors.
Hope this helps.
Hi, I’ve got a question about the implementation into OpenFOAM. I’m currently working with the model and have been going through Nicoud and Ducros’s 1999 FTC paper, where the model for the SGS eddy viscosity is meant to include the effects of the locally filtered strain and rotation rates. Here though, only the locally filtered strain rates are included in the expressions. Is there a reason why the rotation rates are omitted from the implementation, or have I missed something.
Thanks.
Hi,
Thank you for your pointed question!
If we substitute the expression \(\frac{\partial \overline{u}_i}{\partial x_j} = \overline{S}_{ij} + \overline{\Omega}_{ij} \) into Eq. (2),
we can find the rate of rotation tensor \(\overline{\Omega}_{ij}\) is included in Eq. (2).
I will update the page tomorrow.