- **OpenFOAM**
(*https://www.cfd-online.com/Forums/openfoam/*)

- - **Why Menter's SST model low-Re issue has not been seriously investigated?**
(*https://www.cfd-online.com/Forums/openfoam/97520-why-menters-sst-model-low-re-issue-has-not-been-seriously-investigated.html*)

Why Menter's SST model low-Re issue has not been seriously investigated?Hi all,
as I'm seemingly not the only one still having trouble with Menter's model run in low-Re mode, I think it can be a good idea to restart a tread about this matter. A good starting point can be the following tread: http://www.cfd-online.com/Forums/ope...tion-mesh.html To resume all the facts, after a major fix in nut's definition inside the model, its OpenFOAM implementation has started to give in many cases serious stability and convergence issues when an attempt is made to solve flows with y+<1. The problem has been stressed as a bug on the official OpenCFD bug tracker, but It was very soon closed with the following (to me totally disappointing) explanations: http://www.openfoam.com/mantisbt/view.php?id=179#c351 quote from henry: Note that the k-omega SST model we provide is in high-Re form and does not include the wall-damping terms often included in the k-omega model for near-wall and low-Re flow. However, you can still use the k-omega SST model for low-Re and near wall flow for a range of resolutions if you use a continuous wall-function (which in OpenFOAM-1.7.x is named nutSpalartAllmarasWallFunction for historical reasons) and this should be used as the wall BC in nut. The BC of k for the continuous wall-function should be kqRWallFunction. If these changes do not help it may be worth investigating the viscosity averaging in omegaWallFunctionFvPatchScalarField: scalar omegaVis = 6.0*nuw[faceI]/(beta1_*sqr(y[faceI])); scalar omegaLog = sqrt(k[faceCellI])/(Cmu25*kappa_*y[faceI]); omega[faceCellI] = sqrt(sqr(omegaVis) + sqr(omegaLog)); we have found cases for which this causes a sudden change in the viscosity near the wall if the mesh is sufficiently fine and that just using the logarithmic part give more continuous behavior: omega[faceCellI] = omegaLog; Here there are my questions: 1) what does it mean "wall-damping terms often included in the k-omega model"? Any k-omega model, starting from Wilcox's original one, should be appliable up to the wall WITHOUT any additional damping terms (and, indeed, if you try to use OpenFOAM's k-omega standard model with low-Re meshes, provided you assign a sufficiently high fixed value for omega at the wall, you get reasonable results!) 2) the official suggestions for "resolve" the problem can be resumed as: I) use kqrWallFunction for k; II) use nutSpalartAllmarasWallFunction (or it's equivalent in newer releases) for nut; III) use the logarithmic (?????) near-wall omega value. Well, probably it's me, but does this mean that the official suggestions are "forget to recover the original k-omega near wall behavior if you want some convergence"? Because: I) to use kqrWallFunction for k means not to resolve k with the proper wall value (strictly k=0, numerically k=extremely low value); II) to assign nutSpalartAllmarasWallFunction means to calculate the u_tau (friction velocity) with Spalding's law of the wall, which is strictly valid only in equilibrium zero-pressure gradient boundary layers (thus ignoring k-omega's sensitivity to pressure gradients); III) to assign the logarithmic omega value in an y+= 1 (or less) node means to heavily underestimate the real value in this region of the boundary layer. 3) why haven't been made (or been officially commented by the developers) some comparisons with Menter's original implmentation (which, for instance, uses the vorticity magnitude instead of the rate of strain invariant in the nut limiter definition) or any other serious investigation on this matter? 4) why after this discussion has been made on the 1.7.x release we are at the 2.1.0 one and still no modification has been introduced in SST's model implementation? Any comments, especially from some of the code's developers, will be really appreciated. Best regards V. |

Ok, I've done my own tests and this is what I've found:
-test case: external aerodynamics, incompressible, steady-state (simpleFoam solver) -mesh: about 7 milions of elements, with prismatic layers near the solid surfaces and tetras elsewhere -schemes: limited 0.5 on laplacian, Gamma(V) or linearUpwind(V) on the convection terms Well, the good news are that the SST model CAN actually be employed to resolve boundary layers with y+<1 (as it is supposed to), both with the omegaWallFunction BC as well as with directly imposing Menter's BC for the viscous sublayer. The only real problem is that it seems to be very sensitive to the mesh quality and to the initial conditions, so in steady-state solution approaches it tends to easily diverge in the very early stage of the iteration procedure. My remedy to this was simply to use as initial pressure and velocity conditions the converged fields from a simulation with another turbulence model (but probably initializing the p and U fields with potentialFoam would also have been beneficial, maybe lowering a bit the URF values for p, k and omega). Hope this will help other SST model users V. |

Hi V
Could you put your fvSchemes, fvSolution, k, omega and nut files used for both cases? Which case did you run? Best Felipe |

1 Attachment(s)
The case is a quite standard bluff-body benchmark (the Ahmed model). You can find the fvSchemes and fvSolution which worked fine for me in the attachements. About the BC's and initial conditions, it depends of the case but as I stated before for non-trivial geometries (and especially with unstructured grids) I suggest you to start from reasonable velocity and pressure fields (hopefully obtained with other turbulence models, for instance the Spalart-Allmaras one). Concerning k, omega and nut, the wall BC's are as follows:
Using wall functions for omega: k type fixedValue; value uniform 0.000000000001; (or some other very small value) omega type omegaWallFunction; value uniform (usually the same as the initial internalField value, but it should have no influence at all as it is only an initialization value); nut type calculated; value uniform 0; Not using wall functions for omega (k and nut same as above): omega type fixedValue; value uniform (calculated with Menter's recommended wall BC, i. e. omegawall=60*nu/(beta*y^2), with nu=kinematic viscosity at the wall, beta=0.075 and y=normal distance between the first fluid node and the nearest wall); Hope this can help you for your calculations V. |

Hi V.
thanks for your answer. I will give it a check with a simulation with a blunt airfoil to see if my results improve or not. Do you think you could upload a mesh or put it in dropbox? What about the convergence of k and omega? How many iterations do you run in order to get converged results? Best Felipe |

Quote:
Good luck for your case V. |

V would you mind taking a look at my mesh? Thing is I am no sure about the quality but it gives good results with other CFD code, if it is fine with you send me a private message and I will send it too you.
Best Felipe |

adding the damping functions to kOmegaSSThi V,
Thanks for starting this thread. Quote:
I am replying to your thread because i thought you might find this interesting, and I thought it might be beneficial to collaborate to some degree if you were still interested. Anyway, i have found a some of the literature i think is needed, and it doesnt look too difficult. Anyway, let me know if you are interested, best regards Jonathan EDIT: PS - i dont have time right now but i will answer some of your questions above later when i have more time ... Jon |

Quote:
at the moment I don't have time for doing some testing/research work on the SST model, but I'll be happy to share ideas and/or opinions inside this tread. I'll wait for your answers to my original questions, but before that let me add some more details: since my last post, I have discovered and, to some small extent, tested the low-Re version of the Wilcox k-omega model, which has some viscous damping functions implemented in order to recover some kind of transitional behaviour in boundary layers. I don't know if these are the functions you were talking about, but, in general, I have found very little benefits in considering them: the transitional behaviour is indeed recovered, but it happens generally too early and it is highly dependent on inlet/freestream conditions (those findings are more or less confirmed in the original Wilcox reference about this low-Re implementation). Regards V. |

Quote:
The "high-Re" terminology used for the standard k-omega and SST k-omega implementations in OF refers (quite ambiguously, and this is exactly my main concern and the reason why I've started the tread) to the fact that without any further modification, these models can only recover a fully turbulent boundary layer flow, without any transition-like behaviour (which should be of practical interest in a GLOBALLY low-Re flow configuration, where the laminar and transitional portions of boundary layers are not negligible). The only ways to obtain this behaviour are: 1) to play heavily with the inlet BCs, but it is a purely numerical "trick", there is no way to control the expected result and it doesn't work every time...;2) to add some functions or sub-models to the baseline formulation: this is what I'm talking about mentioning the damping functions added by Wilcox to the standard k-omega form (see the original reference here: http://shaqfehpc06.stanford.edu/data...ilcox_1994.pdf) I hope that this clarifies also some of your next points. Quote:
Quote:
Quote:
Regards V. |

hihi Vesselin
Quote:
Quote:
Quote:
4) So basically then, the additions i was thinking of adding to the OF implementation for kOmegaSST, were the following: and the various other amendments to the co-efficients which are now Re-independent in the OF kOmegaSST model at the moment. In the fluent documentation, these modifications are referred to as low Re Number corrections, which in the spirit of the rest of the documentation, seems to refer to whether the laminar sublayer is resolved directly, or whether wall functions are used. Thanks for the link to the 94 paper - i need to read that tonight. All your comments / advice much appreciated, esp whether you think there is any value in modifying the model as per above. best jonathan |

Quote:
Quote:
Regards V. |

Hello Vesselin,
i've found this thread today and think: oh my Goodness I have opened some threads, but unfortunately nobody answer my Questions:(. Perhaps I'm to new in this Forum???I don't know...And that is why I want to ask you, because you are in trouble with the same issue like me (only with another solver). I'm in Trouble with the rhoSimpleFoam solver for the last four months using the k-omega-SST Model. Can you say me perhaps: how this solver works better? For very turbulent Cases my Models don't converge and sometimes there are results that aren't understandable, with a too great or to small pressure Gradient between 2 slices. I tried many things to solve the Problem. For example I run lowRe Cases with ca. 5-6 Layer in the viscous sublayer or i run Cases with all wallFunction in alphat, mut, k and omega are on. Can it be that i've problems with my BC's, because for some Cases the Results are good with the same Mesh and sometimes they are bad. Can it be that I've to adept my omegaWallFunctionFvPatchScalarField how you described above or not? However i Think there are many thinks to do to run Cases with this turbulence model correctly...Is it right? What are my other capabilities for this because i really despairs about this issue and think perhaps i've to use the k-epsilon model, but i don't have any ideas, how the boundary conditions for such cases work. I hope you understand my bad Englisch...Sorry about this issue... Thx |

Hi V,
Ok, I have done all the homework on this and thought perhaps i should jot them down for anyone else wanting to know this stuff :) 1) Regarding the implicit "low Re" nature of the k-omega models + variants - yes, you are spot on. I knew they were able to be integrated to the wall w/out any modifications, but thought that damping functions were needed for the production terms etc and to extract the proper / full low Re behaviour. So - as you said, they are not and seems they were added specifically by Wilcox for trying to model laminar-to-turbulent BL transition (Wilcox 1994), so even the Fluent terminology is misleading on this. One point of interest thought, Menter 1994 says "one criticism of the k-omega model [is that it] ... does not correctly predict the asymptotic behaviour of the turbulence as it approaches the wall. However ... even if the turbulence model is not asymptotically consistent, the mean flow profile and the wall skin friction are still predicted correctly. A second point [is that] ... the k-omega model does not accurately represent the k and epsilon distribution in agreement with DNS data ... In cases where the agreement with DNS data is considered important, the damping functions developed by Wilcox can be applied to the present [k-omega SST] model." Menter, F 1994 "Two-equation eddy-viscosity turbulence models for engineering applications", AIAA Journal, 32(8) 1994.However, as per Menter's comments, I think this is a relatively 'minor' detail unless you are actually wanting the turbulence profiles exactly from your simulation. 2) Correct BC's - As you say, the correct BC's for the k-omega model are: i)k=0 or some small value ii)omega=omegaWallFunction or Menter's omega BC iii)nut=calculated 3) Regarding adding the damping functions - I am still deciding whether this will be worthwhile, but I’ll put the model up if i do. I think it might be a nice addition to have anyway ... :) Again, thanks for the discussion, best regards jonathan PS) Finally, I was just wondering whether you could explain what you think EXACTLY Henry was trying to do but suggesting the use of nutUSpaldingWallFunction for nut in the 'fix' for kOmegaSST. The nut values are calculated from the value of the turbulence properties - what exactly would using nutUSpaldingWallFunction do - override the way in which nut was calculated at the walls? or something else. I am a little lost as to exactly the point of specifying nut (for any of the t-models i guess), apart from an initial guess for the first solver iteration. |

Hello to all,
do I need the nut Files for correct solving the rhoSimpleFoam Cases? I thought this is only necessary for incompressible Cases!? So and now I'm really confused about this topic... If I use the k-omega SST model, i've to use it with wallFunctions for k and omega with the initial conditios for k on the wall very small and for omega a reasonable high value on the wall. How can I solve k-Omega standard models and what are the right label for this in RASProperties? I hope it works with lowRe Cases, or works it not? Thx to all and to Vesselin, who open this thread... Best Regards Marcus |

What i also want to say, that i've Cases where my solution converged and there are halfway good results in my simulation, without this adaptations on the omegaWallFunctionFvPatchScalarField, but i don't have any idea what is the reason for convergence.
I want also to say that i run cases with and without all wallFunctions for alphat, mut, k and omega...But i will also adept this file and will run other Cases. Best Regards |

1 Attachment(s)
Hi everyone!
Really interesting topic! I am currently implementing an hybrid RANS / LES model into OpenFOAM, that would be based on the SST model. I checked the implementation, and it seemed to match perfectly the version revised by Menter in 2003. I had a look at the wall functions too. It seems to be implemented as suggested in the papers, from what I saw (I might have overlooked something still!). There was one part that was pretty confusing though. When estimating the specific dissipation rate, the friction velocity is simply obtained from the square root of the turbulent kinetic energy...Is that how one is supposed to do? Regarding your boundary conditions for omega and nut, I agree. However, shouldn't the appropriate BC for the turbulent kinetic energy be a zero gradient? (see "The SST Turbulence Model with Improved Wall Treatment for Heat Transfer predictions in Gas Turbines" [Menter - IGTC 2003]). In the kqRWallFunction.H file, you can also see that the BC is directly derived from the zeroGradient boundary condition. I wanted to check the impact of theses different BC on the results, so I ran a few simulations on a turbulent channel flow at Retau = 395. The mesh is pretty fine (y+ ~0.5) with a cell to cell ratio of 1.05. The results are compared to the DNS data of Kim & al. (1987). No matter the approach, the results are surprisingly bad actually! Is the turbulent channel flow supposed to be challenging for RANS models?? Maybe I simply missed something... Have a great day! Joachim |

hi Joachim,
I haven't used or spent much time looking at wall function approaches, as most of my CFD doesn't fit the equilibrium / zero pressure gradient assumption - so i can't really comment on the calculation of the friction velocity - but if i get time and you put up the details to the code, i will have a look and cross reference with the papers i have. However, i am very certain that when using the low reynolds approach, you should use k=0 or numerical zero at the wall. zeroGradient (kqRWallFunction) is not correct for k when resolving the laminar sublayer. Regarding your results, i cant see the bulk of the results - are they 'hidden' by the DNS data plot? If so, the results actually would be good. The worst result seems clearly to be the final (yellow i think) plot, which corresponds to k=zeroGradient at the wall, which would make sense to me. Having done a ton of research on this, i am pretty confident for low Re k-omega type models, the correct BC's are: k=1e-12 omega=Menter / omegaWallFunction nut=calculated thanks for the post, found it v. interesting as well. cheers jonathan Quote:
not on the graphic, would you mind adding them - i think it would be very useful for other users to look at as a reference! cheers Jon |

1 Attachment(s)
Quote:
I actually don't know why your results are so bad, a simple channel should not be any challenge for well tuned RANS models (it is usually one of the standard simplified cases used to drive and develop such models: if a RANS model fails even the zero-pressure-gradient turbulent channel, then there is very little hope it will become a useful model...). Attached you can find my findings on a similar case, though obtained with a relatively old OpenFOAM version (1.7.1, but I'm pretty sure no significant changes have been done on the SST implementation since then): SST results are compared with a Retau=590 DNS database (Moser et al, 1999), BC's for the OpenFOAM run are omega=omegaWallFunction, nut=calculated and k=very low value (1e-12). As you can see, agreement is quite good, just as expected fur such kind of model. About the k BC, I must admit I haven't read Menter's 2003 paper, but to my knowledge the correct value at the wall for a truly low-Re mesh computation should be zero (numerically speaking, a very small value), though it appears that in some cases the zeroGradient condition should do the job too. About the omegaWallFunction implementation, it is all standard theory stuff: in a few words, there is a blending (geometric mean) between an energy equilibrium driven expression (the one containing turbulent quantities, which is strictly valid only in the logarithmic part of equilibrium-type turbulent boundary layers) and the viscous sub-layer expression for omega, derived firstly by Wilcox in his standard k-omega model an then extended by Menter for the SST. Hope this helps Regards V. |

All times are GMT -4. The time now is 04:55. |