mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
Merge commit 'OpenCFD/master' into olesenm
This commit is contained in:
@ -1,7 +1,7 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: 1.5.x |
|
||||
| \\ / O peration | Version: 1.6 |
|
||||
| \\ / A nd | Web: www.OpenFOAM.org |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: 1.5 |
|
||||
| \\ / O peration | Version: 1.6 |
|
||||
| \\ / A nd | Web: http://www.OpenFOAM.org |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: 1.5 |
|
||||
| \\ / O peration | Version: 1.6 |
|
||||
| \\ / A nd | Web: http://www.OpenFOAM.org |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: 1.5 |
|
||||
| \\ / O peration | Version: 1.6 |
|
||||
| \\ / A nd | Web: http://www.OpenFOAM.org |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
@ -29,6 +29,7 @@ License
|
||||
#include "perfectGas.H"
|
||||
|
||||
#include "eConstThermo.H"
|
||||
#include "hConstThermo.H"
|
||||
#include "janafThermo.H"
|
||||
#include "specieThermo.H"
|
||||
|
||||
@ -63,6 +64,24 @@ makeBasicPsiThermo
|
||||
perfectGas
|
||||
);
|
||||
|
||||
makeBasicPsiThermo
|
||||
(
|
||||
ePsiThermo,
|
||||
pureMixture,
|
||||
constTransport,
|
||||
hConstThermo,
|
||||
perfectGas
|
||||
);
|
||||
|
||||
makeBasicPsiThermo
|
||||
(
|
||||
ePsiThermo,
|
||||
pureMixture,
|
||||
sutherlandTransport,
|
||||
hConstThermo,
|
||||
perfectGas
|
||||
);
|
||||
|
||||
makeBasicPsiThermo
|
||||
(
|
||||
ePsiThermo,
|
||||
|
||||
@ -26,7 +26,8 @@ Class
|
||||
Foam::MarshakRadiationFvPatchScalarField
|
||||
|
||||
Description
|
||||
Radiation temperature taken from calculated temperaure
|
||||
Marshak boundary for radiation G field
|
||||
- radiation temperature taken from patch value
|
||||
|
||||
SourceFiles
|
||||
MarshakRadiationFvPatchScalarField.C
|
||||
|
||||
@ -26,7 +26,8 @@ Class
|
||||
Foam::MarshakRadiationFixedTMixedFvPatchScalarField
|
||||
|
||||
Description
|
||||
Radiation temperature specified
|
||||
Marshak boundary for radiation G field
|
||||
- radiation temperature specified
|
||||
|
||||
SourceFiles
|
||||
MarshakRadiationFixedTMixedFvPatchScalarField.C
|
||||
|
||||
@ -27,7 +27,7 @@ Class
|
||||
|
||||
Description
|
||||
|
||||
Finite Volume Discrete Ordinary Method. Solves the RTE equation for n
|
||||
Finite Volume Discrete Ordinates Method. Solves the RTE equation for n
|
||||
directions in a participating media, not including scatter.
|
||||
|
||||
Available absorption models:
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -36,8 +36,8 @@ SourceFiles
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef alphatWallFunctionFvPatchScalarField_H
|
||||
#define alphatWallFunctionFvPatchScalarField_H
|
||||
#ifndef compressibleAlphatWallFunctionFvPatchScalarField_H
|
||||
#define compressibleAlphatWallFunctionFvPatchScalarField_H
|
||||
|
||||
#include "fixedValueFvPatchFields.H"
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -35,8 +35,8 @@ SourceFiles
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef epsilonWallFunctionFvPatchScalarField_H
|
||||
#define epsilonWallFunctionFvPatchScalarField_H
|
||||
#ifndef compressibleEpsilonWallFunctionFvPatchScalarField_H
|
||||
#define compressibleEpsilonWallFunctionFvPatchScalarField_H
|
||||
|
||||
#include "fixedInternalValueFvPatchField.H"
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -34,8 +34,8 @@ SourceFiles
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef kqRWallFunctionFvPatchField_H
|
||||
#define kqRWallFunctionFvPatchField_H
|
||||
#ifndef compressiblekqRWallFunctionFvPatchField_H
|
||||
#define compressiblekqRWallFunctionFvPatchField_H
|
||||
|
||||
#include "zeroGradientFvPatchField.H"
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -40,7 +40,7 @@ namespace RASModels
|
||||
{
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||
// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
|
||||
|
||||
scalar mutRoughWallFunctionFvPatchScalarField::fnRough
|
||||
(
|
||||
@ -65,6 +65,60 @@ scalar mutRoughWallFunctionFvPatchScalarField::fnRough
|
||||
}
|
||||
|
||||
|
||||
tmp<scalarField> mutRoughWallFunctionFvPatchScalarField::calcMut() const
|
||||
{
|
||||
const label patchI = patch().index();
|
||||
|
||||
const RASModel& rasModel = db().lookupObject<RASModel>("RASProperties");
|
||||
const scalarField& y = rasModel.y()[patchI];
|
||||
const scalarField& rhow = rasModel.rho().boundaryField()[patchI];
|
||||
const tmp<volScalarField> tk = rasModel.k();
|
||||
const volScalarField& k = tk();
|
||||
const scalarField& muw = rasModel.mu().boundaryField()[patchI];
|
||||
|
||||
const scalar Cmu25 = pow(Cmu_, 0.25);
|
||||
|
||||
tmp<scalarField> tmutw(new scalarField(patch().size(), 0.0));
|
||||
scalarField& mutw = tmutw();
|
||||
|
||||
forAll(mutw, faceI)
|
||||
{
|
||||
label faceCellI = patch().faceCells()[faceI];
|
||||
|
||||
scalar uStar = Cmu25*sqrt(k[faceCellI]);
|
||||
|
||||
scalar yPlus = uStar*y[faceI]/(muw[faceI]/rhow[faceI]);
|
||||
|
||||
scalar KsPlus = uStar*Ks_[faceI]/(muw[faceI]/rhow[faceI]);
|
||||
|
||||
scalar Edash = E_;
|
||||
scalar yPlusLamNew = yPlusLam_;
|
||||
if (KsPlus > 2.25)
|
||||
{
|
||||
Edash /= fnRough(KsPlus, Cs_[faceI]);
|
||||
yPlusLamNew = rasModel.yPlusLam(kappa_, Edash);
|
||||
}
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "yPlus = " << yPlus
|
||||
<< ", KsPlus = " << KsPlus
|
||||
<< ", Edash = " << Edash
|
||||
<< ", yPlusLam = " << yPlusLam_
|
||||
<< endl;
|
||||
}
|
||||
|
||||
if (yPlus > yPlusLamNew)
|
||||
{
|
||||
mutw[faceI] =
|
||||
muw[faceI]*(yPlus*kappa_/log(max(Edash*yPlus, 1+1e-4)) - 1);
|
||||
}
|
||||
}
|
||||
|
||||
return tmutw;
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
mutRoughWallFunctionFvPatchScalarField::mutRoughWallFunctionFvPatchScalarField
|
||||
@ -158,61 +212,6 @@ void mutRoughWallFunctionFvPatchScalarField::rmap
|
||||
}
|
||||
|
||||
|
||||
tmp<scalarField> mutRoughWallFunctionFvPatchScalarField::calcMut() const
|
||||
{
|
||||
const label patchI = patch().index();
|
||||
|
||||
const RASModel& rasModel = db().lookupObject<RASModel>("RASProperties");
|
||||
const scalar yPlusLam = rasModel.yPlusLam(kappa_, E_);
|
||||
const scalarField& y = rasModel.y()[patchI];
|
||||
const scalarField& rhow = rasModel.rho().boundaryField()[patchI];
|
||||
const tmp<volScalarField> tk = rasModel.k();
|
||||
const volScalarField& k = tk();
|
||||
const scalarField& muw = rasModel.mu().boundaryField()[patchI];
|
||||
|
||||
const scalar Cmu25 = pow(Cmu_, 0.25);
|
||||
|
||||
tmp<scalarField> tmutw(new scalarField(patch().size(), 0.0));
|
||||
scalarField& mutw = tmutw();
|
||||
|
||||
forAll(mutw, faceI)
|
||||
{
|
||||
label faceCellI = patch().faceCells()[faceI];
|
||||
|
||||
scalar uStar = Cmu25*sqrt(k[faceCellI]);
|
||||
|
||||
scalar yPlus = uStar*y[faceI]/(muw[faceI]/rhow[faceI]);
|
||||
|
||||
scalar KsPlus = uStar*Ks_[faceI]/(muw[faceI]/rhow[faceI]);
|
||||
|
||||
scalar Edash = E_;
|
||||
scalar yPlusLamNew = yPlusLam;
|
||||
if (KsPlus > 2.25)
|
||||
{
|
||||
Edash /= fnRough(KsPlus, Cs_[faceI]);
|
||||
yPlusLamNew = rasModel.yPlusLam(kappa_, Edash);
|
||||
}
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "yPlus = " << yPlus
|
||||
<< ", KsPlus = " << KsPlus
|
||||
<< ", Edash = " << Edash
|
||||
<< ", yPlusLam = " << yPlusLam
|
||||
<< endl;
|
||||
}
|
||||
|
||||
if (yPlus > yPlusLamNew)
|
||||
{
|
||||
mutw[faceI] =
|
||||
muw[faceI]*(yPlus*kappa_/log(max(Edash*yPlus, 1+1e-4)) - 1);
|
||||
}
|
||||
}
|
||||
|
||||
return tmutw;
|
||||
}
|
||||
|
||||
|
||||
void mutRoughWallFunctionFvPatchScalarField::write(Ostream& os) const
|
||||
{
|
||||
fvPatchField<scalar>::write(os);
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -40,8 +40,8 @@ SourceFiles
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef mutRoughWallFunctionFvPatchScalarField_H
|
||||
#define mutRoughWallFunctionFvPatchScalarField_H
|
||||
#ifndef compressibleMutRoughWallFunctionFvPatchScalarField_H
|
||||
#define compressibleMutRoughWallFunctionFvPatchScalarField_H
|
||||
|
||||
#include "mutWallFunctionFvPatchScalarField.H"
|
||||
|
||||
|
||||
@ -39,6 +39,8 @@ namespace compressible
|
||||
namespace RASModels
|
||||
{
|
||||
|
||||
// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
|
||||
|
||||
tmp<scalarField>
|
||||
mutSpalartAllmarasStandardRoughWallFunctionFvPatchScalarField::calcYPlus
|
||||
(
|
||||
@ -48,7 +50,6 @@ mutSpalartAllmarasStandardRoughWallFunctionFvPatchScalarField::calcYPlus
|
||||
const label patchI = patch().index();
|
||||
|
||||
const RASModel& rasModel = db().lookupObject<RASModel>("RASProperties");
|
||||
const scalar yPlusLam = rasModel.yPlusLam(kappa_, E_);
|
||||
const scalarField& y = rasModel.y()[patchI];
|
||||
const scalarField& muw = rasModel.mu().boundaryField()[patchI];
|
||||
const fvPatchScalarField& rho = rasModel.rho().boundaryField()[patchI];
|
||||
@ -74,7 +75,7 @@ mutSpalartAllmarasStandardRoughWallFunctionFvPatchScalarField::calcYPlus
|
||||
const scalar Re = rho[facei]*magUpara*y[facei]/muw[facei];
|
||||
const scalar kappaRe = kappa_*Re;
|
||||
|
||||
scalar yp = yPlusLam;
|
||||
scalar yp = yPlusLam_;
|
||||
const scalar ryPlusLam = 1.0/yp;
|
||||
|
||||
int iter = 0;
|
||||
@ -146,7 +147,7 @@ mutSpalartAllmarasStandardRoughWallFunctionFvPatchScalarField::calcYPlus
|
||||
const scalar Re = rho[facei]*magUpara*y[facei]/muw[facei];
|
||||
const scalar kappaRe = kappa_*Re;
|
||||
|
||||
scalar yp = yPlusLam;
|
||||
scalar yp = yPlusLam_;
|
||||
const scalar ryPlusLam = 1.0/yp;
|
||||
|
||||
int iter = 0;
|
||||
@ -171,6 +172,38 @@ mutSpalartAllmarasStandardRoughWallFunctionFvPatchScalarField::calcYPlus
|
||||
}
|
||||
|
||||
|
||||
tmp<scalarField>
|
||||
mutSpalartAllmarasStandardRoughWallFunctionFvPatchScalarField::calcMut() const
|
||||
{
|
||||
const label patchI = patch().index();
|
||||
|
||||
const RASModel& rasModel = db().lookupObject<RASModel>("RASProperties");
|
||||
const scalarField& y = rasModel.y()[patchI];
|
||||
const fvPatchVectorField& Uw = rasModel.U().boundaryField()[patchI];
|
||||
const scalarField& muw = rasModel.mu().boundaryField()[patchI];
|
||||
const fvPatchScalarField& rho = rasModel.rho().boundaryField()[patchI];
|
||||
|
||||
scalarField magUp = mag(Uw.patchInternalField() - Uw);
|
||||
|
||||
tmp<scalarField> tyPlus = calcYPlus(magUp);
|
||||
scalarField& yPlus = tyPlus();
|
||||
|
||||
tmp<scalarField> tmutw(new scalarField(patch().size(), 0.0));
|
||||
scalarField& mutw = tmutw();
|
||||
|
||||
forAll(yPlus, facei)
|
||||
{
|
||||
if (yPlus[facei] > yPlusLam_)
|
||||
{
|
||||
const scalar Re = rho[facei]*magUp[facei]*y[facei]/muw[facei];
|
||||
mutw[facei] = muw[facei]*(sqr(yPlus[facei])/Re - 1);
|
||||
}
|
||||
}
|
||||
|
||||
return tmutw;
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
mutSpalartAllmarasStandardRoughWallFunctionFvPatchScalarField::
|
||||
@ -247,39 +280,6 @@ mutSpalartAllmarasStandardRoughWallFunctionFvPatchScalarField
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
tmp<scalarField>
|
||||
mutSpalartAllmarasStandardRoughWallFunctionFvPatchScalarField::calcMut() const
|
||||
{
|
||||
const label patchI = patch().index();
|
||||
|
||||
const RASModel& rasModel = db().lookupObject<RASModel>("RASProperties");
|
||||
const scalar yPlusLam = rasModel.yPlusLam(kappa_, E_);
|
||||
const scalarField& y = rasModel.y()[patchI];
|
||||
const fvPatchVectorField& Uw = rasModel.U().boundaryField()[patchI];
|
||||
const scalarField& muw = rasModel.mu().boundaryField()[patchI];
|
||||
const fvPatchScalarField& rho = rasModel.rho().boundaryField()[patchI];
|
||||
|
||||
scalarField magUp = mag(Uw.patchInternalField() - Uw);
|
||||
|
||||
tmp<scalarField> tyPlus = calcYPlus(magUp);
|
||||
scalarField& yPlus = tyPlus();
|
||||
|
||||
tmp<scalarField> tmutw(new scalarField(patch().size(), 0.0));
|
||||
scalarField& mutw = tmutw();
|
||||
|
||||
forAll(yPlus, facei)
|
||||
{
|
||||
if (yPlus[facei] > yPlusLam)
|
||||
{
|
||||
const scalar Re = rho[facei]*magUp[facei]*y[facei]/muw[facei];
|
||||
mutw[facei] = muw[facei]*(sqr(yPlus[facei])/Re - 1);
|
||||
}
|
||||
}
|
||||
|
||||
return tmutw;
|
||||
}
|
||||
|
||||
|
||||
tmp<scalarField>
|
||||
mutSpalartAllmarasStandardRoughWallFunctionFvPatchScalarField::yPlus() const
|
||||
{
|
||||
|
||||
@ -34,8 +34,8 @@ SourceFiles
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef mutSpalartAllmarasStandardRoughWallFunctionFvPatchScalarField_H
|
||||
#define mutSpalartAllmarasStandardRoughWallFunctionFvPatchScalarField_H
|
||||
#ifndef compressibleMutSpalartAllmarasStandardRoughWallFunctionFvPatchScalarField_H
|
||||
#define compressibleMutSpalartAllmarasStandardRoughWallFunctionFvPatchScalarField_H
|
||||
|
||||
#include "mutWallFunctionFvPatchScalarField.H"
|
||||
|
||||
|
||||
@ -50,7 +50,6 @@ mutSpalartAllmarasStandardWallFunctionFvPatchScalarField::calcYPlus
|
||||
const label patchI = patch().index();
|
||||
|
||||
const RASModel& rasModel = db().lookupObject<RASModel>("RASProperties");
|
||||
const scalar yPlusLam = rasModel.yPlusLam(kappa_, E_);
|
||||
const scalarField& y = rasModel.y()[patchI];
|
||||
const fvPatchScalarField& rhow = rasModel.rho().boundaryField()[patchI];
|
||||
const fvPatchScalarField& muw = rasModel.mu().boundaryField()[patchI];
|
||||
@ -62,7 +61,7 @@ mutSpalartAllmarasStandardWallFunctionFvPatchScalarField::calcYPlus
|
||||
{
|
||||
scalar kappaRe = kappa_*magUp[faceI]*y[faceI]/(muw[faceI]/rhow[faceI]);
|
||||
|
||||
scalar yp = yPlusLam;
|
||||
scalar yp = yPlusLam_;
|
||||
scalar ryPlusLam = 1.0/yp;
|
||||
|
||||
int iter = 0;
|
||||
@ -82,6 +81,35 @@ mutSpalartAllmarasStandardWallFunctionFvPatchScalarField::calcYPlus
|
||||
}
|
||||
|
||||
|
||||
tmp<scalarField>
|
||||
mutSpalartAllmarasStandardWallFunctionFvPatchScalarField::calcMut() const
|
||||
{
|
||||
const label patchI = patch().index();
|
||||
|
||||
const RASModel& rasModel = db().lookupObject<RASModel>("RASProperties");
|
||||
const fvPatchVectorField& Uw = rasModel.U().boundaryField()[patchI];
|
||||
const scalarField magUp = mag(Uw.patchInternalField() - Uw);
|
||||
const fvPatchScalarField& muw = rasModel.mu().boundaryField()[patchI];
|
||||
|
||||
tmp<scalarField> tyPlus = calcYPlus(magUp);
|
||||
scalarField& yPlus = tyPlus();
|
||||
|
||||
tmp<scalarField> tmutw(new scalarField(patch().size(), 0.0));
|
||||
scalarField& mutw = tmutw();
|
||||
|
||||
forAll(yPlus, faceI)
|
||||
{
|
||||
if (yPlus[faceI] > yPlusLam_)
|
||||
{
|
||||
mutw[faceI] =
|
||||
muw[faceI]*(yPlus[faceI]*kappa_/log(E_*yPlus[faceI]) - 1.0);
|
||||
}
|
||||
}
|
||||
|
||||
return tmutw;
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
mutSpalartAllmarasStandardWallFunctionFvPatchScalarField::
|
||||
@ -143,36 +171,6 @@ mutSpalartAllmarasStandardWallFunctionFvPatchScalarField
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
tmp<scalarField>
|
||||
mutSpalartAllmarasStandardWallFunctionFvPatchScalarField::calcMut() const
|
||||
{
|
||||
const label patchI = patch().index();
|
||||
|
||||
const RASModel& rasModel = db().lookupObject<RASModel>("RASProperties");
|
||||
const scalar yPlusLam = rasModel.yPlusLam(kappa_, E_);
|
||||
const fvPatchVectorField& Uw = rasModel.U().boundaryField()[patchI];
|
||||
const scalarField magUp = mag(Uw.patchInternalField() - Uw);
|
||||
const fvPatchScalarField& muw = rasModel.mu().boundaryField()[patchI];
|
||||
|
||||
tmp<scalarField> tyPlus = calcYPlus(magUp);
|
||||
scalarField& yPlus = tyPlus();
|
||||
|
||||
tmp<scalarField> tmutw(new scalarField(patch().size(), 0.0));
|
||||
scalarField& mutw = tmutw();
|
||||
|
||||
forAll(yPlus, faceI)
|
||||
{
|
||||
if (yPlus[faceI] > yPlusLam)
|
||||
{
|
||||
mutw[faceI] =
|
||||
muw[faceI]*(yPlus[faceI]*kappa_/log(E_*yPlus[faceI]) - 1.0);
|
||||
}
|
||||
}
|
||||
|
||||
return tmutw;
|
||||
}
|
||||
|
||||
|
||||
tmp<scalarField>
|
||||
mutSpalartAllmarasStandardWallFunctionFvPatchScalarField::yPlus() const
|
||||
{
|
||||
|
||||
@ -34,8 +34,8 @@ SourceFiles
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef mutSpalartAllmarasStandardWallFunctionFvPatchScalarField_H
|
||||
#define mutSpalartAllmarasStandardWallFunctionFvPatchScalarField_H
|
||||
#ifndef compressibleMutSpalartAllmarasStandardWallFunctionFvPatchScalarField_H
|
||||
#define compressibleMutSpalartAllmarasStandardWallFunctionFvPatchScalarField_H
|
||||
|
||||
#include "mutWallFunctionFvPatchScalarField.H"
|
||||
|
||||
|
||||
@ -105,6 +105,21 @@ tmp<scalarField> mutSpalartAllmarasWallFunctionFvPatchScalarField::calcUTau
|
||||
}
|
||||
|
||||
|
||||
tmp<scalarField>
|
||||
mutSpalartAllmarasWallFunctionFvPatchScalarField::calcMut() const
|
||||
{
|
||||
const label patchI = patch().index();
|
||||
|
||||
const RASModel& rasModel = db().lookupObject<RASModel>("RASProperties");
|
||||
const fvPatchVectorField& Uw = rasModel.U().boundaryField()[patchI];
|
||||
const scalarField magGradU = mag(Uw.snGrad());
|
||||
const scalarField& rhow = rasModel.rho().boundaryField()[patchI];
|
||||
const scalarField& muw = rasModel.mu().boundaryField()[patchI];
|
||||
|
||||
return max(0.0, rhow*sqr(calcUTau(magGradU))/magGradU - muw);
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
mutSpalartAllmarasWallFunctionFvPatchScalarField::
|
||||
@ -166,21 +181,6 @@ mutSpalartAllmarasWallFunctionFvPatchScalarField
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
tmp<scalarField>
|
||||
mutSpalartAllmarasWallFunctionFvPatchScalarField::calcMut() const
|
||||
{
|
||||
const label patchI = patch().index();
|
||||
|
||||
const RASModel& rasModel = db().lookupObject<RASModel>("RASProperties");
|
||||
const fvPatchVectorField& Uw = rasModel.U().boundaryField()[patchI];
|
||||
const scalarField magGradU = mag(Uw.snGrad());
|
||||
const scalarField& rhow = rasModel.rho().boundaryField()[patchI];
|
||||
const scalarField& muw = rasModel.mu().boundaryField()[patchI];
|
||||
|
||||
return max(0.0, rhow*sqr(calcUTau(magGradU))/magGradU - muw);
|
||||
}
|
||||
|
||||
|
||||
tmp<scalarField>
|
||||
mutSpalartAllmarasWallFunctionFvPatchScalarField::yPlus() const
|
||||
{
|
||||
|
||||
@ -34,8 +34,8 @@ SourceFiles
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef mutSpalartAllmarasWallFunctionFvPatchScalarField_H
|
||||
#define mutSpalartAllmarasWallFunctionFvPatchScalarField_H
|
||||
#ifndef compressibleMutSpalartAllmarasWallFunctionFvPatchScalarField_H
|
||||
#define compressibleMutSpalartAllmarasWallFunctionFvPatchScalarField_H
|
||||
|
||||
#include "mutWallFunctionFvPatchScalarField.H"
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -40,7 +40,7 @@ namespace compressible
|
||||
namespace RASModels
|
||||
{
|
||||
|
||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||
// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
|
||||
|
||||
void mutWallFunctionFvPatchScalarField::checkType()
|
||||
{
|
||||
@ -56,82 +56,20 @@ void mutWallFunctionFvPatchScalarField::checkType()
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
mutWallFunctionFvPatchScalarField::mutWallFunctionFvPatchScalarField
|
||||
scalar mutWallFunctionFvPatchScalarField::calcYPlusLam
|
||||
(
|
||||
const fvPatch& p,
|
||||
const DimensionedField<scalar, volMesh>& iF
|
||||
)
|
||||
:
|
||||
fixedValueFvPatchScalarField(p, iF),
|
||||
Cmu_(0.09),
|
||||
kappa_(0.41),
|
||||
E_(9.8)
|
||||
{}
|
||||
|
||||
|
||||
mutWallFunctionFvPatchScalarField::mutWallFunctionFvPatchScalarField
|
||||
(
|
||||
const mutWallFunctionFvPatchScalarField& ptf,
|
||||
const fvPatch& p,
|
||||
const DimensionedField<scalar, volMesh>& iF,
|
||||
const fvPatchFieldMapper& mapper
|
||||
)
|
||||
:
|
||||
fixedValueFvPatchScalarField(ptf, p, iF, mapper),
|
||||
Cmu_(ptf.Cmu_),
|
||||
kappa_(ptf.kappa_),
|
||||
E_(ptf.E_)
|
||||
{}
|
||||
|
||||
|
||||
mutWallFunctionFvPatchScalarField::mutWallFunctionFvPatchScalarField
|
||||
(
|
||||
const fvPatch& p,
|
||||
const DimensionedField<scalar, volMesh>& iF,
|
||||
const dictionary& dict
|
||||
)
|
||||
:
|
||||
fixedValueFvPatchScalarField(p, iF, dict),
|
||||
Cmu_(dict.lookupOrDefault<scalar>("Cmu", 0.09)),
|
||||
kappa_(dict.lookupOrDefault<scalar>("kappa", 0.41)),
|
||||
E_(dict.lookupOrDefault<scalar>("E", 9.8))
|
||||
{}
|
||||
|
||||
|
||||
mutWallFunctionFvPatchScalarField::mutWallFunctionFvPatchScalarField
|
||||
(
|
||||
const mutWallFunctionFvPatchScalarField& wfpsf
|
||||
)
|
||||
:
|
||||
fixedValueFvPatchScalarField(wfpsf),
|
||||
Cmu_(wfpsf.Cmu_),
|
||||
kappa_(wfpsf.kappa_),
|
||||
E_(wfpsf.E_)
|
||||
{}
|
||||
|
||||
|
||||
mutWallFunctionFvPatchScalarField::mutWallFunctionFvPatchScalarField
|
||||
(
|
||||
const mutWallFunctionFvPatchScalarField& wfpsf,
|
||||
const DimensionedField<scalar, volMesh>& iF
|
||||
)
|
||||
:
|
||||
fixedValueFvPatchScalarField(wfpsf, iF),
|
||||
Cmu_(wfpsf.Cmu_),
|
||||
kappa_(wfpsf.kappa_),
|
||||
E_(wfpsf.E_)
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
void mutWallFunctionFvPatchScalarField::updateCoeffs()
|
||||
const scalar kappa,
|
||||
const scalar E
|
||||
) const
|
||||
{
|
||||
operator==(calcMut());
|
||||
scalar ypl = 11.0;
|
||||
|
||||
fixedValueFvPatchScalarField::updateCoeffs();
|
||||
for (int i=0; i<10; i++)
|
||||
{
|
||||
ypl = log(E*ypl)/kappa;
|
||||
}
|
||||
|
||||
return ypl;
|
||||
}
|
||||
|
||||
|
||||
@ -139,7 +77,6 @@ tmp<scalarField> mutWallFunctionFvPatchScalarField::calcMut() const
|
||||
{
|
||||
const label patchI = patch().index();
|
||||
const RASModel& rasModel = db().lookupObject<RASModel>("RASProperties");
|
||||
const scalar yPlusLam = rasModel.yPlusLam(kappa_, E_);
|
||||
const scalarField& y = rasModel.y()[patchI];
|
||||
const scalarField& rhow = rasModel.rho().boundaryField()[patchI];
|
||||
const tmp<volScalarField> tk = rasModel.k();
|
||||
@ -156,10 +93,9 @@ tmp<scalarField> mutWallFunctionFvPatchScalarField::calcMut() const
|
||||
label faceCellI = patch().faceCells()[faceI];
|
||||
|
||||
scalar yPlus =
|
||||
Cmu25*y[faceI]*sqrt(k[faceCellI])
|
||||
/(muw[faceI]/rhow[faceI]);
|
||||
Cmu25*y[faceI]*sqrt(k[faceCellI])/(muw[faceI]/rhow[faceI]);
|
||||
|
||||
if (yPlus > yPlusLam)
|
||||
if (yPlus > yPlusLam_)
|
||||
{
|
||||
mutw[faceI] = muw[faceI]*(yPlus*kappa_/log(E_*yPlus) - 1);
|
||||
}
|
||||
@ -169,6 +105,98 @@ tmp<scalarField> mutWallFunctionFvPatchScalarField::calcMut() const
|
||||
}
|
||||
|
||||
|
||||
void mutWallFunctionFvPatchScalarField::writeLocalEntries(Ostream& os) const
|
||||
{
|
||||
os.writeKeyword("Cmu") << Cmu_ << token::END_STATEMENT << nl;
|
||||
os.writeKeyword("kappa") << kappa_ << token::END_STATEMENT << nl;
|
||||
os.writeKeyword("E") << E_ << token::END_STATEMENT << nl;
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
mutWallFunctionFvPatchScalarField::mutWallFunctionFvPatchScalarField
|
||||
(
|
||||
const fvPatch& p,
|
||||
const DimensionedField<scalar, volMesh>& iF
|
||||
)
|
||||
:
|
||||
fixedValueFvPatchScalarField(p, iF),
|
||||
Cmu_(0.09),
|
||||
kappa_(0.41),
|
||||
E_(9.8),
|
||||
yPlusLam_(calcYPlusLam(kappa_, E_))
|
||||
{}
|
||||
|
||||
|
||||
mutWallFunctionFvPatchScalarField::mutWallFunctionFvPatchScalarField
|
||||
(
|
||||
const mutWallFunctionFvPatchScalarField& ptf,
|
||||
const fvPatch& p,
|
||||
const DimensionedField<scalar, volMesh>& iF,
|
||||
const fvPatchFieldMapper& mapper
|
||||
)
|
||||
:
|
||||
fixedValueFvPatchScalarField(ptf, p, iF, mapper),
|
||||
Cmu_(ptf.Cmu_),
|
||||
kappa_(ptf.kappa_),
|
||||
E_(ptf.E_),
|
||||
yPlusLam_(ptf.yPlusLam_)
|
||||
{}
|
||||
|
||||
|
||||
mutWallFunctionFvPatchScalarField::mutWallFunctionFvPatchScalarField
|
||||
(
|
||||
const fvPatch& p,
|
||||
const DimensionedField<scalar, volMesh>& iF,
|
||||
const dictionary& dict
|
||||
)
|
||||
:
|
||||
fixedValueFvPatchScalarField(p, iF, dict),
|
||||
Cmu_(dict.lookupOrDefault<scalar>("Cmu", 0.09)),
|
||||
kappa_(dict.lookupOrDefault<scalar>("kappa", 0.41)),
|
||||
E_(dict.lookupOrDefault<scalar>("E", 9.8)),
|
||||
yPlusLam_(calcYPlusLam(kappa_, E_))
|
||||
{}
|
||||
|
||||
|
||||
mutWallFunctionFvPatchScalarField::mutWallFunctionFvPatchScalarField
|
||||
(
|
||||
const mutWallFunctionFvPatchScalarField& wfpsf
|
||||
)
|
||||
:
|
||||
fixedValueFvPatchScalarField(wfpsf),
|
||||
Cmu_(wfpsf.Cmu_),
|
||||
kappa_(wfpsf.kappa_),
|
||||
E_(wfpsf.E_),
|
||||
yPlusLam_(wfpsf.yPlusLam_)
|
||||
{}
|
||||
|
||||
|
||||
mutWallFunctionFvPatchScalarField::mutWallFunctionFvPatchScalarField
|
||||
(
|
||||
const mutWallFunctionFvPatchScalarField& wfpsf,
|
||||
const DimensionedField<scalar, volMesh>& iF
|
||||
)
|
||||
:
|
||||
fixedValueFvPatchScalarField(wfpsf, iF),
|
||||
Cmu_(wfpsf.Cmu_),
|
||||
kappa_(wfpsf.kappa_),
|
||||
E_(wfpsf.E_),
|
||||
yPlusLam_(wfpsf.yPlusLam_)
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
void mutWallFunctionFvPatchScalarField::updateCoeffs()
|
||||
{
|
||||
operator==(calcMut());
|
||||
|
||||
fixedValueFvPatchScalarField::updateCoeffs();
|
||||
}
|
||||
|
||||
|
||||
tmp<scalarField> mutWallFunctionFvPatchScalarField::yPlus() const
|
||||
{
|
||||
const label patchI = patch().index();
|
||||
@ -194,14 +222,6 @@ void mutWallFunctionFvPatchScalarField::write(Ostream& os) const
|
||||
}
|
||||
|
||||
|
||||
void mutWallFunctionFvPatchScalarField::writeLocalEntries(Ostream& os) const
|
||||
{
|
||||
os.writeKeyword("Cmu") << Cmu_ << token::END_STATEMENT << nl;
|
||||
os.writeKeyword("kappa") << kappa_ << token::END_STATEMENT << nl;
|
||||
os.writeKeyword("E") << E_ << token::END_STATEMENT << nl;
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
makePatchTypeField(fvPatchScalarField, mutWallFunctionFvPatchScalarField);
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -35,8 +35,8 @@ SourceFiles
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef mutWallFunctionFvPatchScalarField_H
|
||||
#define mutWallFunctionFvPatchScalarField_H
|
||||
#ifndef compressibleMutWallFunctionFvPatchScalarField_H
|
||||
#define compressibleMutWallFunctionFvPatchScalarField_H
|
||||
|
||||
#include "fixedValueFvPatchFields.H"
|
||||
|
||||
@ -70,12 +70,18 @@ protected:
|
||||
//- 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 Y+ at the edge of the laminar sublayer
|
||||
virtual scalar calcYPlusLam(const scalar kappa, const scalar E) const;
|
||||
|
||||
//- Calculate the turbulence viscosity
|
||||
virtual tmp<scalarField> calcMut() const;
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -197,7 +197,7 @@ void omegaWallFunctionFvPatchScalarField::updateCoeffs()
|
||||
|
||||
const scalarField magGradUw = mag(Uw.snGrad());
|
||||
|
||||
// Set epsilon and G
|
||||
// Set omega and G
|
||||
forAll(mutw, faceI)
|
||||
{
|
||||
label faceCellI = patch().faceCells()[faceI];
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -33,8 +33,8 @@ SourceFiles
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef omegaWallFunctionFvPatchScalarField_H
|
||||
#define omegaWallFunctionFvPatchScalarField_H
|
||||
#ifndef compressibleOmegaWallFunctionFvPatchScalarField_H
|
||||
#define compressibleOmegaWallFunctionFvPatchScalarField_H
|
||||
|
||||
#include "fixedInternalValueFvPatchField.H"
|
||||
|
||||
|
||||
@ -1,51 +0,0 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\/ 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 2 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, write to the Free Software Foundation,
|
||||
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
Global
|
||||
wallDissipation
|
||||
|
||||
Description
|
||||
Set wall dissipation in the epsilon matrix
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
{
|
||||
const fvPatchList& patches = mesh_.boundary();
|
||||
|
||||
forAll(patches, patchi)
|
||||
{
|
||||
const fvPatch& p = patches[patchi];
|
||||
|
||||
if (isType<wallFvPatch>(p))
|
||||
{
|
||||
epsEqn().setValues
|
||||
(
|
||||
p.faceCells(),
|
||||
epsilon_.boundaryField()[patchi].patchInternalField()
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -1,128 +0,0 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\/ 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 2 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, write to the Free Software Foundation,
|
||||
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
Global
|
||||
wallFunctions
|
||||
|
||||
Description
|
||||
Calculate wall dissipation from wall-functions.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
{
|
||||
labelList cellBoundaryFaceCount(epsilon_.size(), 0);
|
||||
|
||||
scalar Cmu25 = pow(Cmu_.value(), 0.25);
|
||||
scalar Cmu75 = pow(Cmu_.value(), 0.75);
|
||||
|
||||
const fvPatchList& patches = mesh_.boundary();
|
||||
|
||||
//- Initialise the near-wall G field to zero
|
||||
forAll(patches, patchi)
|
||||
{
|
||||
const fvPatch& curPatch = patches[patchi];
|
||||
|
||||
if (isType<wallFvPatch>(curPatch))
|
||||
{
|
||||
forAll(curPatch, facei)
|
||||
{
|
||||
label faceCelli = curPatch.faceCells()[facei];
|
||||
|
||||
epsilon_[faceCelli] = 0.0;
|
||||
G[faceCelli] = 0.0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//- Accumulate the wall face contributions to epsilon and G
|
||||
// Increment cellBoundaryFaceCount for each face for averaging
|
||||
forAll(patches, patchi)
|
||||
{
|
||||
const fvPatch& curPatch = patches[patchi];
|
||||
|
||||
if (isType<wallFvPatch>(curPatch))
|
||||
{
|
||||
# include "checkPatchFieldTypes.H"
|
||||
|
||||
const scalarField& rhow = rho_.boundaryField()[patchi];
|
||||
|
||||
const scalarField& muw = mu().boundaryField()[patchi];
|
||||
const scalarField& mutw = mut_.boundaryField()[patchi];
|
||||
|
||||
scalarField magFaceGradU =
|
||||
mag(U_.boundaryField()[patchi].snGrad());
|
||||
|
||||
forAll(curPatch, facei)
|
||||
{
|
||||
label faceCelli = curPatch.faceCells()[facei];
|
||||
|
||||
scalar yPlus =
|
||||
Cmu25*RASModel::y_[patchi][facei]
|
||||
*sqrt(k_[faceCelli])
|
||||
/(muw[facei]/rhow[facei]);
|
||||
|
||||
// For corner cells (with two boundary or more faces),
|
||||
// epsilon and G in the near-wall cell are calculated
|
||||
// as an average
|
||||
|
||||
cellBoundaryFaceCount[faceCelli]++;
|
||||
|
||||
epsilon_[faceCelli] +=
|
||||
Cmu75*pow(k_[faceCelli], 1.5)
|
||||
/(kappa_.value()*RASModel::y_[patchi][facei]);
|
||||
|
||||
if (yPlus > yPlusLam_)
|
||||
{
|
||||
G[faceCelli] +=
|
||||
(mutw[facei] + muw[facei])
|
||||
*magFaceGradU[facei]
|
||||
*Cmu25*sqrt(k_[faceCelli])
|
||||
/(kappa_.value()*RASModel::y_[patchi][facei]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Perform the averaging
|
||||
|
||||
forAll(patches, patchi)
|
||||
{
|
||||
const fvPatch& curPatch = patches[patchi];
|
||||
|
||||
if (isType<wallFvPatch>(curPatch))
|
||||
{
|
||||
forAll(curPatch, facei)
|
||||
{
|
||||
label faceCelli = curPatch.faceCells()[facei];
|
||||
|
||||
epsilon_[faceCelli] /= cellBoundaryFaceCount[faceCelli];
|
||||
G[faceCelli] /= cellBoundaryFaceCount[faceCelli];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -1,73 +0,0 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\/ 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 2 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, write to the Free Software Foundation,
|
||||
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
Global
|
||||
wallViscosity
|
||||
|
||||
Description
|
||||
Calculate wall viscosity from wall-functions.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
{
|
||||
scalar Cmu25 = pow(Cmu_.value(), 0.25);
|
||||
|
||||
const fvPatchList& patches = mesh_.boundary();
|
||||
|
||||
forAll(patches, patchi)
|
||||
{
|
||||
const fvPatch& curPatch = patches[patchi];
|
||||
|
||||
if (isType<wallFvPatch>(curPatch))
|
||||
{
|
||||
const scalarField& rhow = rho_.boundaryField()[patchi];
|
||||
|
||||
const scalarField& muw = mu().boundaryField()[patchi];
|
||||
scalarField& mutw = mut_.boundaryField()[patchi];
|
||||
|
||||
forAll(curPatch, facei)
|
||||
{
|
||||
label faceCelli = curPatch.faceCells()[facei];
|
||||
|
||||
scalar yPlus =
|
||||
Cmu25*RASModel::y_[patchi][facei]
|
||||
*sqrt(k_[faceCelli])/(muw[facei]/rhow[facei]);
|
||||
|
||||
if (yPlus > yPlusLam_)
|
||||
{
|
||||
mutw[facei] =
|
||||
muw[facei]
|
||||
*(yPlus*kappa_.value()/log(E_.value()*yPlus) - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
mutw[facei] = 0.0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -155,13 +155,13 @@ SpalartAllmaras::SpalartAllmaras
|
||||
:
|
||||
LESModel(modelName, U, phi, transport),
|
||||
|
||||
alphaNut_
|
||||
sigmaNut_
|
||||
(
|
||||
dimensioned<scalar>::lookupOrAddToDict
|
||||
(
|
||||
"alphaNut",
|
||||
"sigmaNut",
|
||||
coeffDict_,
|
||||
1.5
|
||||
0.66666
|
||||
)
|
||||
),
|
||||
kappa_
|
||||
@ -169,7 +169,7 @@ SpalartAllmaras::SpalartAllmaras
|
||||
dimensioned<scalar>::lookupOrAddToDict
|
||||
(
|
||||
"kappa",
|
||||
*this,
|
||||
coeffDict_,
|
||||
0.41
|
||||
)
|
||||
),
|
||||
@ -227,7 +227,7 @@ SpalartAllmaras::SpalartAllmaras
|
||||
0.07
|
||||
)
|
||||
),
|
||||
Cw1_(Cb1_/sqr(kappa_) + alphaNut_*(1.0 + Cb2_)),
|
||||
Cw1_(Cb1_/sqr(kappa_) + (1.0 + Cb2_)/sigmaNut_),
|
||||
Cw2_
|
||||
(
|
||||
dimensioned<scalar>::lookupOrAddToDict
|
||||
@ -301,11 +301,11 @@ void SpalartAllmaras::correct(const tmp<volTensorField>& gradU)
|
||||
+ fvm::div(phi(), nuTilda_)
|
||||
- fvm::laplacian
|
||||
(
|
||||
alphaNut_*(nuTilda_ + nu()),
|
||||
(nuTilda_ + nu())/sigmaNut_,
|
||||
nuTilda_,
|
||||
"laplacian(DnuTildaEff,nuTilda)"
|
||||
)
|
||||
- alphaNut_*Cb2_*magSqr(fvc::grad(nuTilda_))
|
||||
- Cb2_/sigmaNut_*magSqr(fvc::grad(nuTilda_))
|
||||
==
|
||||
Cb1_*STilda*nuTilda_
|
||||
- fvm::Sp(Cw1_*fw(STilda, dTilda)*nuTilda_/sqr(dTilda), nuTilda_)
|
||||
@ -358,7 +358,7 @@ bool SpalartAllmaras::read()
|
||||
{
|
||||
if (LESModel::read())
|
||||
{
|
||||
alphaNut_.readIfPresent(coeffDict());
|
||||
sigmaNut_.readIfPresent(coeffDict());
|
||||
kappa_.readIfPresent(*this);
|
||||
Cb1_.readIfPresent(coeffDict());
|
||||
Cb2_.readIfPresent(coeffDict());
|
||||
@ -366,7 +366,7 @@ bool SpalartAllmaras::read()
|
||||
Cv2_.readIfPresent(coeffDict());
|
||||
CDES_.readIfPresent(coeffDict());
|
||||
ck_.readIfPresent(coeffDict());
|
||||
Cw1_ = Cb1_/sqr(kappa_) + alphaNut_*(1.0 + Cb2_);
|
||||
Cw1_ = Cb1_/sqr(kappa_) + (1.0 + Cb2_)/sigmaNut_;
|
||||
Cw2_.readIfPresent(coeffDict());
|
||||
Cw3_.readIfPresent(coeffDict());
|
||||
|
||||
|
||||
@ -71,7 +71,7 @@ protected:
|
||||
|
||||
// Protected data
|
||||
|
||||
dimensionedScalar alphaNut_;
|
||||
dimensionedScalar sigmaNut_;
|
||||
dimensionedScalar kappa_;
|
||||
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -60,7 +60,8 @@ void Foam::IDDESDelta::calcDelta()
|
||||
{
|
||||
label faceI = cFaces[cFaceI];
|
||||
const point& facevector = mesh().faceCentres()[faceI];
|
||||
scalar tmp = mag(facevector-centrevector);
|
||||
scalar tmp = mag(facevector - centrevector);
|
||||
|
||||
if (tmp > deltamaxTmp)
|
||||
{
|
||||
deltamaxTmp = tmp;
|
||||
@ -79,7 +80,11 @@ void Foam::IDDESDelta::calcDelta()
|
||||
{
|
||||
delta_.internalField() =
|
||||
deltaCoeff_
|
||||
*min(max(max(cw_*wallDist(mesh()).y(),cw_*deltamax),hwn),deltamax);
|
||||
*min
|
||||
(
|
||||
max(max(cw_*wallDist(mesh()).y(), cw_*deltamax), hwn),
|
||||
deltamax
|
||||
);
|
||||
}
|
||||
else if (nD == 2)
|
||||
{
|
||||
@ -89,12 +94,16 @@ void Foam::IDDESDelta::calcDelta()
|
||||
|
||||
delta_.internalField() =
|
||||
deltaCoeff_
|
||||
*min(max(max(cw_*wallDist(mesh()).y(),cw_*deltamax),hwn),deltamax);
|
||||
*min
|
||||
(
|
||||
max(max(cw_*wallDist(mesh()).y(), cw_*deltamax), hwn),
|
||||
deltamax
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
FatalErrorIn("IDDESDelta::calcDelta()")
|
||||
<< "Case is not 3D or 2D, LES is not applicable"
|
||||
<< "Case is not 3D or 2D, LES is not strictly applicable"
|
||||
<< exit(FatalError);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -46,7 +46,7 @@ namespace Foam
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class IDDESDelta Declaration
|
||||
Class IDDESDelta Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
class IDDESDelta
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -39,7 +39,7 @@ namespace incompressible
|
||||
namespace RASModels
|
||||
{
|
||||
|
||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||
// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
|
||||
|
||||
scalar nutRoughWallFunctionFvPatchScalarField::fnRough
|
||||
(
|
||||
@ -64,6 +64,68 @@ scalar nutRoughWallFunctionFvPatchScalarField::fnRough
|
||||
}
|
||||
|
||||
|
||||
tmp<scalarField> nutRoughWallFunctionFvPatchScalarField::calcNut() const
|
||||
{
|
||||
const label patchI = patch().index();
|
||||
|
||||
const RASModel& rasModel = db().lookupObject<RASModel>("RASProperties");
|
||||
const scalarField& y = rasModel.y()[patchI];
|
||||
const tmp<volScalarField> tk = rasModel.k();
|
||||
const volScalarField& k = tk();
|
||||
const scalarField& nuw = rasModel.nu().boundaryField()[patchI];
|
||||
|
||||
const scalar Cmu25 = pow(Cmu_, 0.25);
|
||||
|
||||
tmp<scalarField> tnutw(new scalarField(patch().size(), 0.0));
|
||||
scalarField& nutw = tnutw();
|
||||
|
||||
forAll(nutw, faceI)
|
||||
{
|
||||
label faceCellI = patch().faceCells()[faceI];
|
||||
|
||||
scalar uStar = Cmu25*sqrt(k[faceCellI]);
|
||||
scalar yPlus = uStar*y[faceI]/nuw[faceI];
|
||||
scalar KsPlus = uStar*Ks_[faceI]/nuw[faceI];
|
||||
|
||||
scalar Edash = E_;
|
||||
|
||||
if (KsPlus > 2.25)
|
||||
{
|
||||
Edash /= fnRough(KsPlus, Cs_[faceI]);
|
||||
}
|
||||
|
||||
if (yPlus > yPlusLam_)
|
||||
{
|
||||
scalar limitingNutw = max(nutw[faceI], nuw[faceI]);
|
||||
|
||||
// To avoid oscillations limit the change in the wall viscosity
|
||||
// which is particularly important if it temporarily becomes zero
|
||||
nutw[faceI] =
|
||||
max
|
||||
(
|
||||
min
|
||||
(
|
||||
nuw[faceI]
|
||||
*(yPlus*kappa_/log(max(Edash*yPlus, 1+1e-4)) - 1),
|
||||
2*limitingNutw
|
||||
), 0.5*limitingNutw
|
||||
);
|
||||
}
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "yPlus = " << yPlus
|
||||
<< ", KsPlus = " << KsPlus
|
||||
<< ", Edash = " << Edash
|
||||
<< ", nutw = " << nutw[faceI]
|
||||
<< endl;
|
||||
}
|
||||
}
|
||||
|
||||
return tnutw;
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
nutRoughWallFunctionFvPatchScalarField::nutRoughWallFunctionFvPatchScalarField
|
||||
@ -157,69 +219,6 @@ void nutRoughWallFunctionFvPatchScalarField::rmap
|
||||
}
|
||||
|
||||
|
||||
tmp<scalarField> nutRoughWallFunctionFvPatchScalarField::calcNut() const
|
||||
{
|
||||
const label patchI = patch().index();
|
||||
|
||||
const RASModel& rasModel = db().lookupObject<RASModel>("RASProperties");
|
||||
const scalar yPlusLam = rasModel.yPlusLam(kappa_, E_);
|
||||
const scalarField& y = rasModel.y()[patchI];
|
||||
const tmp<volScalarField> tk = rasModel.k();
|
||||
const volScalarField& k = tk();
|
||||
const scalarField& nuw = rasModel.nu().boundaryField()[patchI];
|
||||
|
||||
const scalar Cmu25 = pow(Cmu_, 0.25);
|
||||
|
||||
tmp<scalarField> tnutw(new scalarField(patch().size(), 0.0));
|
||||
scalarField& nutw = tnutw();
|
||||
|
||||
forAll(nutw, faceI)
|
||||
{
|
||||
label faceCellI = patch().faceCells()[faceI];
|
||||
|
||||
scalar uStar = Cmu25*sqrt(k[faceCellI]);
|
||||
scalar yPlus = uStar*y[faceI]/nuw[faceI];
|
||||
scalar KsPlus = uStar*Ks_[faceI]/nuw[faceI];
|
||||
|
||||
scalar Edash = E_;
|
||||
|
||||
if (KsPlus > 2.25)
|
||||
{
|
||||
Edash /= fnRough(KsPlus, Cs_[faceI]);
|
||||
}
|
||||
|
||||
if (yPlus > yPlusLam)
|
||||
{
|
||||
scalar limitingNutw = max(nutw[faceI], nuw[faceI]);
|
||||
|
||||
// To avoid oscillations limit the change in the wall viscosity
|
||||
// which is particularly important if it temporarily becomes zero
|
||||
nutw[faceI] =
|
||||
max
|
||||
(
|
||||
min
|
||||
(
|
||||
nuw[faceI]
|
||||
*(yPlus*kappa_/log(max(Edash*yPlus, 1+1e-4)) - 1),
|
||||
2*limitingNutw
|
||||
), 0.5*limitingNutw
|
||||
);
|
||||
}
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "yPlus = " << yPlus
|
||||
<< ", KsPlus = " << KsPlus
|
||||
<< ", Edash = " << Edash
|
||||
<< ", nutw = " << nutw[faceI]
|
||||
<< endl;
|
||||
}
|
||||
}
|
||||
|
||||
return tnutw;
|
||||
}
|
||||
|
||||
|
||||
void nutRoughWallFunctionFvPatchScalarField::write(Ostream& os) const
|
||||
{
|
||||
fvPatchField<scalar>::write(os);
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
|
||||
@ -39,7 +39,39 @@ namespace incompressible
|
||||
namespace RASModels
|
||||
{
|
||||
|
||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||
// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
|
||||
|
||||
tmp<scalarField>
|
||||
nutSpalartAllmarasStandardRoughWallFunctionFvPatchScalarField::calcNut() const
|
||||
{
|
||||
const label patchI = patch().index();
|
||||
|
||||
const RASModel& rasModel = db().lookupObject<RASModel>("RASProperties");
|
||||
const scalarField& y = rasModel.y()[patchI];
|
||||
const fvPatchVectorField& Uw = rasModel.U().boundaryField()[patchI];
|
||||
const scalarField& nuw = rasModel.nu().boundaryField()[patchI];
|
||||
|
||||
// The flow velocity at the adjacent cell centre
|
||||
const scalarField magUp = mag(Uw.patchInternalField() - Uw);
|
||||
|
||||
tmp<scalarField> tyPlus = calcYPlus(magUp);
|
||||
scalarField& yPlus = tyPlus();
|
||||
|
||||
tmp<scalarField> tnutw(new scalarField(patch().size(), 0.0));
|
||||
scalarField& nutw = tnutw();
|
||||
|
||||
forAll(yPlus, facei)
|
||||
{
|
||||
if (yPlus[facei] > yPlusLam_)
|
||||
{
|
||||
const scalar Re = magUp[facei]*y[facei]/nuw[facei];
|
||||
nutw[facei] = nuw[facei]*(sqr(yPlus[facei])/Re - 1);
|
||||
}
|
||||
}
|
||||
|
||||
return tnutw;
|
||||
}
|
||||
|
||||
|
||||
tmp<scalarField>
|
||||
nutSpalartAllmarasStandardRoughWallFunctionFvPatchScalarField::calcYPlus
|
||||
@ -50,7 +82,6 @@ nutSpalartAllmarasStandardRoughWallFunctionFvPatchScalarField::calcYPlus
|
||||
const label patchI = patch().index();
|
||||
|
||||
const RASModel& rasModel = db().lookupObject<RASModel>("RASProperties");
|
||||
const scalar yPlusLam = rasModel.yPlusLam(kappa_, E_);
|
||||
const scalarField& y = rasModel.y()[patchI];
|
||||
const scalarField& nuw = rasModel.nu().boundaryField()[patchI];
|
||||
|
||||
@ -75,7 +106,7 @@ nutSpalartAllmarasStandardRoughWallFunctionFvPatchScalarField::calcYPlus
|
||||
const scalar Re = magUpara*y[facei]/nuw[facei];
|
||||
const scalar kappaRe = kappa_*Re;
|
||||
|
||||
scalar yp = yPlusLam;
|
||||
scalar yp = yPlusLam_;
|
||||
const scalar ryPlusLam = 1.0/yp;
|
||||
|
||||
int iter = 0;
|
||||
@ -133,7 +164,7 @@ nutSpalartAllmarasStandardRoughWallFunctionFvPatchScalarField::calcYPlus
|
||||
&& yp > VSMALL
|
||||
);
|
||||
|
||||
yPlus[facei] = yp;
|
||||
yPlus[facei] = max(0.0, yp);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -146,7 +177,7 @@ nutSpalartAllmarasStandardRoughWallFunctionFvPatchScalarField::calcYPlus
|
||||
const scalar Re = magUpara*y[facei]/nuw[facei];
|
||||
const scalar kappaRe = kappa_*Re;
|
||||
|
||||
scalar yp = yPlusLam;
|
||||
scalar yp = yPlusLam_;
|
||||
const scalar ryPlusLam = 1.0/yp;
|
||||
|
||||
int iter = 0;
|
||||
@ -159,7 +190,7 @@ nutSpalartAllmarasStandardRoughWallFunctionFvPatchScalarField::calcYPlus
|
||||
|
||||
} while(mag(ryPlusLam*(yp - yPlusLast)) > 0.0001 && ++iter < 10);
|
||||
|
||||
yPlus[facei] = yp;
|
||||
yPlus[facei] = max(0.0, yp);
|
||||
}
|
||||
}
|
||||
|
||||
@ -243,39 +274,6 @@ nutSpalartAllmarasStandardRoughWallFunctionFvPatchScalarField
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
tmp<scalarField>
|
||||
nutSpalartAllmarasStandardRoughWallFunctionFvPatchScalarField::calcNut() const
|
||||
{
|
||||
const label patchI = patch().index();
|
||||
|
||||
const RASModel& rasModel = db().lookupObject<RASModel>("RASProperties");
|
||||
const scalar yPlusLam = rasModel.yPlusLam(kappa_, E_);
|
||||
const scalarField& y = rasModel.y()[patchI];
|
||||
const fvPatchVectorField& Uw = rasModel.U().boundaryField()[patchI];
|
||||
const scalarField& nuw = rasModel.nu().boundaryField()[patchI];
|
||||
|
||||
// The flow velocity at the adjacent cell centre
|
||||
const scalarField magUp = mag(Uw.patchInternalField() - Uw);
|
||||
|
||||
tmp<scalarField> tyPlus = calcYPlus(magUp);
|
||||
scalarField& yPlus = tyPlus();
|
||||
|
||||
tmp<scalarField> tnutw(new scalarField(patch().size(), 0.0));
|
||||
scalarField& nutw = tnutw();
|
||||
|
||||
forAll(yPlus, facei)
|
||||
{
|
||||
if (yPlus[facei] > yPlusLam)
|
||||
{
|
||||
const scalar Re = magUp[facei]*y[facei]/nuw[facei];
|
||||
nutw[facei] = nuw[facei]*(sqr(yPlus[facei])/Re - 1);
|
||||
}
|
||||
}
|
||||
|
||||
return tnutw;
|
||||
}
|
||||
|
||||
|
||||
tmp<scalarField>
|
||||
nutSpalartAllmarasStandardRoughWallFunctionFvPatchScalarField::yPlus() const
|
||||
{
|
||||
|
||||
@ -41,6 +41,35 @@ namespace RASModels
|
||||
|
||||
// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
|
||||
|
||||
tmp<scalarField>
|
||||
nutSpalartAllmarasStandardWallFunctionFvPatchScalarField::calcNut() const
|
||||
{
|
||||
const label patchI = patch().index();
|
||||
|
||||
const RASModel& rasModel = db().lookupObject<RASModel>("RASProperties");
|
||||
const fvPatchVectorField& Uw = rasModel.U().boundaryField()[patchI];
|
||||
const scalarField magUp = mag(Uw.patchInternalField() - Uw);
|
||||
const scalarField& nuw = rasModel.nu().boundaryField()[patchI];
|
||||
|
||||
tmp<scalarField> tyPlus = calcYPlus(magUp);
|
||||
scalarField& yPlus = tyPlus();
|
||||
|
||||
tmp<scalarField> tnutw(new scalarField(patch().size(), 0.0));
|
||||
scalarField& nutw = tnutw();
|
||||
|
||||
forAll(yPlus, facei)
|
||||
{
|
||||
if (yPlus[facei] > yPlusLam_)
|
||||
{
|
||||
nutw[facei] =
|
||||
nuw[facei]*(yPlus[facei]*kappa_/log(E_*yPlus[facei]) - 1.0);
|
||||
}
|
||||
}
|
||||
|
||||
return tnutw;
|
||||
}
|
||||
|
||||
|
||||
tmp<scalarField>
|
||||
nutSpalartAllmarasStandardWallFunctionFvPatchScalarField::calcYPlus
|
||||
(
|
||||
@ -50,7 +79,6 @@ nutSpalartAllmarasStandardWallFunctionFvPatchScalarField::calcYPlus
|
||||
const label patchI = patch().index();
|
||||
|
||||
const RASModel& rasModel = db().lookupObject<RASModel>("RASProperties");
|
||||
const scalar yPlusLam = rasModel.yPlusLam(kappa_, E_);
|
||||
const scalarField& y = rasModel.y()[patchI];
|
||||
const scalarField& nuw = rasModel.nu().boundaryField()[patchI];
|
||||
|
||||
@ -61,7 +89,7 @@ nutSpalartAllmarasStandardWallFunctionFvPatchScalarField::calcYPlus
|
||||
{
|
||||
scalar kappaRe = kappa_*magUp[facei]*y[facei]/nuw[facei];
|
||||
|
||||
scalar yp = yPlusLam;
|
||||
scalar yp = yPlusLam_;
|
||||
scalar ryPlusLam = 1.0/yp;
|
||||
|
||||
int iter = 0;
|
||||
@ -142,36 +170,6 @@ nutSpalartAllmarasStandardWallFunctionFvPatchScalarField
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
tmp<scalarField>
|
||||
nutSpalartAllmarasStandardWallFunctionFvPatchScalarField::calcNut() const
|
||||
{
|
||||
const label patchI = patch().index();
|
||||
|
||||
const RASModel& rasModel = db().lookupObject<RASModel>("RASProperties");
|
||||
const scalar yPlusLam = rasModel.yPlusLam(kappa_, E_);
|
||||
const fvPatchVectorField& Uw = rasModel.U().boundaryField()[patchI];
|
||||
const scalarField magUp = mag(Uw.patchInternalField() - Uw);
|
||||
const scalarField& nuw = rasModel.nu().boundaryField()[patchI];
|
||||
|
||||
tmp<scalarField> tyPlus = calcYPlus(magUp);
|
||||
scalarField& yPlus = tyPlus();
|
||||
|
||||
tmp<scalarField> tnutw(new scalarField(patch().size(), 0.0));
|
||||
scalarField& nutw = tnutw();
|
||||
|
||||
forAll(yPlus, facei)
|
||||
{
|
||||
if (yPlus[facei] > yPlusLam)
|
||||
{
|
||||
nutw[facei] =
|
||||
nuw[facei]*(yPlus[facei]*kappa_/log(E_*yPlus[facei]) - 1.0);
|
||||
}
|
||||
}
|
||||
|
||||
return tnutw;
|
||||
}
|
||||
|
||||
|
||||
tmp<scalarField>
|
||||
nutSpalartAllmarasStandardWallFunctionFvPatchScalarField::yPlus() const
|
||||
{
|
||||
|
||||
@ -39,7 +39,21 @@ namespace incompressible
|
||||
namespace RASModels
|
||||
{
|
||||
|
||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||
// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
|
||||
|
||||
tmp<scalarField>
|
||||
nutSpalartAllmarasWallFunctionFvPatchScalarField::calcNut() const
|
||||
{
|
||||
const label patchI = patch().index();
|
||||
|
||||
const RASModel& rasModel = db().lookupObject<RASModel>("RASProperties");
|
||||
const fvPatchVectorField& Uw = rasModel.U().boundaryField()[patchI];
|
||||
const scalarField magGradU = mag(Uw.snGrad());
|
||||
const scalarField& nuw = rasModel.nu().boundaryField()[patchI];
|
||||
|
||||
return max(0.0, sqr(calcUTau(magGradU))/magGradU - nuw);
|
||||
}
|
||||
|
||||
|
||||
tmp<scalarField> nutSpalartAllmarasWallFunctionFvPatchScalarField::calcUTau
|
||||
(
|
||||
@ -159,20 +173,6 @@ nutSpalartAllmarasWallFunctionFvPatchScalarField
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
tmp<scalarField>
|
||||
nutSpalartAllmarasWallFunctionFvPatchScalarField::calcNut() const
|
||||
{
|
||||
const label patchI = patch().index();
|
||||
|
||||
const RASModel& rasModel = db().lookupObject<RASModel>("RASProperties");
|
||||
const fvPatchVectorField& Uw = rasModel.U().boundaryField()[patchI];
|
||||
const scalarField magGradU = mag(Uw.snGrad());
|
||||
const scalarField& nuw = rasModel.nu().boundaryField()[patchI];
|
||||
|
||||
return max(0.0, sqr(calcUTau(magGradU))/magGradU - nuw);
|
||||
}
|
||||
|
||||
|
||||
tmp<scalarField>
|
||||
nutSpalartAllmarasWallFunctionFvPatchScalarField::yPlus() const
|
||||
{
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -56,92 +56,20 @@ void nutWallFunctionFvPatchScalarField::checkType()
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
nutWallFunctionFvPatchScalarField::nutWallFunctionFvPatchScalarField
|
||||
scalar nutWallFunctionFvPatchScalarField::calcYPlusLam
|
||||
(
|
||||
const fvPatch& p,
|
||||
const DimensionedField<scalar, volMesh>& iF
|
||||
)
|
||||
:
|
||||
fixedValueFvPatchScalarField(p, iF),
|
||||
Cmu_(0.09),
|
||||
kappa_(0.41),
|
||||
E_(9.8)
|
||||
const scalar kappa,
|
||||
const scalar E
|
||||
) const
|
||||
{
|
||||
checkType();
|
||||
}
|
||||
scalar ypl = 11.0;
|
||||
|
||||
for (int i=0; i<10; i++)
|
||||
{
|
||||
ypl = log(E*ypl)/kappa;
|
||||
}
|
||||
|
||||
nutWallFunctionFvPatchScalarField::nutWallFunctionFvPatchScalarField
|
||||
(
|
||||
const nutWallFunctionFvPatchScalarField& ptf,
|
||||
const fvPatch& p,
|
||||
const DimensionedField<scalar, volMesh>& iF,
|
||||
const fvPatchFieldMapper& mapper
|
||||
)
|
||||
:
|
||||
fixedValueFvPatchScalarField(ptf, p, iF, mapper),
|
||||
Cmu_(ptf.Cmu_),
|
||||
kappa_(ptf.kappa_),
|
||||
E_(ptf.E_)
|
||||
{
|
||||
checkType();
|
||||
}
|
||||
|
||||
|
||||
nutWallFunctionFvPatchScalarField::nutWallFunctionFvPatchScalarField
|
||||
(
|
||||
const fvPatch& p,
|
||||
const DimensionedField<scalar, volMesh>& iF,
|
||||
const dictionary& dict
|
||||
)
|
||||
:
|
||||
fixedValueFvPatchScalarField(p, iF, dict),
|
||||
Cmu_(dict.lookupOrDefault<scalar>("Cmu", 0.09)),
|
||||
kappa_(dict.lookupOrDefault<scalar>("kappa", 0.41)),
|
||||
E_(dict.lookupOrDefault<scalar>("E", 9.8))
|
||||
{
|
||||
checkType();
|
||||
}
|
||||
|
||||
|
||||
nutWallFunctionFvPatchScalarField::nutWallFunctionFvPatchScalarField
|
||||
(
|
||||
const nutWallFunctionFvPatchScalarField& wfpsf
|
||||
)
|
||||
:
|
||||
fixedValueFvPatchScalarField(wfpsf),
|
||||
Cmu_(wfpsf.Cmu_),
|
||||
kappa_(wfpsf.kappa_),
|
||||
E_(wfpsf.E_)
|
||||
{
|
||||
checkType();
|
||||
}
|
||||
|
||||
|
||||
nutWallFunctionFvPatchScalarField::nutWallFunctionFvPatchScalarField
|
||||
(
|
||||
const nutWallFunctionFvPatchScalarField& wfpsf,
|
||||
const DimensionedField<scalar, volMesh>& iF
|
||||
)
|
||||
:
|
||||
fixedValueFvPatchScalarField(wfpsf, iF),
|
||||
Cmu_(wfpsf.Cmu_),
|
||||
kappa_(wfpsf.kappa_),
|
||||
E_(wfpsf.E_)
|
||||
{
|
||||
checkType();
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
void nutWallFunctionFvPatchScalarField::updateCoeffs()
|
||||
{
|
||||
operator==(calcNut());
|
||||
|
||||
fixedValueFvPatchScalarField::updateCoeffs();
|
||||
return ypl;
|
||||
}
|
||||
|
||||
|
||||
@ -150,7 +78,6 @@ tmp<scalarField> nutWallFunctionFvPatchScalarField::calcNut() const
|
||||
const label patchI = patch().index();
|
||||
|
||||
const RASModel& rasModel = db().lookupObject<RASModel>("RASProperties");
|
||||
const scalar yPlusLam = rasModel.yPlusLam(kappa_, E_);
|
||||
const scalarField& y = rasModel.y()[patchI];
|
||||
const tmp<volScalarField> tk = rasModel.k();
|
||||
const volScalarField& k = tk();
|
||||
@ -167,7 +94,7 @@ tmp<scalarField> nutWallFunctionFvPatchScalarField::calcNut() const
|
||||
|
||||
scalar yPlus = Cmu25*y[faceI]*sqrt(k[faceCellI])/nuw[faceI];
|
||||
|
||||
if (yPlus > yPlusLam)
|
||||
if (yPlus > yPlusLam_)
|
||||
{
|
||||
nutw[faceI] = nuw[faceI]*(yPlus*kappa_/log(E_*yPlus) - 1.0);
|
||||
}
|
||||
@ -177,6 +104,108 @@ tmp<scalarField> nutWallFunctionFvPatchScalarField::calcNut() const
|
||||
}
|
||||
|
||||
|
||||
void nutWallFunctionFvPatchScalarField::writeLocalEntries(Ostream& os) const
|
||||
{
|
||||
os.writeKeyword("Cmu") << Cmu_ << token::END_STATEMENT << nl;
|
||||
os.writeKeyword("kappa") << kappa_ << token::END_STATEMENT << nl;
|
||||
os.writeKeyword("E") << E_ << token::END_STATEMENT << nl;
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
nutWallFunctionFvPatchScalarField::nutWallFunctionFvPatchScalarField
|
||||
(
|
||||
const fvPatch& p,
|
||||
const DimensionedField<scalar, volMesh>& iF
|
||||
)
|
||||
:
|
||||
fixedValueFvPatchScalarField(p, iF),
|
||||
Cmu_(0.09),
|
||||
kappa_(0.41),
|
||||
E_(9.8),
|
||||
yPlusLam_(calcYPlusLam(kappa_, E_))
|
||||
{
|
||||
checkType();
|
||||
}
|
||||
|
||||
|
||||
nutWallFunctionFvPatchScalarField::nutWallFunctionFvPatchScalarField
|
||||
(
|
||||
const nutWallFunctionFvPatchScalarField& ptf,
|
||||
const fvPatch& p,
|
||||
const DimensionedField<scalar, volMesh>& iF,
|
||||
const fvPatchFieldMapper& mapper
|
||||
)
|
||||
:
|
||||
fixedValueFvPatchScalarField(ptf, p, iF, mapper),
|
||||
Cmu_(ptf.Cmu_),
|
||||
kappa_(ptf.kappa_),
|
||||
E_(ptf.E_),
|
||||
yPlusLam_(ptf.yPlusLam_)
|
||||
{
|
||||
checkType();
|
||||
}
|
||||
|
||||
|
||||
nutWallFunctionFvPatchScalarField::nutWallFunctionFvPatchScalarField
|
||||
(
|
||||
const fvPatch& p,
|
||||
const DimensionedField<scalar, volMesh>& iF,
|
||||
const dictionary& dict
|
||||
)
|
||||
:
|
||||
fixedValueFvPatchScalarField(p, iF, dict),
|
||||
Cmu_(dict.lookupOrDefault<scalar>("Cmu", 0.09)),
|
||||
kappa_(dict.lookupOrDefault<scalar>("kappa", 0.41)),
|
||||
E_(dict.lookupOrDefault<scalar>("E", 9.8)),
|
||||
yPlusLam_(calcYPlusLam(kappa_, E_))
|
||||
{
|
||||
checkType();
|
||||
}
|
||||
|
||||
|
||||
nutWallFunctionFvPatchScalarField::nutWallFunctionFvPatchScalarField
|
||||
(
|
||||
const nutWallFunctionFvPatchScalarField& wfpsf
|
||||
)
|
||||
:
|
||||
fixedValueFvPatchScalarField(wfpsf),
|
||||
Cmu_(wfpsf.Cmu_),
|
||||
kappa_(wfpsf.kappa_),
|
||||
E_(wfpsf.E_),
|
||||
yPlusLam_(wfpsf.yPlusLam_)
|
||||
{
|
||||
checkType();
|
||||
}
|
||||
|
||||
|
||||
nutWallFunctionFvPatchScalarField::nutWallFunctionFvPatchScalarField
|
||||
(
|
||||
const nutWallFunctionFvPatchScalarField& wfpsf,
|
||||
const DimensionedField<scalar, volMesh>& iF
|
||||
)
|
||||
:
|
||||
fixedValueFvPatchScalarField(wfpsf, iF),
|
||||
Cmu_(wfpsf.Cmu_),
|
||||
kappa_(wfpsf.kappa_),
|
||||
E_(wfpsf.E_),
|
||||
yPlusLam_(wfpsf.yPlusLam_)
|
||||
{
|
||||
checkType();
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
void nutWallFunctionFvPatchScalarField::updateCoeffs()
|
||||
{
|
||||
operator==(calcNut());
|
||||
|
||||
fixedValueFvPatchScalarField::updateCoeffs();
|
||||
}
|
||||
|
||||
|
||||
tmp<scalarField> nutWallFunctionFvPatchScalarField::yPlus() const
|
||||
{
|
||||
const label patchI = patch().index();
|
||||
@ -201,14 +230,6 @@ void nutWallFunctionFvPatchScalarField::write(Ostream& os) const
|
||||
}
|
||||
|
||||
|
||||
void nutWallFunctionFvPatchScalarField::writeLocalEntries(Ostream& os) const
|
||||
{
|
||||
os.writeKeyword("Cmu") << Cmu_ << token::END_STATEMENT << nl;
|
||||
os.writeKeyword("kappa") << kappa_ << token::END_STATEMENT << nl;
|
||||
os.writeKeyword("E") << E_ << token::END_STATEMENT << nl;
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
makePatchTypeField(fvPatchScalarField, nutWallFunctionFvPatchScalarField);
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -70,12 +70,18 @@ protected:
|
||||
//- 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 Y+ at the edge of the laminar sublayer
|
||||
virtual scalar calcYPlusLam(const scalar kappa, const scalar E) const;
|
||||
|
||||
//- Calculate the turbulence viscosity
|
||||
virtual tmp<scalarField> calcNut() const;
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -189,7 +189,7 @@ void omegaWallFunctionFvPatchScalarField::updateCoeffs()
|
||||
|
||||
const scalarField magGradUw = mag(Uw.snGrad());
|
||||
|
||||
// Set epsilon and G
|
||||
// Set omega and G
|
||||
forAll(nutw, faceI)
|
||||
{
|
||||
label faceCellI = patch().faceCells()[faceI];
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2008-2009 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
|
||||
@ -1,126 +0,0 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\/ 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 2 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, write to the Free Software Foundation,
|
||||
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
Global
|
||||
wallFunctions
|
||||
|
||||
Description
|
||||
Calculate wall generation and dissipation from wall-functions.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
{
|
||||
labelList cellBoundaryFaceCount(epsilon_.size(), 0);
|
||||
|
||||
scalar Cmu25 = pow(Cmu_.value(), 0.25);
|
||||
scalar Cmu75 = pow(Cmu_.value(), 0.75);
|
||||
|
||||
const fvPatchList& patches = mesh_.boundary();
|
||||
|
||||
//- Initialise the near-wall epsilon and G fields to zero
|
||||
forAll(patches, patchi)
|
||||
{
|
||||
const fvPatch& curPatch = patches[patchi];
|
||||
|
||||
if (isType<wallFvPatch>(curPatch))
|
||||
{
|
||||
forAll(curPatch, facei)
|
||||
{
|
||||
label faceCelli = curPatch.faceCells()[facei];
|
||||
|
||||
epsilon_[faceCelli] = 0.0;
|
||||
G[faceCelli] = 0.0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//- Accumulate the wall face contributions to epsilon and G
|
||||
// Increment cellBoundaryFaceCount for each face for averaging
|
||||
forAll(patches, patchi)
|
||||
{
|
||||
const fvPatch& curPatch = patches[patchi];
|
||||
|
||||
if (isType<wallFvPatch>(curPatch))
|
||||
{
|
||||
# include "checkPatchFieldTypes.H"
|
||||
|
||||
const scalarField& nuw = nu().boundaryField()[patchi];
|
||||
const scalarField& nutw = nut_.boundaryField()[patchi];
|
||||
|
||||
scalarField magFaceGradU =
|
||||
mag(U_.boundaryField()[patchi].snGrad());
|
||||
|
||||
forAll(curPatch, facei)
|
||||
{
|
||||
label faceCelli = curPatch.faceCells()[facei];
|
||||
|
||||
scalar yPlus =
|
||||
Cmu25*RASModel::y_[patchi][facei]
|
||||
*sqrt(k_[faceCelli])
|
||||
/nuw[facei];
|
||||
|
||||
// For corner cells (with two boundary or more faces),
|
||||
// epsilon and G in the near-wall cell are calculated
|
||||
// as an average
|
||||
|
||||
cellBoundaryFaceCount[faceCelli]++;
|
||||
|
||||
epsilon_[faceCelli] +=
|
||||
Cmu75*pow(k_[faceCelli], 1.5)
|
||||
/(kappa_.value()*RASModel::y_[patchi][facei]);
|
||||
|
||||
if (yPlus > yPlusLam_)
|
||||
{
|
||||
G[faceCelli] +=
|
||||
(nutw[facei] + nuw[facei])
|
||||
*magFaceGradU[facei]
|
||||
*Cmu25*sqrt(k_[faceCelli])
|
||||
/(kappa_.value()*RASModel::y_[patchi][facei]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Perform the averaging
|
||||
|
||||
forAll(patches, patchi)
|
||||
{
|
||||
const fvPatch& curPatch = patches[patchi];
|
||||
|
||||
if (isType<wallFvPatch>(curPatch))
|
||||
{
|
||||
forAll(curPatch, facei)
|
||||
{
|
||||
label faceCelli = curPatch.faceCells()[facei];
|
||||
|
||||
epsilon_[faceCelli] /= cellBoundaryFaceCount[faceCelli];
|
||||
G[faceCelli] /= cellBoundaryFaceCount[faceCelli];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -1,70 +0,0 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
|
||||
\\/ 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 2 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, write to the Free Software Foundation,
|
||||
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
|
||||
Global
|
||||
wallViscosity
|
||||
|
||||
Description
|
||||
Calculate wall viscosity from wall-functions.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
{
|
||||
scalar Cmu25 = pow(Cmu_.value(), 0.25);
|
||||
|
||||
const fvPatchList& patches = mesh_.boundary();
|
||||
|
||||
forAll(patches, patchi)
|
||||
{
|
||||
const fvPatch& curPatch = patches[patchi];
|
||||
|
||||
if (isType<wallFvPatch>(curPatch))
|
||||
{
|
||||
const scalarField& nuw = nu().boundaryField()[patchi];
|
||||
scalarField& nutw = nut_.boundaryField()[patchi];
|
||||
|
||||
forAll(curPatch, facei)
|
||||
{
|
||||
label faceCelli = curPatch.faceCells()[facei];
|
||||
|
||||
scalar yPlus =
|
||||
Cmu25*y_[patchi][facei]*sqrt(k_[faceCelli])/nuw[facei];
|
||||
|
||||
if (yPlus > yPlusLam_)
|
||||
{
|
||||
nutw[facei] =
|
||||
nuw[facei]
|
||||
*(yPlus*kappa_.value()/log(E_.value()*yPlus) - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
nutw[facei] = 0.0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
Reference in New Issue
Block a user