Skip to content

GitLab

  • Menu
Projects Groups Snippets
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
  • openfoam openfoam
  • Project information
    • Project information
    • Activity
    • Labels
    • Planning hierarchy
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 380
    • Issues 380
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 11
    • Merge requests 11
  • Deployments
    • Deployments
    • Releases
  • Wiki
    • Wiki
  • Activity
  • Graph
  • Create a new issue
  • Commits
  • Issue Boards
Collapse sidebar
  • Development
  • openfoamopenfoam
  • Issues
  • #1471

Closed
Open
Created Oct 30, 2019 by Kutalmis Bercin@kutiMaintainer

Potentially redundant set of computations for G object within eddy-viscosity turbulence models

Some of the eddy-viscosity-based turbulence models compute G (the turbulent kinetic energy production rate due to the anisotropic part of the stress tensor). For example, in kEpsilon:

    volScalarField::Internal G
    (
        this->GName(),
        nut.v()*(dev(twoSymm(tgradU().v())) && tgradU().v())
    );
    tgradU.clear();

Here, we compute a deviatoric-symmetric tensor ((dev(twoSymm(tgradU().v()))) with a full tensor tgradU().v().

Any tensor can be divided into its symmetric and anti-symmetric parts. And any double-inner product of a symmetric tensor and an anti-symmetric tensor is zero.

Therefore, the above double-inner product can be reduced between two symmetric tensors without losing any level of accuracy in the final outcome.

Such reduction seems to be carried out in the more recently implemented turbulence models, e.g. v2f.

The simpler, cheaper-to-run alternative can be:

    tmp<volTensorField> tgradU = fvc::grad(U);
    const volScalarField::Internal G
    (
        this->GName(),
        nut.v()*2*magSqr(dev(symm(tgradU.cref().v())))
    );
    tgradU.clear();

PS: Asked the question in CFD-Online: here.

Edited Nov 05, 2021 by Kutalmis Bercin
Assignee
Assign to
Time tracking