View Issue Details

IDProjectCategoryView StatusLast Update
0001930OpenFOAMBugpublic2015-11-29 21:29
Reporterwyldckat Assigned Tohenry  
PrioritylowSeveritytextReproducibilityN/A
Status resolvedResolutionfixed 
Product Versiondev 
Summary0001930: Default parameters in nutWallFunction are undocumented, update attached
DescriptionThis week at work, my colleague Pedro Freitas and I did some investigating into the values for "kappa" and "E" that is used by default in "nutWallFunctionFvPatchScalarField.C", because we were using another pair of values of "kappa=0.41" and "E=8.432" for smooth wall analytical expressions, which many people defend are better values based on experimental data.

After some archaeological investigation into the OpenFOAM-history repository, I found that the latest values were introduced in this commit: https://github.com/OpenCFD/OpenFOAM-history/commit/704b3304dc86c7955d6e791ee223254186788c9a - which has the commit comment: «selecting common kappa=0.41 and E=9.8 (ref. Verst+Malal)»

Attached is the file "nutWallFunctionFvPatchScalarField.H" for OpenFOAM-dev (might be also usable in 3.0.x?) that has the updated description that includes this information:

    \heading Patch usage

    \table
        Property | Description | Required | Default value
        Cmu | Cmu coefficient | no | 0.09
        kappa | Von Karman constant | no | 0.41
        E | E coefficient | no | 9.8
    \endtable

    Examples of the boundary condition specification:
    \verbatim
    myPatch
    {
        type nutWallFunction;
        value uniform 0.0;
    }

    Reference for the default model coefficients:
    \verbatim
        H. Versteeg, W. Malalasekera
        An Introduction to Computational Fluid Dynamics: The Finite Volume
        Method, subsection "3.5.2 k-epsilon model"
    \endverbatim
Additional InformationFor complementing information on this topic, regarding what values should be used for kappa and E, lead us to the paper "Estimating the value of von Kármán’s constant in turbulent pipe flow", by S. C. C. Bailey, M. Vallikivi, M. Hultmark and A. J. Smits - doi:10.1017/jfm.2014.208 - http://fluids.princeton.edu/pubs/Bailey_et_al_2014.pdf

There we can find out right on the introduction the large variety of kappa and E pairs that can be used in several situations. In addition, in Figure 5 is shown how much these values can vary depending on a series of flow scenarios, therefore... the pseudo-magical numbers used by OpenFOAM in "nutWallFunction" are the ones from the aforementioned book and that settles the issue :)
TagsNo tags attached.

Activities

wyldckat

2015-11-29 20:19

updater  

nutWallFunctionFvPatchScalarField.H (5,437 bytes)   
/*---------------------------------------------------------------------------*\
  =========                 |
  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
   \\    /   O peration     |
    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
     \\/     M anipulation  |
-------------------------------------------------------------------------------
License
    This file is part of OpenFOAM.

    OpenFOAM is free software: you can redistribute it and/or modify it
    under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    for more details.

    You should have received a copy of the GNU General Public License
    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.

Class
    Foam::nutWallFunctionFvPatchScalarField

Group
    grpWallFunctions

Description
    This boundary condition provides a turbulent kinematic viscosity condition
    when using wall functions, based on turbulence kinetic energy.
    - replicates OpenFOAM v1.5 (and earlier) behaviour

    \heading Patch usage

    \table
        Property  | Description         | Required   | Default value
        Cmu       | Cmu coefficient     | no         | 0.09
        kappa     | Von Karman constant | no         | 0.41
        E         | E coefficient       | no         | 9.8
    \endtable

    Examples of the boundary condition specification:
    \verbatim
    myPatch
    {
        type            nutWallFunction;
        value           uniform 0.0;
    }

    Reference for the default model coefficients:
    \verbatim
        H. Versteeg, W. Malalasekera
        An Introduction to Computational Fluid Dynamics: The Finite Volume
        Method, subsection "3.5.2 k-epsilon model"
    \endverbatim

SeeAlso
    Foam::fixedValueFvPatchField

SourceFiles
    nutWallFunctionFvPatchScalarField.C

\*---------------------------------------------------------------------------*/

#ifndef nutWallFunctionFvPatchScalarField_H
#define nutWallFunctionFvPatchScalarField_H

#include "fixedValueFvPatchFields.H"

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

namespace Foam
{

/*---------------------------------------------------------------------------*\
             Class nutWallFunctionFvPatchScalarField Declaration
\*---------------------------------------------------------------------------*/

class nutWallFunctionFvPatchScalarField
:
    public fixedValueFvPatchScalarField
{
protected:

    // Protected data

        //- Cmu coefficient
        scalar Cmu_;

        //- Von Karman constant
        scalar kappa_;

        //- E coefficient
        scalar E_;

        //- Y+ at the edge of the laminar sublayer
        scalar yPlusLam_;


    // Protected Member Functions

        //- Check the type of the patch
        virtual void checkType();

        //- Calculate the turbulence viscosity
        virtual tmp<scalarField> calcNut() const = 0;

        //- Write local wall function variables
        virtual void writeLocalEntries(Ostream&) const;


public:

    //- Runtime type information
    TypeName("nutWallFunction");


    // Constructors

        //- Construct from patch and internal field
        nutWallFunctionFvPatchScalarField
        (
            const fvPatch&,
            const DimensionedField<scalar, volMesh>&
        );

        //- Construct from patch, internal field and dictionary
        nutWallFunctionFvPatchScalarField
        (
            const fvPatch&,
            const DimensionedField<scalar, volMesh>&,
            const dictionary&
        );

        //- Construct by mapping given
        //  nutWallFunctionFvPatchScalarField
        //  onto a new patch
        nutWallFunctionFvPatchScalarField
        (
            const nutWallFunctionFvPatchScalarField&,
            const fvPatch&,
            const DimensionedField<scalar, volMesh>&,
            const fvPatchFieldMapper&
        );

        //- Construct as copy
        nutWallFunctionFvPatchScalarField
        (
            const nutWallFunctionFvPatchScalarField&
        );

        //- Construct as copy setting internal field reference
        nutWallFunctionFvPatchScalarField
        (
            const nutWallFunctionFvPatchScalarField&,
            const DimensionedField<scalar, volMesh>&
        );


    // Member functions

        //- Calculate the Y+ at the edge of the laminar sublayer
        static scalar yPlusLam(const scalar kappa, const scalar E);

        //- Calculate and return the yPlus at the boundary
        virtual tmp<scalarField> yPlus() const = 0;


        // Evaluation functions

            //- Update the coefficients associated with the patch field
            virtual void updateCoeffs();


        // I-O

            //- Write
            virtual void write(Ostream&) const;
};


// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

} // End namespace Foam

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

#endif

// ************************************************************************* //

wyldckat

2015-11-29 20:22

updater   ~0005686

Ooops... I lost a "\endverbatim" when adding the book reference :(

wyldckat

2015-11-29 20:22

updater  

nutWallFunctionFvPatchScalarField_v2.H (5,454 bytes)   
/*---------------------------------------------------------------------------*\
  =========                 |
  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
   \\    /   O peration     |
    \\  /    A nd           | Copyright (C) 2011-2015 OpenFOAM Foundation
     \\/     M anipulation  |
-------------------------------------------------------------------------------
License
    This file is part of OpenFOAM.

    OpenFOAM is free software: you can redistribute it and/or modify it
    under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    for more details.

    You should have received a copy of the GNU General Public License
    along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.

Class
    Foam::nutWallFunctionFvPatchScalarField

Group
    grpWallFunctions

Description
    This boundary condition provides a turbulent kinematic viscosity condition
    when using wall functions, based on turbulence kinetic energy.
    - replicates OpenFOAM v1.5 (and earlier) behaviour

    \heading Patch usage

    \table
        Property  | Description         | Required   | Default value
        Cmu       | Cmu coefficient     | no         | 0.09
        kappa     | Von Karman constant | no         | 0.41
        E         | E coefficient       | no         | 9.8
    \endtable

    Examples of the boundary condition specification:
    \verbatim
    myPatch
    {
        type            nutWallFunction;
        value           uniform 0.0;
    }
    \endverbatim

    Reference for the default model coefficients:
    \verbatim
        H. Versteeg, W. Malalasekera
        An Introduction to Computational Fluid Dynamics: The Finite Volume
        Method, subsection "3.5.2 k-epsilon model"
    \endverbatim

SeeAlso
    Foam::fixedValueFvPatchField

SourceFiles
    nutWallFunctionFvPatchScalarField.C

\*---------------------------------------------------------------------------*/

#ifndef nutWallFunctionFvPatchScalarField_H
#define nutWallFunctionFvPatchScalarField_H

#include "fixedValueFvPatchFields.H"

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

namespace Foam
{

/*---------------------------------------------------------------------------*\
             Class nutWallFunctionFvPatchScalarField Declaration
\*---------------------------------------------------------------------------*/

class nutWallFunctionFvPatchScalarField
:
    public fixedValueFvPatchScalarField
{
protected:

    // Protected data

        //- Cmu coefficient
        scalar Cmu_;

        //- Von Karman constant
        scalar kappa_;

        //- E coefficient
        scalar E_;

        //- Y+ at the edge of the laminar sublayer
        scalar yPlusLam_;


    // Protected Member Functions

        //- Check the type of the patch
        virtual void checkType();

        //- Calculate the turbulence viscosity
        virtual tmp<scalarField> calcNut() const = 0;

        //- Write local wall function variables
        virtual void writeLocalEntries(Ostream&) const;


public:

    //- Runtime type information
    TypeName("nutWallFunction");


    // Constructors

        //- Construct from patch and internal field
        nutWallFunctionFvPatchScalarField
        (
            const fvPatch&,
            const DimensionedField<scalar, volMesh>&
        );

        //- Construct from patch, internal field and dictionary
        nutWallFunctionFvPatchScalarField
        (
            const fvPatch&,
            const DimensionedField<scalar, volMesh>&,
            const dictionary&
        );

        //- Construct by mapping given
        //  nutWallFunctionFvPatchScalarField
        //  onto a new patch
        nutWallFunctionFvPatchScalarField
        (
            const nutWallFunctionFvPatchScalarField&,
            const fvPatch&,
            const DimensionedField<scalar, volMesh>&,
            const fvPatchFieldMapper&
        );

        //- Construct as copy
        nutWallFunctionFvPatchScalarField
        (
            const nutWallFunctionFvPatchScalarField&
        );

        //- Construct as copy setting internal field reference
        nutWallFunctionFvPatchScalarField
        (
            const nutWallFunctionFvPatchScalarField&,
            const DimensionedField<scalar, volMesh>&
        );


    // Member functions

        //- Calculate the Y+ at the edge of the laminar sublayer
        static scalar yPlusLam(const scalar kappa, const scalar E);

        //- Calculate and return the yPlus at the boundary
        virtual tmp<scalarField> yPlus() const = 0;


        // Evaluation functions

            //- Update the coefficients associated with the patch field
            virtual void updateCoeffs();


        // I-O

            //- Write
            virtual void write(Ostream&) const;
};


// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

} // End namespace Foam

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

#endif

// ************************************************************************* //

wyldckat

2015-11-29 20:23

updater   ~0005687

Attached the rectified file "nutWallFunctionFvPatchScalarField_v2.H", for replacing "src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutWallFunction/nutWallFunctionFvPatchScalarField.H"

henry

2015-11-29 21:29

manager   ~0005689

Resolved in OpenFOAM-dev by commit 69f0a5e316ee9f222be974f4c459d09e77487c5a
Resolved in OpenFOAM-3.0.x by commit 82270c6e4cbce65a3cb04d6043a367bd71811813

Issue History

Date Modified Username Field Change
2015-11-29 20:19 wyldckat New Issue
2015-11-29 20:19 wyldckat Status new => assigned
2015-11-29 20:19 wyldckat Assigned To => henry
2015-11-29 20:19 wyldckat File Added: nutWallFunctionFvPatchScalarField.H
2015-11-29 20:22 wyldckat Note Added: 0005686
2015-11-29 20:22 wyldckat File Added: nutWallFunctionFvPatchScalarField_v2.H
2015-11-29 20:23 wyldckat Note Added: 0005687
2015-11-29 21:29 henry Note Added: 0005689
2015-11-29 21:29 henry Status assigned => resolved
2015-11-29 21:29 henry Resolution open => fixed