mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
adding tabulated U wall function BC and utility to generate tables
This commit is contained in:
5
applications/utilities/preProcessing/wallFunctionTable/Allwclean
Executable file
5
applications/utilities/preProcessing/wallFunctionTable/Allwclean
Executable file
@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
wclean libso tabulatedWallFunction
|
||||||
|
wclean
|
||||||
|
|
||||||
5
applications/utilities/preProcessing/wallFunctionTable/Allwmake
Executable file
5
applications/utilities/preProcessing/wallFunctionTable/Allwmake
Executable file
@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
wmake libso tabulatedWallFunction
|
||||||
|
wmake
|
||||||
|
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
wallFunctionTableApp.C
|
||||||
|
|
||||||
|
EXE = $(FOAM_APPBIN)/wallFunctionTable
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
EXE_INC = \
|
||||||
|
-I./tabulatedWallFunction/lnInclude \
|
||||||
|
-I$(LIB_SRC)/turbulenceModels/incompressible/RAS/lnInclude \
|
||||||
|
-I$(LIB_SRC)/finiteVolume/lnInclude
|
||||||
|
|
||||||
|
EXE_LIBS = \
|
||||||
|
-ltabulatedWallFunctions \
|
||||||
|
-lfiniteVolume
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
tabulatedWallFunction/tabulatedWallFunction.C
|
||||||
|
tabulatedWallFunction/newTabulatedWallFunction.C
|
||||||
|
|
||||||
|
SpaldingsLaw/SpaldingsLaw.C
|
||||||
|
general/general.C
|
||||||
|
|
||||||
|
LIB = $(FOAM_LIBBIN)/libtabulatedWallFunctions
|
||||||
@ -0,0 +1,9 @@
|
|||||||
|
|
||||||
|
EXE_INC = \
|
||||||
|
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
||||||
|
-I$(LIB_SRC)/turbulenceModels \
|
||||||
|
-I$(LIB_SRC)/turbulenceModels/incompressible/RAS/lnInclude \
|
||||||
|
-I$(LIB_SRC)/transportModels
|
||||||
|
|
||||||
|
LIB_LIBS = \
|
||||||
|
-lfiniteVolume
|
||||||
@ -0,0 +1,197 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2009-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
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "SpaldingsLaw.H"
|
||||||
|
#include "addToRunTimeSelectionTable.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
namespace tabulatedWallFunctions
|
||||||
|
{
|
||||||
|
defineTypeNameAndDebug(SpaldingsLaw, 0);
|
||||||
|
addToRunTimeSelectionTable
|
||||||
|
(
|
||||||
|
tabulatedWallFunction,
|
||||||
|
SpaldingsLaw,
|
||||||
|
dictionary
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const Foam::label Foam::tabulatedWallFunctions::SpaldingsLaw::maxIters_ = 1000;
|
||||||
|
|
||||||
|
const Foam::scalar
|
||||||
|
Foam::tabulatedWallFunctions::SpaldingsLaw::tolerance_ = 1e-4;
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
void Foam::tabulatedWallFunctions::SpaldingsLaw::invertFunction()
|
||||||
|
{
|
||||||
|
// Initialise u+ and R
|
||||||
|
scalar Re = 0.0;
|
||||||
|
scalar uPlus = 1;
|
||||||
|
|
||||||
|
// Populate the table
|
||||||
|
for (label i=0; i<invertedTable_.size(); i++)
|
||||||
|
{
|
||||||
|
if (invertedTable_.log10())
|
||||||
|
{
|
||||||
|
Re = pow(10, (i*invertedTable_.dx() + invertedTable_.x0()));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Re = i*invertedTable_.dx() + invertedTable_.x0();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Use latest available u+ estimate
|
||||||
|
if (i > 0)
|
||||||
|
{
|
||||||
|
uPlus = invertedTable_[i-1];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Newton iterations to determine u+
|
||||||
|
label iter = 0;
|
||||||
|
scalar error = GREAT;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
scalar kUPlus = min(kappa_*uPlus, 50);
|
||||||
|
scalar A =
|
||||||
|
E_*sqr(uPlus)
|
||||||
|
+ uPlus
|
||||||
|
*(exp(kUPlus) - pow3(kUPlus)/6 - 0.5*sqr(kUPlus) - kUPlus - 1);
|
||||||
|
|
||||||
|
scalar f = - Re + A/E_;
|
||||||
|
|
||||||
|
scalar df =
|
||||||
|
(
|
||||||
|
2*E_*uPlus
|
||||||
|
+ exp(kUPlus)*(kUPlus + 1)
|
||||||
|
- 2/3*pow3(kUPlus)
|
||||||
|
- 1.5*sqr(kUPlus)
|
||||||
|
- 2*kUPlus
|
||||||
|
- 1
|
||||||
|
)/E_;
|
||||||
|
|
||||||
|
scalar uPlusNew = uPlus - f/(df + ROOTVSMALL);
|
||||||
|
error = mag((uPlus - uPlusNew)/uPlusNew);
|
||||||
|
uPlus = uPlusNew;
|
||||||
|
} while (error > tolerance_ && ++iter < maxIters_);
|
||||||
|
|
||||||
|
if (iter == maxIters_)
|
||||||
|
{
|
||||||
|
WarningIn("SpaldingsLaw::invertFunction()")
|
||||||
|
<< "Newton iterations not converged:" << nl
|
||||||
|
<< " iters = " << iter << ", error = " << error << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set new values - constrain u+ >= 0
|
||||||
|
invertedTable_[i] = max(0, uPlus);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::tabulatedWallFunctions::SpaldingsLaw::SpaldingsLaw
|
||||||
|
(
|
||||||
|
const dictionary& dict,
|
||||||
|
const polyMesh& mesh
|
||||||
|
)
|
||||||
|
:
|
||||||
|
tabulatedWallFunction(dict, mesh, typeName),
|
||||||
|
kappa_(readScalar(coeffDict_.lookup("kappa"))),
|
||||||
|
E_(readScalar(coeffDict_.lookup("E")))
|
||||||
|
{
|
||||||
|
invertFunction();
|
||||||
|
|
||||||
|
if (debug)
|
||||||
|
{
|
||||||
|
writeData(Info);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::tabulatedWallFunctions::SpaldingsLaw::~SpaldingsLaw()
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::scalar Foam::tabulatedWallFunctions::SpaldingsLaw::yPlus
|
||||||
|
(
|
||||||
|
const scalar uPlus
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
scalar kUPlus = min(kappa_*uPlus, 50);
|
||||||
|
|
||||||
|
return
|
||||||
|
uPlus
|
||||||
|
+ 1/E_*(exp(kUPlus) - pow3(kUPlus)/6 - 0.5*sqr(kUPlus) - kUPlus - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::scalar Foam::tabulatedWallFunctions::SpaldingsLaw::Re
|
||||||
|
(
|
||||||
|
const scalar uPlus
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return uPlus*yPlus(uPlus);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::tabulatedWallFunctions::SpaldingsLaw::writeData(Ostream& os) const
|
||||||
|
{
|
||||||
|
if (invertedTable_.log10())
|
||||||
|
{
|
||||||
|
os << "log10(Re), y+, u+:" << endl;
|
||||||
|
forAll(invertedTable_, i)
|
||||||
|
{
|
||||||
|
scalar uPlus = invertedTable_[i];
|
||||||
|
scalar Re = ::log10(this->Re(uPlus));
|
||||||
|
scalar yPlus = this->yPlus(uPlus);
|
||||||
|
os << Re << ", " << yPlus << ", " << uPlus << endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
os << "Re, y+, u+:" << endl;
|
||||||
|
forAll(invertedTable_, i)
|
||||||
|
{
|
||||||
|
scalar uPlus = invertedTable_[i];
|
||||||
|
scalar Re = this->Re(uPlus);
|
||||||
|
scalar yPlus = this->yPlus(uPlus);
|
||||||
|
os << Re << ", " << yPlus << ", " << uPlus << endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,140 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2009-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
|
||||||
|
|
||||||
|
Class
|
||||||
|
Foam::tabulatedWallFunctions::SpaldingsLaw
|
||||||
|
|
||||||
|
Description
|
||||||
|
Computes U+ as a function of Reynolds number by inverting Spaldings law.
|
||||||
|
|
||||||
|
Example dictionary specification:
|
||||||
|
|
||||||
|
tabulatedWallFunction SpaldingsLaw;
|
||||||
|
|
||||||
|
// Output table info
|
||||||
|
tableName uPlusWallFunctionData; // Output table name
|
||||||
|
log10 yes; // Rey interpreted as log10(Rey)
|
||||||
|
dx 0.2; // Interval log10(Rey)
|
||||||
|
x0 -3; // Minimum log10(Rey)
|
||||||
|
xMax 7; // Maximum log10(Rey)
|
||||||
|
|
||||||
|
SpaldingsLawCoeffs
|
||||||
|
{
|
||||||
|
kappa 0.41; // Von Karman constant
|
||||||
|
E 9.8; // Law-of-the-wall E coefficient
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
SpaldingsLaw.C
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef SpaldingsLaw_H
|
||||||
|
#define SpaldingsLaw_H
|
||||||
|
|
||||||
|
#include "tabulatedWallFunction.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
namespace tabulatedWallFunctions
|
||||||
|
{
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class SpaldingsLaw Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
class SpaldingsLaw
|
||||||
|
:
|
||||||
|
public tabulatedWallFunction
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
|
||||||
|
// Protected data
|
||||||
|
|
||||||
|
//- Von Karman constant
|
||||||
|
scalar kappa_;
|
||||||
|
|
||||||
|
//- Law-of-the-wall E coefficient
|
||||||
|
scalar E_;
|
||||||
|
|
||||||
|
|
||||||
|
// Newton iteration solution properties
|
||||||
|
|
||||||
|
//- Maximum number of iterations
|
||||||
|
static const label maxIters_;
|
||||||
|
|
||||||
|
//- Tolerance
|
||||||
|
static const scalar tolerance_;
|
||||||
|
|
||||||
|
|
||||||
|
// Protected member functions
|
||||||
|
|
||||||
|
//- Invert the function
|
||||||
|
virtual void invertFunction();
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
//- Run-time type information
|
||||||
|
TypeName("SpaldingsLaw");
|
||||||
|
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
SpaldingsLaw(const dictionary& dict, const polyMesh& mesh);
|
||||||
|
|
||||||
|
//- Destructor
|
||||||
|
virtual ~SpaldingsLaw();
|
||||||
|
|
||||||
|
|
||||||
|
// Member Functions
|
||||||
|
|
||||||
|
// Access
|
||||||
|
|
||||||
|
//- Return y+ as a function of u+
|
||||||
|
virtual scalar yPlus(const scalar uPlus) const;
|
||||||
|
|
||||||
|
//- Return Reynolds number as a function of u+
|
||||||
|
virtual scalar Re(const scalar uPlus) const;
|
||||||
|
|
||||||
|
|
||||||
|
// I-O
|
||||||
|
|
||||||
|
//- Write to Ostream
|
||||||
|
virtual void writeData(Ostream& os) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace tabulatedWallFunctions
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,254 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2009-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
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "general.H"
|
||||||
|
#include "addToRunTimeSelectionTable.H"
|
||||||
|
#include "Tuple2.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
namespace tabulatedWallFunctions
|
||||||
|
{
|
||||||
|
defineTypeNameAndDebug(general, 0);
|
||||||
|
addToRunTimeSelectionTable
|
||||||
|
(
|
||||||
|
tabulatedWallFunction,
|
||||||
|
general,
|
||||||
|
dictionary
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
template<>
|
||||||
|
const char*
|
||||||
|
Foam::NamedEnum<Foam::tabulatedWallFunctions::general::interpolationType, 1>::
|
||||||
|
names[] =
|
||||||
|
{
|
||||||
|
"linear"
|
||||||
|
};
|
||||||
|
|
||||||
|
const
|
||||||
|
Foam::NamedEnum<Foam::tabulatedWallFunctions::general::interpolationType, 1>
|
||||||
|
Foam::tabulatedWallFunctions::general::interpolationTypeNames_;
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
void Foam::tabulatedWallFunctions::general::invertTable()
|
||||||
|
{
|
||||||
|
scalarList Rey(uPlus_.size(), 0.0);
|
||||||
|
|
||||||
|
// Calculate Reynolds number
|
||||||
|
forAll(uPlus_, i)
|
||||||
|
{
|
||||||
|
Rey[i] = yPlus_[i]*uPlus_[i];
|
||||||
|
if (invertedTable_.log10())
|
||||||
|
{
|
||||||
|
Rey[i] = ::log10(max(ROOTVSMALL, Rey[i]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Populate the U+ vs Re table
|
||||||
|
forAll(invertedTable_, i)
|
||||||
|
{
|
||||||
|
scalar Re = i*invertedTable_.dx() + invertedTable_.x0();
|
||||||
|
invertedTable_[i] = max(0, interpolate(Re, Rey, uPlus_));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::scalar Foam::tabulatedWallFunctions::general::interpolate
|
||||||
|
(
|
||||||
|
const scalar xi,
|
||||||
|
const scalarList& x,
|
||||||
|
const scalarList& fx
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
switch (interpType_)
|
||||||
|
{
|
||||||
|
case itLinear:
|
||||||
|
{
|
||||||
|
if (xi < x[0])
|
||||||
|
{
|
||||||
|
return fx[0];
|
||||||
|
}
|
||||||
|
else if (xi > x[x.size()-1])
|
||||||
|
{
|
||||||
|
return fx[x.size()-1];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
label i2 = 0;
|
||||||
|
while (x[i2] < xi)
|
||||||
|
{
|
||||||
|
i2++;
|
||||||
|
}
|
||||||
|
label i1 = i2 - 1;
|
||||||
|
|
||||||
|
return (xi - x[i1])/(x[i2] - x[i1])*(fx[i2] - fx[i1]) + fx[i1];
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"tabulatedWallFunctions::general::interpolate"
|
||||||
|
"("
|
||||||
|
"const scalar, "
|
||||||
|
"const scalarList&, "
|
||||||
|
"const scalarList&"
|
||||||
|
")"
|
||||||
|
) << "Unknown interpolation method" << nl
|
||||||
|
<< abort(FatalError);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::tabulatedWallFunctions::general::general
|
||||||
|
(
|
||||||
|
const dictionary& dict,
|
||||||
|
const polyMesh& mesh
|
||||||
|
)
|
||||||
|
:
|
||||||
|
tabulatedWallFunction(dict, mesh, typeName),
|
||||||
|
interpType_(interpolationTypeNames_[coeffDict_.lookup("interpType")]),
|
||||||
|
yPlus_(),
|
||||||
|
uPlus_(),
|
||||||
|
log10YPlus_(coeffDict_.lookup("log10YPlus")),
|
||||||
|
log10UPlus_(coeffDict_.lookup("log10UPlus"))
|
||||||
|
{
|
||||||
|
List<Tuple2<scalar, scalar> > inputTable = coeffDict_.lookup("inputTable");
|
||||||
|
if (inputTable.size() < 2)
|
||||||
|
{
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"tabulatedWallFunctions::general::general"
|
||||||
|
"("
|
||||||
|
"const dictionary&, "
|
||||||
|
"const polyMesh&"
|
||||||
|
")"
|
||||||
|
) << "Input table must have at least 2 values" << nl
|
||||||
|
<< exit(FatalError);
|
||||||
|
}
|
||||||
|
|
||||||
|
yPlus_.setSize(inputTable.size());
|
||||||
|
uPlus_.setSize(inputTable.size());
|
||||||
|
|
||||||
|
forAll(inputTable, i)
|
||||||
|
{
|
||||||
|
if (log10YPlus_)
|
||||||
|
{
|
||||||
|
yPlus_[i] = pow(10, inputTable[i].first());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
yPlus_[i] = inputTable[i].first();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (log10UPlus_)
|
||||||
|
{
|
||||||
|
uPlus_[i] = pow(10, inputTable[i].second());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
uPlus_[i] = inputTable[i].second();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
invertTable();
|
||||||
|
|
||||||
|
if (debug)
|
||||||
|
{
|
||||||
|
writeData(Info);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::tabulatedWallFunctions::general::~general()
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::scalar Foam::tabulatedWallFunctions::general::yPlus
|
||||||
|
(
|
||||||
|
const scalar uPlus
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return interpolate(uPlus, uPlus_, yPlus_);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::scalar Foam::tabulatedWallFunctions::general::Re
|
||||||
|
(
|
||||||
|
const scalar uPlus
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return uPlus*yPlus(uPlus);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
void Foam::tabulatedWallFunctions::general::writeData(Ostream& os) const
|
||||||
|
{
|
||||||
|
if (invertedTable_.log10())
|
||||||
|
{
|
||||||
|
os << "log10(Re), y+, u+:" << endl;
|
||||||
|
forAll(invertedTable_, i)
|
||||||
|
{
|
||||||
|
scalar uPlus = invertedTable_[i];
|
||||||
|
scalar Re = ::log10(this->Re(uPlus));
|
||||||
|
scalar yPlus = this->yPlus(uPlus);
|
||||||
|
os << Re << ", " << yPlus << ", " << uPlus << endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
os << "Re, y+, u+:" << endl;
|
||||||
|
forAll(invertedTable_, i)
|
||||||
|
{
|
||||||
|
scalar uPlus = invertedTable_[i];
|
||||||
|
scalar Re = this->Re(uPlus);
|
||||||
|
scalar yPlus = this->yPlus(uPlus);
|
||||||
|
os << Re << ", " << yPlus << ", " << uPlus << endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,172 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2009-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
|
||||||
|
|
||||||
|
Class
|
||||||
|
Foam::tabulatedWallFunctions::general
|
||||||
|
|
||||||
|
Description
|
||||||
|
Computes U+ as a function of Reynolds number by inverting table of
|
||||||
|
y+ vs U+
|
||||||
|
|
||||||
|
Example dictionary specification:
|
||||||
|
|
||||||
|
tabulatedWallFunction general;
|
||||||
|
|
||||||
|
// Output table info
|
||||||
|
tableName uPlusWallFunctionData; // Output table name
|
||||||
|
log10 yes; // Re interpreted as log10(Rey)
|
||||||
|
dx 0.2; // Interval log10(Rey)
|
||||||
|
x0 -3; // Minimum log10(Rey)
|
||||||
|
xMax 7; // Maximum log10(Rey)
|
||||||
|
|
||||||
|
generalCoeffs
|
||||||
|
{
|
||||||
|
interpType linear; // Interpolation method
|
||||||
|
log10YPlus true; // y+ values defined as log10(y+)
|
||||||
|
log10UPlus true; // U+ values defined as log10(y+)
|
||||||
|
inputTable
|
||||||
|
(
|
||||||
|
(yPlusValue0 uPlusValue0)
|
||||||
|
...
|
||||||
|
(yPlusValueN uPlusValueN)
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
general.C
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef general_H
|
||||||
|
#define general_H
|
||||||
|
|
||||||
|
#include "tabulatedWallFunction.H"
|
||||||
|
#include "NamedEnum.H"
|
||||||
|
#include "Switch.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
namespace tabulatedWallFunctions
|
||||||
|
{
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class general Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
class general
|
||||||
|
:
|
||||||
|
public tabulatedWallFunction
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
// Public data types
|
||||||
|
|
||||||
|
//- Enumeration listing available interpolation types
|
||||||
|
enum interpolationType
|
||||||
|
{
|
||||||
|
itLinear
|
||||||
|
};
|
||||||
|
|
||||||
|
static const NamedEnum<interpolationType, 1> interpolationTypeNames_;
|
||||||
|
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
// Protected data
|
||||||
|
|
||||||
|
//- Type of interpolation to apply when inverting the data set
|
||||||
|
interpolationType interpType_;
|
||||||
|
|
||||||
|
//- Input y+ values
|
||||||
|
List<scalar> yPlus_;
|
||||||
|
|
||||||
|
//- Input U+ values
|
||||||
|
List<scalar> uPlus_;
|
||||||
|
|
||||||
|
//- Are y+ values entered as log10(y+)?
|
||||||
|
Switch log10YPlus_;
|
||||||
|
|
||||||
|
//- Are U+ values entered as log10(U+)?
|
||||||
|
Switch log10UPlus_;
|
||||||
|
|
||||||
|
|
||||||
|
// Protected member functions
|
||||||
|
|
||||||
|
//- Invert the table
|
||||||
|
virtual void invertTable();
|
||||||
|
|
||||||
|
//- Interpolate
|
||||||
|
virtual scalar interpolate
|
||||||
|
(
|
||||||
|
const scalar xi,
|
||||||
|
const scalarList& x,
|
||||||
|
const scalarList& fx
|
||||||
|
) const;
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
//- Run-time type information
|
||||||
|
TypeName("general");
|
||||||
|
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
general(const dictionary& dict, const polyMesh& mesh);
|
||||||
|
|
||||||
|
//- Destructor
|
||||||
|
virtual ~general();
|
||||||
|
|
||||||
|
|
||||||
|
// Member Functions
|
||||||
|
|
||||||
|
// Access
|
||||||
|
|
||||||
|
//- Return y+ as a function of u+
|
||||||
|
virtual scalar yPlus(const scalar uPlus) const;
|
||||||
|
|
||||||
|
//- Return Reynolds number as a function of u+
|
||||||
|
virtual scalar Re(const scalar uPlus) const;
|
||||||
|
|
||||||
|
|
||||||
|
// I-O
|
||||||
|
|
||||||
|
//- Write to Ostream
|
||||||
|
virtual void writeData(Ostream& os) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace tabulatedWallFunctions
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,71 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2009-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
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "tabulatedWallFunction.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
namespace tabulatedWallFunctions
|
||||||
|
{
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
autoPtr<tabulatedWallFunction> tabulatedWallFunction::New
|
||||||
|
(
|
||||||
|
const dictionary& dict,
|
||||||
|
const polyMesh& mesh
|
||||||
|
)
|
||||||
|
{
|
||||||
|
word twfTypeName = dict.lookup("tabulatedWallFunction");
|
||||||
|
|
||||||
|
Info<< "Selecting tabulatedWallFunction " << twfTypeName << endl;
|
||||||
|
|
||||||
|
dictionaryConstructorTable::iterator cstrIter =
|
||||||
|
dictionaryConstructorTablePtr_->find(twfTypeName);
|
||||||
|
|
||||||
|
if (cstrIter == dictionaryConstructorTablePtr_->end())
|
||||||
|
{
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"tabulatedWallFunction::New(const dictionary&, const polyMesh&)"
|
||||||
|
) << "Unknown tabulatedWallFunction type " << twfTypeName
|
||||||
|
<< nl << nl << "Valid tabulatedWallFunction types are:" << nl
|
||||||
|
<< dictionaryConstructorTablePtr_->toc()
|
||||||
|
<< exit(FatalError);
|
||||||
|
}
|
||||||
|
|
||||||
|
return autoPtr<tabulatedWallFunction>(cstrIter()(dict, mesh));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace tabulatedWallFunctions
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,88 @@
|
|||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2009-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
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "tabulatedWallFunction.H"
|
||||||
|
#include "Time.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
namespace tabulatedWallFunctions
|
||||||
|
{
|
||||||
|
defineTypeNameAndDebug(tabulatedWallFunction, 0);
|
||||||
|
defineRunTimeSelectionTable(tabulatedWallFunction, dictionary);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::tabulatedWallFunctions::tabulatedWallFunction::tabulatedWallFunction
|
||||||
|
(
|
||||||
|
const dictionary& dict,
|
||||||
|
const polyMesh& mesh,
|
||||||
|
const word& name
|
||||||
|
)
|
||||||
|
:
|
||||||
|
dict_(dict),
|
||||||
|
mesh_(mesh),
|
||||||
|
coeffDict_(dict.subDict(name + "Coeffs")),
|
||||||
|
invertedTableName_(dict.lookup("invertedTableName")),
|
||||||
|
invertedTable_(invertedTableName_, mesh_, dict, true)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::tabulatedWallFunctions::tabulatedWallFunction::~tabulatedWallFunction()
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
void Foam::tabulatedWallFunctions::tabulatedWallFunction::write()
|
||||||
|
{
|
||||||
|
if (invertedTable_.log10())
|
||||||
|
{
|
||||||
|
invertedTable_.note() =
|
||||||
|
"U+ as a function of log10(Re) computed using " + type();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
invertedTable_.note() =
|
||||||
|
"U+ as a function of Re computed using " + type();
|
||||||
|
}
|
||||||
|
|
||||||
|
Info<< "Writing inverted table to\n " << invertedTable_.objectPath()
|
||||||
|
<< endl;
|
||||||
|
|
||||||
|
invertedTable_.write();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,147 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2009-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
|
||||||
|
|
||||||
|
Class
|
||||||
|
Foam::tabulatedWallFunctions::tabulatedWallFunction
|
||||||
|
|
||||||
|
Description
|
||||||
|
Base class for models that generate tabulated wall function data.
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
tabulatedWallFunction.C
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef tabulatedWallFunction_H
|
||||||
|
#define tabulatedWallFunction_H
|
||||||
|
|
||||||
|
#include "dictionary.H"
|
||||||
|
#include "polyMesh.H"
|
||||||
|
#include "runTimeSelectionTables.H"
|
||||||
|
#include "Switch.H"
|
||||||
|
#include "uniformInterpolationTable.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
namespace tabulatedWallFunctions
|
||||||
|
{
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class tabulatedWallFunction Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
class tabulatedWallFunction
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
|
||||||
|
// Proteced data
|
||||||
|
|
||||||
|
//- Main dictionary
|
||||||
|
const dictionary dict_;
|
||||||
|
|
||||||
|
//- Reference to the mesh database
|
||||||
|
const polyMesh& mesh_;
|
||||||
|
|
||||||
|
//- Coefficients dictionary
|
||||||
|
const dictionary coeffDict_;
|
||||||
|
|
||||||
|
//- Name of inverted table
|
||||||
|
word invertedTableName_;
|
||||||
|
|
||||||
|
//- Inverted table
|
||||||
|
uniformInterpolationTable invertedTable_;
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
//- Run-time type information
|
||||||
|
TypeName("tabulatedWallFunction");
|
||||||
|
|
||||||
|
//- Declare runtime constructor selection table
|
||||||
|
declareRunTimeSelectionTable
|
||||||
|
(
|
||||||
|
autoPtr,
|
||||||
|
tabulatedWallFunction,
|
||||||
|
dictionary,
|
||||||
|
(
|
||||||
|
const dictionary& dict,
|
||||||
|
const polyMesh& mesh
|
||||||
|
),
|
||||||
|
(dict, mesh)
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Constructor
|
||||||
|
tabulatedWallFunction
|
||||||
|
(
|
||||||
|
const dictionary& dict,
|
||||||
|
const polyMesh& mesh,
|
||||||
|
const word& name
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Destructor
|
||||||
|
virtual ~tabulatedWallFunction();
|
||||||
|
|
||||||
|
|
||||||
|
//- Selector
|
||||||
|
static autoPtr<tabulatedWallFunction> New
|
||||||
|
(
|
||||||
|
const dictionary& dict,
|
||||||
|
const polyMesh& mesh
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// Member Functions
|
||||||
|
|
||||||
|
// Access
|
||||||
|
|
||||||
|
//- Return the inverted table name
|
||||||
|
inline const word& invertedTableName() const;
|
||||||
|
|
||||||
|
//- Return the inverted table
|
||||||
|
inline const uniformInterpolationTable& invertedTable() const;
|
||||||
|
|
||||||
|
|
||||||
|
// I-O
|
||||||
|
|
||||||
|
//- Write
|
||||||
|
virtual void write();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace tabulatedWallFunctions
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#include "tabulatedWallFunctionI.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,45 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2009-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
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "tabulatedWallFunction.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
inline const Foam::word&
|
||||||
|
Foam::tabulatedWallFunctions::tabulatedWallFunction::invertedTableName() const
|
||||||
|
{
|
||||||
|
return invertedTableName_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline const Foam::uniformInterpolationTable&
|
||||||
|
Foam::tabulatedWallFunctions::tabulatedWallFunction::invertedTable() const
|
||||||
|
{
|
||||||
|
return invertedTable_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,39 @@
|
|||||||
|
/*--------------------------------*- C++ -*----------------------------------*\
|
||||||
|
| ========= | |
|
||||||
|
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||||
|
| \\ / O peration | Version: 1.6 |
|
||||||
|
| \\ / A nd | Web: www.OpenFOAM.org |
|
||||||
|
| \\/ M anipulation | |
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
FoamFile
|
||||||
|
{
|
||||||
|
version 2.0;
|
||||||
|
format ascii;
|
||||||
|
class dictionary;
|
||||||
|
location "constant";
|
||||||
|
object wallFunctionDict;
|
||||||
|
}
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
tabulatedWallFunction SpaldingsLaw;
|
||||||
|
|
||||||
|
invertedTableName uPlusWallFunctionData;
|
||||||
|
|
||||||
|
dx 0.2;
|
||||||
|
|
||||||
|
x0 -3;
|
||||||
|
|
||||||
|
xMax 7;
|
||||||
|
|
||||||
|
log10 yes;
|
||||||
|
|
||||||
|
bound yes;
|
||||||
|
|
||||||
|
SpaldingsLawCoeffs
|
||||||
|
{
|
||||||
|
kappa 0.41;
|
||||||
|
E 9.8;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,68 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2009-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
|
||||||
|
|
||||||
|
Application
|
||||||
|
wallFunctionTable
|
||||||
|
|
||||||
|
Description
|
||||||
|
Generates a table suitable for use by tabulated wall functions
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "fvCFD.H"
|
||||||
|
#include "tabulatedWallFunction.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
#include "setRootCase.H"
|
||||||
|
#include "createTime.H"
|
||||||
|
#include "createMesh.H"
|
||||||
|
|
||||||
|
IOdictionary dict
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
"wallFunctionDict",
|
||||||
|
runTime.constant(),
|
||||||
|
mesh,
|
||||||
|
IOobject::MUST_READ
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
autoPtr<tabulatedWallFunctions::tabulatedWallFunction>
|
||||||
|
twf(tabulatedWallFunctions::tabulatedWallFunction::New(dict, mesh));
|
||||||
|
|
||||||
|
// twf->writeData(Info);
|
||||||
|
|
||||||
|
twf->write();
|
||||||
|
|
||||||
|
Info << "End\n" << endl;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -509,6 +509,7 @@ meshes/preservePatchTypes/preservePatchTypes.C
|
|||||||
interpolations = interpolations
|
interpolations = interpolations
|
||||||
interpolation = $(interpolations)/interpolation
|
interpolation = $(interpolations)/interpolation
|
||||||
$(interpolations)/patchToPatchInterpolation/PatchToPatchInterpolationName.C
|
$(interpolations)/patchToPatchInterpolation/PatchToPatchInterpolationName.C
|
||||||
|
$(interpolations)/uniformInterpolationTable/uniformInterpolationTable.C
|
||||||
|
|
||||||
algorithms/MeshWave/MeshWaveName.C
|
algorithms/MeshWave/MeshWaveName.C
|
||||||
algorithms/MeshWave/FaceCellWaveName.C
|
algorithms/MeshWave/FaceCellWaveName.C
|
||||||
|
|||||||
@ -0,0 +1,225 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2009-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
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "uniformInterpolationTable.H"
|
||||||
|
#include "Time.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
defineTypeNameAndDebug(uniformInterpolationTable, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
void Foam::uniformInterpolationTable::checkTable() const
|
||||||
|
{
|
||||||
|
if (size() < 2)
|
||||||
|
{
|
||||||
|
FatalErrorIn("uniformInterpolationTable::checkTable()")
|
||||||
|
<< "Table " << name() << ": must have at least 2 values." << nl
|
||||||
|
<< "Table size = " << size() << nl
|
||||||
|
<< " min, interval width = " << x0_ << ", " << dx_ << nl
|
||||||
|
<< exit(FatalError);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::uniformInterpolationTable::uniformInterpolationTable
|
||||||
|
(
|
||||||
|
const IOobject& io,
|
||||||
|
bool readFields
|
||||||
|
)
|
||||||
|
:
|
||||||
|
IOobject(io),
|
||||||
|
List<scalar>(2, 0.0),
|
||||||
|
x0_(0.0),
|
||||||
|
dx_(1.0),
|
||||||
|
log10_(false),
|
||||||
|
bound_(false)
|
||||||
|
{
|
||||||
|
if (readFields)
|
||||||
|
{
|
||||||
|
IOdictionary dict(io);
|
||||||
|
|
||||||
|
dict.lookup("data") >> *this;
|
||||||
|
dict.lookup("x0") >> x0_;
|
||||||
|
dict.lookup("dx") >> dx_;
|
||||||
|
dict.lookup("log10") >> log10_;
|
||||||
|
dict.lookup("bound") >> bound_;
|
||||||
|
}
|
||||||
|
|
||||||
|
checkTable();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::uniformInterpolationTable::uniformInterpolationTable
|
||||||
|
(
|
||||||
|
const word& tableName,
|
||||||
|
const objectRegistry& db,
|
||||||
|
const dictionary& dict,
|
||||||
|
const bool initialiseOnly
|
||||||
|
)
|
||||||
|
:
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
tableName,
|
||||||
|
db.time().constant(),
|
||||||
|
db,
|
||||||
|
IOobject::NO_READ,
|
||||||
|
IOobject::NO_WRITE,
|
||||||
|
false // if used in BCs, could be used by multiple patches
|
||||||
|
),
|
||||||
|
List<scalar>(2, 0.0),
|
||||||
|
x0_(readScalar(dict.lookup("x0"))),
|
||||||
|
dx_(readScalar(dict.lookup("dx"))),
|
||||||
|
log10_(dict.lookup("log10")),
|
||||||
|
bound_(dict.lookup("bound"))
|
||||||
|
{
|
||||||
|
if (initialiseOnly)
|
||||||
|
{
|
||||||
|
scalar xMax = readScalar(dict.lookup("xMax"));
|
||||||
|
label nIntervals = static_cast<label>(xMax - x0_)/dx_ + 1;
|
||||||
|
setSize(nIntervals);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dict.lookup("data") >> *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
checkTable();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::uniformInterpolationTable::uniformInterpolationTable(const uniformInterpolationTable& uit)
|
||||||
|
:
|
||||||
|
IOobject(uit),
|
||||||
|
List<scalar>(uit),
|
||||||
|
x0_(uit.x0_),
|
||||||
|
dx_(uit.dx_),
|
||||||
|
log10_(uit.log10_),
|
||||||
|
bound_(uit.bound_)
|
||||||
|
{
|
||||||
|
checkTable();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::uniformInterpolationTable::~uniformInterpolationTable()
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::scalar Foam::uniformInterpolationTable::interpolate(scalar x) const
|
||||||
|
{
|
||||||
|
if (bound_)
|
||||||
|
{
|
||||||
|
x = max(min(xMax() - SMALL*dx_, x), x0_);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (x < x0_)
|
||||||
|
{
|
||||||
|
FatalErrorIn("uniformInterpolationTable::interpolate(scalar x)")
|
||||||
|
<< "Supplied value is less than minimum table value:" << nl
|
||||||
|
<< "xMin=" << x0_ << ", xMax=" << xMax() << ", x=" << x << nl
|
||||||
|
<< exit(FatalError);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (x > xMax())
|
||||||
|
{
|
||||||
|
FatalErrorIn("uniformInterpolationTable::interpolate(scalar x)")
|
||||||
|
<< "Supplied value is greater than maximum table value:" << nl
|
||||||
|
<< "xMin=" << x0_ << ", xMax=" << xMax() << ", x=" << x << nl
|
||||||
|
<< exit(FatalError);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
label i = static_cast<label>((x - x0_)/dx_);
|
||||||
|
|
||||||
|
scalar xLo = x0_ + i*dx_;
|
||||||
|
|
||||||
|
scalar fx = (x - xLo)/dx_*(operator[](i+1) - operator[](i)) + operator[](i);
|
||||||
|
|
||||||
|
if (debug)
|
||||||
|
{
|
||||||
|
Info<< "Table: " << name() << ", x=" << x
|
||||||
|
<< ", x_lo=" << xLo << ", x_hi=" << xLo + dx_
|
||||||
|
<< ", f(x_lo)=" << operator[](i) << ", f(x_hi)=" << operator[](i+1)
|
||||||
|
<< ", f(x)=" << fx << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
return fx;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::scalar Foam::uniformInterpolationTable::interpolateLog10(scalar x) const
|
||||||
|
{
|
||||||
|
if (log10_)
|
||||||
|
{
|
||||||
|
if (x > 0)
|
||||||
|
{
|
||||||
|
x = ::log10(x);
|
||||||
|
}
|
||||||
|
else if (bound_ && (x <= 0))
|
||||||
|
{
|
||||||
|
x = x0_;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FatalErrorIn
|
||||||
|
(
|
||||||
|
"uniformInterpolationTable::interpolateLog10(scalar x)"
|
||||||
|
) << "Table " << name() << nl
|
||||||
|
<< "Supplied value must be greater than 0 when in log10 mode"
|
||||||
|
<< nl << "x=" << x << nl << exit(FatalError);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return interpolate(x);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Foam::uniformInterpolationTable::write() const
|
||||||
|
{
|
||||||
|
IOdictionary dict(*this);
|
||||||
|
|
||||||
|
dict.add("data", static_cast<const List<scalar>&>(*this));
|
||||||
|
dict.add("x0", x0_);
|
||||||
|
dict.add("dx", dx_);
|
||||||
|
dict.add("log10", log10_);
|
||||||
|
dict.add("bound", bound_);
|
||||||
|
|
||||||
|
dict.regIOobject::write();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,218 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2009-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
|
||||||
|
|
||||||
|
Class
|
||||||
|
Foam::uniformInterpolationTable
|
||||||
|
|
||||||
|
Description
|
||||||
|
Table with uniform interval in independant variable, with linear
|
||||||
|
interpolation
|
||||||
|
|
||||||
|
Values specified in a dictionary:
|
||||||
|
|
||||||
|
{
|
||||||
|
x0 0; // lower limit
|
||||||
|
dx 0.2; // fixed interval
|
||||||
|
log10 true; // take log(10) when interpolating?
|
||||||
|
data // list of dependent data values
|
||||||
|
(
|
||||||
|
7870 // value at x0
|
||||||
|
7870 // value at x0 + dx
|
||||||
|
...
|
||||||
|
7870 // value at x0 + n*dx
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
uniformInterpolationTable.C
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef uniformInterpolationTable_H
|
||||||
|
#define uniformInterpolationTable_H
|
||||||
|
|
||||||
|
#include "List.H"
|
||||||
|
#include "Switch.H"
|
||||||
|
#include "IOobject.H"
|
||||||
|
#include "objectRegistry.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class uniformInterpolationTable Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
class uniformInterpolationTable
|
||||||
|
:
|
||||||
|
public IOobject,
|
||||||
|
public List<scalar>
|
||||||
|
{
|
||||||
|
// Private data
|
||||||
|
|
||||||
|
// Control parameetrs
|
||||||
|
|
||||||
|
//- Lower limit
|
||||||
|
scalar x0_;
|
||||||
|
|
||||||
|
//- Fixed interval
|
||||||
|
scalar dx_;
|
||||||
|
|
||||||
|
//- Flag to indicate that x data is given in log10(x) form
|
||||||
|
Switch log10_;
|
||||||
|
|
||||||
|
//- Bound x values
|
||||||
|
Switch bound_;
|
||||||
|
|
||||||
|
|
||||||
|
// Private Member Functions
|
||||||
|
|
||||||
|
//- Check that the table is valid
|
||||||
|
void checkTable() const;
|
||||||
|
|
||||||
|
//- Disallow default bitwise assignment
|
||||||
|
void operator=(const uniformInterpolationTable&);
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
//- Runtime type information
|
||||||
|
TypeName("uniformInterpolationTable");
|
||||||
|
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from IOobject and readFields flag. Creates a null object
|
||||||
|
// if readFields = false
|
||||||
|
uniformInterpolationTable(const IOobject& io, const bool readFields);
|
||||||
|
|
||||||
|
//- Construct from name, objectRegistry and dictionary.
|
||||||
|
// If initialiseOnly flag is set, control parameters are read from
|
||||||
|
// the dictionary, but not the data table
|
||||||
|
uniformInterpolationTable
|
||||||
|
(
|
||||||
|
const word& tableName,
|
||||||
|
const objectRegistry& db,
|
||||||
|
const dictionary& dict,
|
||||||
|
const bool initialiseOnly = false
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct as copy
|
||||||
|
uniformInterpolationTable(const uniformInterpolationTable& uit);
|
||||||
|
|
||||||
|
|
||||||
|
//- Destructor
|
||||||
|
~uniformInterpolationTable();
|
||||||
|
|
||||||
|
|
||||||
|
// Member Functions
|
||||||
|
|
||||||
|
// Access
|
||||||
|
|
||||||
|
//- Return the lower limit
|
||||||
|
inline scalar x0() const;
|
||||||
|
|
||||||
|
//- Return the fixed interval
|
||||||
|
inline scalar dx() const;
|
||||||
|
|
||||||
|
//- Return the log10(x) flag
|
||||||
|
inline const Switch& log10() const;
|
||||||
|
|
||||||
|
//- Return the bound flag
|
||||||
|
inline const Switch& bound() const;
|
||||||
|
|
||||||
|
|
||||||
|
// Edit
|
||||||
|
|
||||||
|
//- Return the lower limit
|
||||||
|
inline scalar& x0();
|
||||||
|
|
||||||
|
//- Return the fixed interval
|
||||||
|
inline scalar& dx();
|
||||||
|
|
||||||
|
//- Return the log10(x) flag
|
||||||
|
inline Switch& log10();
|
||||||
|
|
||||||
|
//- Return the bound flag
|
||||||
|
inline Switch& bound();
|
||||||
|
|
||||||
|
|
||||||
|
// Evaluation
|
||||||
|
|
||||||
|
//- Return the minimum x value
|
||||||
|
inline scalar xMin() const;
|
||||||
|
|
||||||
|
//- Return the maximum x value
|
||||||
|
inline scalar xMax() const;
|
||||||
|
|
||||||
|
//- Interpolate
|
||||||
|
scalar interpolate(scalar x) const;
|
||||||
|
|
||||||
|
//- Interpolate - takes log10 flag into account
|
||||||
|
scalar interpolateLog10(scalar x) const;
|
||||||
|
|
||||||
|
|
||||||
|
// Override ancestor size() function and [] operator
|
||||||
|
|
||||||
|
//- Return the size of the table
|
||||||
|
label size() const
|
||||||
|
{
|
||||||
|
return List<scalar>::size();
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Use List[] operator for read access
|
||||||
|
scalar operator[](label x) const
|
||||||
|
{
|
||||||
|
return List<scalar>::operator[](x);
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Use List[] operator for write access
|
||||||
|
scalar& operator[](label x)
|
||||||
|
{
|
||||||
|
return List<scalar>::operator[](x);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// I-O
|
||||||
|
|
||||||
|
//- Write
|
||||||
|
void write() const;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#include "uniformInterpolationTableI.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,87 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2009-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
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
Foam::scalar Foam::uniformInterpolationTable::x0() const
|
||||||
|
{
|
||||||
|
return x0_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::scalar Foam::uniformInterpolationTable::dx() const
|
||||||
|
{
|
||||||
|
return dx_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const Foam::Switch& Foam::uniformInterpolationTable::log10() const
|
||||||
|
{
|
||||||
|
return log10_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const Foam::Switch& Foam::uniformInterpolationTable::bound() const
|
||||||
|
{
|
||||||
|
return bound_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::scalar& Foam::uniformInterpolationTable::x0()
|
||||||
|
{
|
||||||
|
return x0_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::scalar& Foam::uniformInterpolationTable::dx()
|
||||||
|
{
|
||||||
|
return dx_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::Switch& Foam::uniformInterpolationTable::log10()
|
||||||
|
{
|
||||||
|
return log10_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::Switch& Foam::uniformInterpolationTable::bound()
|
||||||
|
{
|
||||||
|
return bound_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::scalar Foam::uniformInterpolationTable::xMin() const
|
||||||
|
{
|
||||||
|
return x0_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::scalar Foam::uniformInterpolationTable::xMax() const
|
||||||
|
{
|
||||||
|
return x0_ + (size()-1)*dx_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -26,6 +26,7 @@ $(nutWallFunctions)/nutkWallFunction/nutkWallFunctionFvPatchScalarField.C
|
|||||||
$(nutWallFunctions)/nutURoughWallFunction/nutURoughWallFunctionFvPatchScalarField.C
|
$(nutWallFunctions)/nutURoughWallFunction/nutURoughWallFunctionFvPatchScalarField.C
|
||||||
$(nutWallFunctions)/nutUSpaldingWallFunction/nutUSpaldingWallFunctionFvPatchScalarField.C
|
$(nutWallFunctions)/nutUSpaldingWallFunction/nutUSpaldingWallFunctionFvPatchScalarField.C
|
||||||
$(nutWallFunctions)/nutUWallFunction/nutUWallFunctionFvPatchScalarField.C
|
$(nutWallFunctions)/nutUWallFunction/nutUWallFunctionFvPatchScalarField.C
|
||||||
|
$(nutWallFunctions)/nutUTabulatedWallFunction/nutUTabulatedWallFunctionFvPatchScalarField.C
|
||||||
|
|
||||||
epsilonWallFunctions = $(wallFunctions)/epsilonWallFunctions
|
epsilonWallFunctions = $(wallFunctions)/epsilonWallFunctions
|
||||||
$(epsilonWallFunctions)/epsilonWallFunction/epsilonWallFunctionFvPatchScalarField.C
|
$(epsilonWallFunctions)/epsilonWallFunction/epsilonWallFunctionFvPatchScalarField.C
|
||||||
|
|||||||
@ -0,0 +1,215 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2009-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
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "nutUTabulatedWallFunctionFvPatchScalarField.H"
|
||||||
|
#include "RASModel.H"
|
||||||
|
#include "fvPatchFieldMapper.H"
|
||||||
|
#include "volFields.H"
|
||||||
|
#include "addToRunTimeSelectionTable.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
namespace incompressible
|
||||||
|
{
|
||||||
|
namespace RASModels
|
||||||
|
{
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
|
tmp<scalarField> nutUTabulatedWallFunctionFvPatchScalarField::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 magUp = mag(Uw.patchInternalField() - Uw);
|
||||||
|
const scalarField magGradU = mag(Uw.snGrad()) + ROOTVSMALL;
|
||||||
|
const scalarField& nuw = rasModel.nu().boundaryField()[patchI];
|
||||||
|
|
||||||
|
return
|
||||||
|
max
|
||||||
|
(
|
||||||
|
scalar(0),
|
||||||
|
sqr(magUp/(calcUPlus(magUp*y/nuw) + ROOTVSMALL))/magGradU - nuw
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
tmp<scalarField> nutUTabulatedWallFunctionFvPatchScalarField::calcUPlus
|
||||||
|
(
|
||||||
|
const scalarField& Rey
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
tmp<scalarField> tuPlus(new scalarField(patch().size(), 0.0));
|
||||||
|
scalarField& uPlus = tuPlus();
|
||||||
|
|
||||||
|
forAll(uPlus, faceI)
|
||||||
|
{
|
||||||
|
uPlus[faceI] = uPlusTable_.interpolateLog10(Rey[faceI]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return tuPlus;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
nutUTabulatedWallFunctionFvPatchScalarField::
|
||||||
|
nutUTabulatedWallFunctionFvPatchScalarField
|
||||||
|
(
|
||||||
|
const fvPatch& p,
|
||||||
|
const DimensionedField<scalar, volMesh>& iF
|
||||||
|
)
|
||||||
|
:
|
||||||
|
nutkWallFunctionFvPatchScalarField(p, iF),
|
||||||
|
uPlusTableName_("undefined-uPlusTableName"),
|
||||||
|
uPlusTable_
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
uPlusTableName_,
|
||||||
|
patch().boundaryMesh().mesh().time().constant(),
|
||||||
|
patch().boundaryMesh().mesh(),
|
||||||
|
IOobject::NO_READ,
|
||||||
|
IOobject::NO_WRITE,
|
||||||
|
false
|
||||||
|
),
|
||||||
|
false
|
||||||
|
)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
nutUTabulatedWallFunctionFvPatchScalarField::
|
||||||
|
nutUTabulatedWallFunctionFvPatchScalarField
|
||||||
|
(
|
||||||
|
const nutUTabulatedWallFunctionFvPatchScalarField& ptf,
|
||||||
|
const fvPatch& p,
|
||||||
|
const DimensionedField<scalar, volMesh>& iF,
|
||||||
|
const fvPatchFieldMapper& mapper
|
||||||
|
)
|
||||||
|
:
|
||||||
|
nutkWallFunctionFvPatchScalarField(ptf, p, iF, mapper),
|
||||||
|
uPlusTableName_(ptf.uPlusTableName_),
|
||||||
|
uPlusTable_(ptf.uPlusTable_)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
nutUTabulatedWallFunctionFvPatchScalarField::
|
||||||
|
nutUTabulatedWallFunctionFvPatchScalarField
|
||||||
|
(
|
||||||
|
const fvPatch& p,
|
||||||
|
const DimensionedField<scalar, volMesh>& iF,
|
||||||
|
const dictionary& dict
|
||||||
|
)
|
||||||
|
:
|
||||||
|
nutkWallFunctionFvPatchScalarField(p, iF, dict),
|
||||||
|
uPlusTableName_(dict.lookup("uPlusTable")),
|
||||||
|
uPlusTable_
|
||||||
|
(
|
||||||
|
IOobject
|
||||||
|
(
|
||||||
|
uPlusTableName_,
|
||||||
|
patch().boundaryMesh().mesh().time().constant(),
|
||||||
|
patch().boundaryMesh().mesh(),
|
||||||
|
IOobject::MUST_READ,
|
||||||
|
IOobject::NO_WRITE,
|
||||||
|
false
|
||||||
|
),
|
||||||
|
true
|
||||||
|
)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
nutUTabulatedWallFunctionFvPatchScalarField::
|
||||||
|
nutUTabulatedWallFunctionFvPatchScalarField
|
||||||
|
(
|
||||||
|
const nutUTabulatedWallFunctionFvPatchScalarField& wfpsf
|
||||||
|
)
|
||||||
|
:
|
||||||
|
nutkWallFunctionFvPatchScalarField(wfpsf),
|
||||||
|
uPlusTableName_(wfpsf.uPlusTableName_),
|
||||||
|
uPlusTable_(wfpsf.uPlusTable_)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
nutUTabulatedWallFunctionFvPatchScalarField::
|
||||||
|
nutUTabulatedWallFunctionFvPatchScalarField
|
||||||
|
(
|
||||||
|
const nutUTabulatedWallFunctionFvPatchScalarField& wfpsf,
|
||||||
|
const DimensionedField<scalar, volMesh>& iF
|
||||||
|
)
|
||||||
|
:
|
||||||
|
nutkWallFunctionFvPatchScalarField(wfpsf, iF),
|
||||||
|
uPlusTableName_(wfpsf.uPlusTableName_),
|
||||||
|
uPlusTable_(wfpsf.uPlusTable_)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
tmp<scalarField> nutUTabulatedWallFunctionFvPatchScalarField::yPlus() 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 magUp = mag(Uw.patchInternalField() - Uw);
|
||||||
|
const scalarField& nuw = rasModel.nu().boundaryField()[patchI];
|
||||||
|
const scalarField Rey = magUp*y/nuw;
|
||||||
|
|
||||||
|
return Rey/(calcUPlus(Rey) + ROOTVSMALL);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void nutUTabulatedWallFunctionFvPatchScalarField::write(Ostream& os) const
|
||||||
|
{
|
||||||
|
fvPatchField<scalar>::write(os);
|
||||||
|
// writeLocalEntries(os); // not applicable to this nut BC
|
||||||
|
os.writeKeyword("uPlusTable") << uPlusTableName_
|
||||||
|
<< token::END_STATEMENT << nl;
|
||||||
|
writeEntry("value", os);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
makePatchTypeField
|
||||||
|
(
|
||||||
|
fvPatchScalarField,
|
||||||
|
nutUTabulatedWallFunctionFvPatchScalarField
|
||||||
|
);
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace RASModels
|
||||||
|
} // End namespace incompressible
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
@ -0,0 +1,177 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2009-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
|
||||||
|
|
||||||
|
Class
|
||||||
|
Foam::incompressible::RASModels::nutUTabulatedWallFunctionFvPatchScalarField
|
||||||
|
|
||||||
|
Description
|
||||||
|
Wall function boundary condition for turbulence kinematic viscosity. Uses a
|
||||||
|
table to return the value of U+ as a function of near-wall Reynolds number.
|
||||||
|
|
||||||
|
Note: the tables are not registered since the same table object may be used
|
||||||
|
for more than one patch.
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
nutUTabulatedWallFunctionFvPatchScalarField.C
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef nutUTabulatedWallFunctionFvPatchScalarField_H
|
||||||
|
#define nutUTabulatedWallFunctionFvPatchScalarField_H
|
||||||
|
|
||||||
|
#include "nutkWallFunctionFvPatchScalarField.H"
|
||||||
|
#include "uniformInterpolationTable.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
namespace incompressible
|
||||||
|
{
|
||||||
|
namespace RASModels
|
||||||
|
{
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class nutUTabulatedWallFunctionFvPatchScalarField Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
class nutUTabulatedWallFunctionFvPatchScalarField
|
||||||
|
:
|
||||||
|
public nutkWallFunctionFvPatchScalarField
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
|
||||||
|
// Protected data
|
||||||
|
|
||||||
|
//- Name of u+ table
|
||||||
|
word uPlusTableName_;
|
||||||
|
|
||||||
|
//- U+ table
|
||||||
|
uniformInterpolationTable uPlusTable_;
|
||||||
|
|
||||||
|
|
||||||
|
// Protected member functions
|
||||||
|
|
||||||
|
//- Calculate the turbulence viscosity
|
||||||
|
virtual tmp<scalarField> calcNut() const;
|
||||||
|
|
||||||
|
//- Calculate wall u+ from table
|
||||||
|
virtual tmp<scalarField> calcUPlus(const scalarField& Rey) const;
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
//- Runtime type information
|
||||||
|
TypeName("nutTabulatedWallFunction");
|
||||||
|
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from patch and internal field
|
||||||
|
nutUTabulatedWallFunctionFvPatchScalarField
|
||||||
|
(
|
||||||
|
const fvPatch&,
|
||||||
|
const DimensionedField<scalar, volMesh>&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct from patch, internal field and dictionary
|
||||||
|
nutUTabulatedWallFunctionFvPatchScalarField
|
||||||
|
(
|
||||||
|
const fvPatch&,
|
||||||
|
const DimensionedField<scalar, volMesh>&,
|
||||||
|
const dictionary&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct by mapping given
|
||||||
|
// nutUTabulatedWallFunctionFvPatchScalarField
|
||||||
|
// onto a new patch
|
||||||
|
nutUTabulatedWallFunctionFvPatchScalarField
|
||||||
|
(
|
||||||
|
const nutUTabulatedWallFunctionFvPatchScalarField&,
|
||||||
|
const fvPatch&,
|
||||||
|
const DimensionedField<scalar, volMesh>&,
|
||||||
|
const fvPatchFieldMapper&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct as copy
|
||||||
|
nutUTabulatedWallFunctionFvPatchScalarField
|
||||||
|
(
|
||||||
|
const nutUTabulatedWallFunctionFvPatchScalarField&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct and return a clone
|
||||||
|
virtual tmp<fvPatchScalarField> clone() const
|
||||||
|
{
|
||||||
|
return tmp<fvPatchScalarField>
|
||||||
|
(
|
||||||
|
new nutUTabulatedWallFunctionFvPatchScalarField(*this)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//- Construct as copy setting internal field reference
|
||||||
|
nutUTabulatedWallFunctionFvPatchScalarField
|
||||||
|
(
|
||||||
|
const nutUTabulatedWallFunctionFvPatchScalarField&,
|
||||||
|
const DimensionedField<scalar, volMesh>&
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Construct and return a clone setting internal field reference
|
||||||
|
virtual tmp<fvPatchScalarField> clone
|
||||||
|
(
|
||||||
|
const DimensionedField<scalar, volMesh>& iF
|
||||||
|
) const
|
||||||
|
{
|
||||||
|
return tmp<fvPatchScalarField>
|
||||||
|
(
|
||||||
|
new nutUTabulatedWallFunctionFvPatchScalarField(*this, iF)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Member functions
|
||||||
|
|
||||||
|
// Evaluation functions
|
||||||
|
|
||||||
|
//- Calculate and return the yPlus at the boundary
|
||||||
|
virtual tmp<scalarField> yPlus() const;
|
||||||
|
|
||||||
|
|
||||||
|
// I-O
|
||||||
|
|
||||||
|
//- Write
|
||||||
|
virtual void write(Ostream& os) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace RASModels
|
||||||
|
} // End namespace incompressible
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
Reference in New Issue
Block a user