mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
Merge branch 'master' of ssh://noisy/home/noisy3/OpenFOAM/OpenFOAM-dev
This commit is contained in:
@ -1210,12 +1210,13 @@ int main(int argc, char *argv[])
|
|||||||
<< endl;
|
<< endl;
|
||||||
|
|
||||||
label nSide = 0;
|
label nSide = 0;
|
||||||
|
|
||||||
forAll(zoneSidePatch, zoneI)
|
forAll(zoneSidePatch, zoneI)
|
||||||
{
|
{
|
||||||
if (oneD)
|
if (oneD)
|
||||||
{
|
{
|
||||||
// Always add empty patches, one per zone.
|
// Reuse single empty patch.
|
||||||
word patchName = faceZones[zoneI].name() + "_" + "side";
|
word patchName = "oneDEmptPatch";
|
||||||
|
|
||||||
zoneSidePatch[zoneI] = addPatch<emptyPolyPatch>
|
zoneSidePatch[zoneI] = addPatch<emptyPolyPatch>
|
||||||
(
|
(
|
||||||
|
|||||||
@ -228,6 +228,8 @@ Foam::Time::Time
|
|||||||
|
|
||||||
objectRegistry(*this),
|
objectRegistry(*this),
|
||||||
|
|
||||||
|
libs_(),
|
||||||
|
|
||||||
controlDict_
|
controlDict_
|
||||||
(
|
(
|
||||||
IOobject
|
IOobject
|
||||||
@ -257,9 +259,10 @@ Foam::Time::Time
|
|||||||
graphFormat_("raw"),
|
graphFormat_("raw"),
|
||||||
runTimeModifiable_(true),
|
runTimeModifiable_(true),
|
||||||
|
|
||||||
libs_(controlDict_, "libs"),
|
|
||||||
functionObjects_(*this)
|
functionObjects_(*this)
|
||||||
{
|
{
|
||||||
|
libs_.open(controlDict_, "libs");
|
||||||
|
|
||||||
// Explicitly set read flags on objectRegistry so anything constructed
|
// Explicitly set read flags on objectRegistry so anything constructed
|
||||||
// from it reads as well (e.g. fvSolution).
|
// from it reads as well (e.g. fvSolution).
|
||||||
readOpt() = IOobject::MUST_READ_IF_MODIFIED;
|
readOpt() = IOobject::MUST_READ_IF_MODIFIED;
|
||||||
@ -313,6 +316,8 @@ Foam::Time::Time
|
|||||||
|
|
||||||
objectRegistry(*this),
|
objectRegistry(*this),
|
||||||
|
|
||||||
|
libs_(),
|
||||||
|
|
||||||
controlDict_
|
controlDict_
|
||||||
(
|
(
|
||||||
IOobject
|
IOobject
|
||||||
@ -343,9 +348,11 @@ Foam::Time::Time
|
|||||||
graphFormat_("raw"),
|
graphFormat_("raw"),
|
||||||
runTimeModifiable_(true),
|
runTimeModifiable_(true),
|
||||||
|
|
||||||
libs_(controlDict_, "libs"),
|
|
||||||
functionObjects_(*this)
|
functionObjects_(*this)
|
||||||
{
|
{
|
||||||
|
libs_.open(controlDict_, "libs");
|
||||||
|
|
||||||
|
|
||||||
// Explicitly set read flags on objectRegistry so anything constructed
|
// Explicitly set read flags on objectRegistry so anything constructed
|
||||||
// from it reads as well (e.g. fvSolution).
|
// from it reads as well (e.g. fvSolution).
|
||||||
readOpt() = IOobject::MUST_READ_IF_MODIFIED;
|
readOpt() = IOobject::MUST_READ_IF_MODIFIED;
|
||||||
@ -401,6 +408,8 @@ Foam::Time::Time
|
|||||||
|
|
||||||
objectRegistry(*this),
|
objectRegistry(*this),
|
||||||
|
|
||||||
|
libs_(),
|
||||||
|
|
||||||
controlDict_
|
controlDict_
|
||||||
(
|
(
|
||||||
IOobject
|
IOobject
|
||||||
@ -430,9 +439,10 @@ Foam::Time::Time
|
|||||||
graphFormat_("raw"),
|
graphFormat_("raw"),
|
||||||
runTimeModifiable_(true),
|
runTimeModifiable_(true),
|
||||||
|
|
||||||
libs_(controlDict_, "libs"),
|
|
||||||
functionObjects_(*this)
|
functionObjects_(*this)
|
||||||
{}
|
{
|
||||||
|
libs_.open(controlDict_, "libs");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|||||||
@ -75,6 +75,10 @@ class Time
|
|||||||
//- file-change monitor for all registered files
|
//- file-change monitor for all registered files
|
||||||
mutable autoPtr<fileMonitor> monitorPtr_;
|
mutable autoPtr<fileMonitor> monitorPtr_;
|
||||||
|
|
||||||
|
//- Any loaded dynamic libraries. Make sure to construct before
|
||||||
|
// reading controlDict.
|
||||||
|
dlLibraryTable libs_;
|
||||||
|
|
||||||
//- The controlDict
|
//- The controlDict
|
||||||
IOdictionary controlDict_;
|
IOdictionary controlDict_;
|
||||||
|
|
||||||
@ -166,9 +170,6 @@ private:
|
|||||||
//- Is runtime modification of dictionaries allowed?
|
//- Is runtime modification of dictionaries allowed?
|
||||||
Switch runTimeModifiable_;
|
Switch runTimeModifiable_;
|
||||||
|
|
||||||
//- Any loaded dynamic libraries
|
|
||||||
dlLibraryTable libs_;
|
|
||||||
|
|
||||||
//- Function objects executed at start and on ++, +=
|
//- Function objects executed at start and on ++, +=
|
||||||
mutable functionObjectList functionObjects_;
|
mutable functionObjectList functionObjects_;
|
||||||
|
|
||||||
|
|||||||
@ -131,11 +131,7 @@ bool Foam::functionEntries::codeStream::execute
|
|||||||
|
|
||||||
// see if library is loaded
|
// see if library is loaded
|
||||||
void* lib = NULL;
|
void* lib = NULL;
|
||||||
if
|
if (isA<IOdictionary>(topDict(parentDict)))
|
||||||
(
|
|
||||||
isA<IOdictionary>(topDict(parentDict))
|
|
||||||
&& parentDict.dictName() != Time::controlDictName
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
lib = libs(parentDict).findLibrary(libPath);
|
lib = libs(parentDict).findLibrary(libPath);
|
||||||
}
|
}
|
||||||
@ -150,11 +146,7 @@ bool Foam::functionEntries::codeStream::execute
|
|||||||
// avoid compilation if possible by loading an existing library
|
// avoid compilation if possible by loading an existing library
|
||||||
if (!lib)
|
if (!lib)
|
||||||
{
|
{
|
||||||
if
|
if (isA<IOdictionary>(topDict(parentDict)))
|
||||||
(
|
|
||||||
isA<IOdictionary>(topDict(parentDict))
|
|
||||||
&& parentDict.dictName() != Time::controlDictName
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
// Cached access to dl libs. Guarantees clean up upon destruction
|
// Cached access to dl libs. Guarantees clean up upon destruction
|
||||||
// of Time.
|
// of Time.
|
||||||
@ -223,11 +215,7 @@ bool Foam::functionEntries::codeStream::execute
|
|||||||
// all processes must wait for compile to finish
|
// all processes must wait for compile to finish
|
||||||
reduce(create, orOp<bool>());
|
reduce(create, orOp<bool>());
|
||||||
|
|
||||||
if
|
if (isA<IOdictionary>(topDict(parentDict)))
|
||||||
(
|
|
||||||
isA<IOdictionary>(topDict(parentDict))
|
|
||||||
&& parentDict.dictName() != Time::controlDictName
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
// Cached access to dl libs. Guarantees clean up upon destruction
|
// Cached access to dl libs. Guarantees clean up upon destruction
|
||||||
// of Time.
|
// of Time.
|
||||||
|
|||||||
@ -25,6 +25,12 @@ License
|
|||||||
|
|
||||||
#include "dlLibraryTable.H"
|
#include "dlLibraryTable.H"
|
||||||
#include "OSspecific.H"
|
#include "OSspecific.H"
|
||||||
|
#include "long.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
defineTypeNameAndDebug(Foam::dlLibraryTable, 0);
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -55,7 +61,11 @@ Foam::dlLibraryTable::~dlLibraryTable()
|
|||||||
// bug in dlclose - does not call static destructors of
|
// bug in dlclose - does not call static destructors of
|
||||||
// loaded library when actually unloading the library.
|
// loaded library when actually unloading the library.
|
||||||
// See https://bugzilla.novell.com/show_bug.cgi?id=680125 and 657627.
|
// See https://bugzilla.novell.com/show_bug.cgi?id=680125 and 657627.
|
||||||
// Seems related to using a non-system compiler!
|
if (debug)
|
||||||
|
{
|
||||||
|
Info<< "dlLibraryTable::~dlLibraryTable() : closing " << iter()
|
||||||
|
<< " with handle " << long(iter.key()) << endl;
|
||||||
|
}
|
||||||
dlClose(iter.key());
|
dlClose(iter.key());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -73,6 +83,12 @@ bool Foam::dlLibraryTable::open
|
|||||||
{
|
{
|
||||||
void* functionLibPtr = dlOpen(functionLibName);
|
void* functionLibPtr = dlOpen(functionLibName);
|
||||||
|
|
||||||
|
if (debug)
|
||||||
|
{
|
||||||
|
Info<< "dlLibraryTable::open : opened " << functionLibName
|
||||||
|
<< " resulting in handle " << long(functionLibPtr) << endl;
|
||||||
|
}
|
||||||
|
|
||||||
if (!functionLibPtr)
|
if (!functionLibPtr)
|
||||||
{
|
{
|
||||||
if (verbose)
|
if (verbose)
|
||||||
@ -107,6 +123,12 @@ bool Foam::dlLibraryTable::close
|
|||||||
void* libPtr = findLibrary(functionLibName);
|
void* libPtr = findLibrary(functionLibName);
|
||||||
if (libPtr)
|
if (libPtr)
|
||||||
{
|
{
|
||||||
|
if (debug)
|
||||||
|
{
|
||||||
|
Info<< "dlLibraryTable::close : closing " << functionLibName
|
||||||
|
<< " with handle " << long(libPtr) << endl;
|
||||||
|
}
|
||||||
|
|
||||||
erase(libPtr);
|
erase(libPtr);
|
||||||
|
|
||||||
if (!dlClose(libPtr))
|
if (!dlClose(libPtr))
|
||||||
|
|||||||
@ -63,6 +63,9 @@ class dlLibraryTable
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
// Declare name of the class and its debug switch
|
||||||
|
ClassName("dlLibraryTable");
|
||||||
|
|
||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Construct null
|
//- Construct null
|
||||||
|
|||||||
@ -137,7 +137,7 @@ Foam::pimpleControl::pimpleControl(fvMesh& mesh)
|
|||||||
{
|
{
|
||||||
Info<< " field " << residualControl_[i].name << token::TAB
|
Info<< " field " << residualControl_[i].name << token::TAB
|
||||||
<< ": relTol " << residualControl_[i].relTol
|
<< ": relTol " << residualControl_[i].relTol
|
||||||
<< ", absTol " << residualControl_[i].absTol
|
<< ", tolerance " << residualControl_[i].absTol
|
||||||
<< nl;
|
<< nl;
|
||||||
}
|
}
|
||||||
Info<< endl;
|
Info<< endl;
|
||||||
|
|||||||
@ -68,7 +68,7 @@ bool Foam::simpleControl::criteriaSatisfied()
|
|||||||
{
|
{
|
||||||
Info<< algorithmName_ << " solution statistics:" << endl;
|
Info<< algorithmName_ << " solution statistics:" << endl;
|
||||||
|
|
||||||
Info<< " " << variableName << ": abs tol = " << residual
|
Info<< " " << variableName << ": tolerance = " << residual
|
||||||
<< " (" << residualControl_[fieldI].absTol << ")"
|
<< " (" << residualControl_[fieldI].absTol << ")"
|
||||||
<< endl;
|
<< endl;
|
||||||
}
|
}
|
||||||
@ -96,7 +96,7 @@ Foam::simpleControl::simpleControl(fvMesh& mesh)
|
|||||||
forAll(residualControl_, i)
|
forAll(residualControl_, i)
|
||||||
{
|
{
|
||||||
Info<< " field " << residualControl_[i].name << token::TAB
|
Info<< " field " << residualControl_[i].name << token::TAB
|
||||||
<< " absTol " << residualControl_[i].absTol
|
<< " tolerance " << residualControl_[i].absTol
|
||||||
<< nl;
|
<< nl;
|
||||||
}
|
}
|
||||||
Info<< endl;
|
Info<< endl;
|
||||||
|
|||||||
@ -68,7 +68,7 @@ void Foam::solutionControl::read(const bool absTolOnly)
|
|||||||
if (iter().isDict())
|
if (iter().isDict())
|
||||||
{
|
{
|
||||||
const dictionary& fieldDict(iter().dict());
|
const dictionary& fieldDict(iter().dict());
|
||||||
fd.absTol = readScalar(fieldDict.lookup("absTol"));
|
fd.absTol = readScalar(fieldDict.lookup("tolerance"));
|
||||||
fd.relTol = readScalar(fieldDict.lookup("relTol"));
|
fd.relTol = readScalar(fieldDict.lookup("relTol"));
|
||||||
fd.initialResidual = 0.0;
|
fd.initialResidual = 0.0;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -367,7 +367,7 @@ void Foam::ReactingMultiphaseParcel<ParcelType>::calc
|
|||||||
d0,
|
d0,
|
||||||
U0,
|
U0,
|
||||||
rho0,
|
rho0,
|
||||||
0.5*(mass0 + mass1),
|
mass0,
|
||||||
Su,
|
Su,
|
||||||
dUTrans,
|
dUTrans,
|
||||||
Spu
|
Spu
|
||||||
@ -384,16 +384,18 @@ void Foam::ReactingMultiphaseParcel<ParcelType>::calc
|
|||||||
{
|
{
|
||||||
scalar dm = np0*dMassGas[i];
|
scalar dm = np0*dMassGas[i];
|
||||||
label gid = composition.localToGlobalCarrierId(GAS, i);
|
label gid = composition.localToGlobalCarrierId(GAS, i);
|
||||||
scalar hs = composition.carrier().Hs(gid, 0.5*(T0 + T1));
|
scalar hs = composition.carrier().Hs(gid, T0);
|
||||||
td.cloud().rhoTrans(gid)[cellI] += dm;
|
td.cloud().rhoTrans(gid)[cellI] += dm;
|
||||||
|
td.cloud().UTrans()[cellI] += dm*U0;
|
||||||
td.cloud().hsTrans()[cellI] += dm*hs;
|
td.cloud().hsTrans()[cellI] += dm*hs;
|
||||||
}
|
}
|
||||||
forAll(YLiquid_, i)
|
forAll(YLiquid_, i)
|
||||||
{
|
{
|
||||||
scalar dm = np0*dMassLiquid[i];
|
scalar dm = np0*dMassLiquid[i];
|
||||||
label gid = composition.localToGlobalCarrierId(LIQ, i);
|
label gid = composition.localToGlobalCarrierId(LIQ, i);
|
||||||
scalar hs = composition.carrier().Hs(gid, 0.5*(T0 + T1));
|
scalar hs = composition.carrier().Hs(gid, T0);
|
||||||
td.cloud().rhoTrans(gid)[cellI] += dm;
|
td.cloud().rhoTrans(gid)[cellI] += dm;
|
||||||
|
td.cloud().UTrans()[cellI] += dm*U0;
|
||||||
td.cloud().hsTrans()[cellI] += dm*hs;
|
td.cloud().hsTrans()[cellI] += dm*hs;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
@ -402,16 +404,18 @@ void Foam::ReactingMultiphaseParcel<ParcelType>::calc
|
|||||||
{
|
{
|
||||||
scalar dm = np0*dMassSolid[i];
|
scalar dm = np0*dMassSolid[i];
|
||||||
label gid = composition.localToGlobalCarrierId(SLD, i);
|
label gid = composition.localToGlobalCarrierId(SLD, i);
|
||||||
scalar hs = composition.carrier().Hs(gid, 0.5*(T0 + T1));
|
scalar hs = composition.carrier().Hs(gid, T0);
|
||||||
td.cloud().rhoTrans(gid)[cellI] += dm;
|
td.cloud().rhoTrans(gid)[cellI] += dm;
|
||||||
|
td.cloud().UTrans()[cellI] += dm*U0;
|
||||||
td.cloud().hsTrans()[cellI] += dm*hs;
|
td.cloud().hsTrans()[cellI] += dm*hs;
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
forAll(dMassSRCarrier, i)
|
forAll(dMassSRCarrier, i)
|
||||||
{
|
{
|
||||||
scalar dm = np0*dMassSRCarrier[i];
|
scalar dm = np0*dMassSRCarrier[i];
|
||||||
scalar hs = composition.carrier().Hs(i, 0.5*(T0 + T1));
|
scalar hs = composition.carrier().Hs(i, T0);
|
||||||
td.cloud().rhoTrans(i)[cellI] += dm;
|
td.cloud().rhoTrans(i)[cellI] += dm;
|
||||||
|
td.cloud().UTrans()[cellI] += dm*U0;
|
||||||
td.cloud().hsTrans()[cellI] += dm*hs;
|
td.cloud().hsTrans()[cellI] += dm*hs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -389,7 +389,7 @@ void Foam::ReactingParcel<ParcelType>::calc
|
|||||||
d0,
|
d0,
|
||||||
U0,
|
U0,
|
||||||
rho0,
|
rho0,
|
||||||
0.5*(mass0 + mass1),
|
mass0,
|
||||||
Su,
|
Su,
|
||||||
dUTrans,
|
dUTrans,
|
||||||
Spu
|
Spu
|
||||||
@ -405,9 +405,10 @@ void Foam::ReactingParcel<ParcelType>::calc
|
|||||||
{
|
{
|
||||||
scalar dm = np0*dMass[i];
|
scalar dm = np0*dMass[i];
|
||||||
label gid = composition.localToGlobalCarrierId(0, i);
|
label gid = composition.localToGlobalCarrierId(0, i);
|
||||||
scalar hs = composition.carrier().Hs(gid, 0.5*(T0 + T1));
|
scalar hs = composition.carrier().Hs(gid, T0);
|
||||||
|
|
||||||
td.cloud().rhoTrans(gid)[cellI] += dm;
|
td.cloud().rhoTrans(gid)[cellI] += dm;
|
||||||
|
td.cloud().UTrans()[cellI] += dm*U0;
|
||||||
td.cloud().hsTrans()[cellI] += dm*hs;
|
td.cloud().hsTrans()[cellI] += dm*hs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -15,7 +15,7 @@ oneEqEddy/oneEqEddy.C
|
|||||||
dynOneEqEddy/dynOneEqEddy.C
|
dynOneEqEddy/dynOneEqEddy.C
|
||||||
locDynOneEqEddy/locDynOneEqEddy.C
|
locDynOneEqEddy/locDynOneEqEddy.C
|
||||||
Smagorinsky/Smagorinsky.C
|
Smagorinsky/Smagorinsky.C
|
||||||
dynSmagorinsky/dynSmagorinsky.C
|
homogeneousDynSmagorinsky/homogeneousDynSmagorinsky.C
|
||||||
LRRDiffStress/LRRDiffStress.C
|
LRRDiffStress/LRRDiffStress.C
|
||||||
DeardorffDiffStress/DeardorffDiffStress.C
|
DeardorffDiffStress/DeardorffDiffStress.C
|
||||||
spectEddyVisc/spectEddyVisc.C
|
spectEddyVisc/spectEddyVisc.C
|
||||||
@ -23,7 +23,6 @@ dynLagrangian/dynLagrangian.C
|
|||||||
|
|
||||||
scaleSimilarity/scaleSimilarity.C
|
scaleSimilarity/scaleSimilarity.C
|
||||||
mixedSmagorinsky/mixedSmagorinsky.C
|
mixedSmagorinsky/mixedSmagorinsky.C
|
||||||
dynMixedSmagorinsky/dynMixedSmagorinsky.C
|
|
||||||
|
|
||||||
/*Smagorinsky2/Smagorinsky2.C*/
|
/*Smagorinsky2/Smagorinsky2.C*/
|
||||||
|
|
||||||
|
|||||||
@ -1,143 +0,0 @@
|
|||||||
/*---------------------------------------------------------------------------*\
|
|
||||||
========= |
|
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
||||||
\\ / O peration |
|
|
||||||
\\ / A nd | Copyright (C) 2004-2010 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 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
||||||
for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
#include "dynMixedSmagorinsky.H"
|
|
||||||
#include "addToRunTimeSelectionTable.H"
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
namespace Foam
|
|
||||||
{
|
|
||||||
namespace incompressible
|
|
||||||
{
|
|
||||||
namespace LESModels
|
|
||||||
{
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
defineTypeNameAndDebug(dynMixedSmagorinsky, 0);
|
|
||||||
addToRunTimeSelectionTable(LESModel, dynMixedSmagorinsky, dictionary);
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
dynMixedSmagorinsky::dynMixedSmagorinsky
|
|
||||||
(
|
|
||||||
const volVectorField& U,
|
|
||||||
const surfaceScalarField& phi,
|
|
||||||
transportModel& transport,
|
|
||||||
const word& turbulenceModelName,
|
|
||||||
const word& modelName
|
|
||||||
)
|
|
||||||
:
|
|
||||||
LESModel(modelName, U, phi, transport, turbulenceModelName),
|
|
||||||
scaleSimilarity(U, phi, transport),
|
|
||||||
dynSmagorinsky(U, phi, transport)
|
|
||||||
{
|
|
||||||
printCoeffs();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
tmp<volScalarField> dynMixedSmagorinsky::k() const
|
|
||||||
{
|
|
||||||
return
|
|
||||||
(
|
|
||||||
scaleSimilarity::k()
|
|
||||||
+ dynSmagorinsky::k()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
tmp<volScalarField> dynMixedSmagorinsky::epsilon() const
|
|
||||||
{
|
|
||||||
return
|
|
||||||
(
|
|
||||||
scaleSimilarity::epsilon()
|
|
||||||
+ dynSmagorinsky::epsilon()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
tmp<volSymmTensorField> dynMixedSmagorinsky::B() const
|
|
||||||
{
|
|
||||||
return
|
|
||||||
(
|
|
||||||
scaleSimilarity::B()
|
|
||||||
+ dynSmagorinsky::B()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
tmp<volSymmTensorField> dynMixedSmagorinsky::devBeff() const
|
|
||||||
{
|
|
||||||
return
|
|
||||||
(
|
|
||||||
scaleSimilarity::devBeff()
|
|
||||||
+ dynSmagorinsky::devBeff()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
tmp<fvVectorMatrix> dynMixedSmagorinsky::divDevBeff(volVectorField& U) const
|
|
||||||
{
|
|
||||||
return
|
|
||||||
(
|
|
||||||
scaleSimilarity::divDevBeff(U)
|
|
||||||
+ dynSmagorinsky::divDevBeff(U)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void dynMixedSmagorinsky::correct(const tmp<volTensorField>& gradU)
|
|
||||||
{
|
|
||||||
scaleSimilarity::correct(gradU);
|
|
||||||
dynSmagorinsky::correct(gradU());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool dynMixedSmagorinsky::read()
|
|
||||||
{
|
|
||||||
if (LESModel::read())
|
|
||||||
{
|
|
||||||
scaleSimilarity::read();
|
|
||||||
dynSmagorinsky::read();
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
} // End namespace LESModels
|
|
||||||
} // namespace incompressible
|
|
||||||
} // End namespace Foam
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
|
||||||
@ -1,150 +0,0 @@
|
|||||||
/*---------------------------------------------------------------------------*\
|
|
||||||
========= |
|
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
|
||||||
\\ / O peration |
|
|
||||||
\\ / A nd | Copyright (C) 2004-2011 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 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
|
||||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
||||||
for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Class
|
|
||||||
Foam::incompressible::LESModels::dynMixedSmagorinsky
|
|
||||||
|
|
||||||
Description
|
|
||||||
The Mixed Isochoric Smagorinsky Model for incompressible flows.
|
|
||||||
|
|
||||||
The mixed model is a linear combination of an eddy viscosity model
|
|
||||||
with a scale similarity model.
|
|
||||||
\verbatim
|
|
||||||
B = (L + C) + R = (F(v*v) - F(v)*F(v)) + R
|
|
||||||
\endverbatim
|
|
||||||
|
|
||||||
The algebraic eddy viscosity SGS model is founded on the assumption
|
|
||||||
that local equilibrium prevails, hence
|
|
||||||
\verbatim
|
|
||||||
R = 2/3*rho*k*I - 2*nuEff*dev(D)
|
|
||||||
where
|
|
||||||
k = cI*delta^2*||D||^2
|
|
||||||
nuEff = ck*sqrt(k)*delta + nu
|
|
||||||
\endverbatim
|
|
||||||
|
|
||||||
The Leonard and cross contributions are incorporated
|
|
||||||
by adding,
|
|
||||||
\verbatim
|
|
||||||
+ div(((filter(U*U) - filter(U)*filter(U)) -
|
|
||||||
0.333*I*tr(filter(U*U) - filter(U)*filter(U))))
|
|
||||||
+ div((filter(U*epsilon) - filter(U)*filter(epsilon)))
|
|
||||||
\endverbatim
|
|
||||||
to the rhs. of the equations. This version implements filtering to
|
|
||||||
evaluate the coefficients in the model.
|
|
||||||
|
|
||||||
SourceFiles
|
|
||||||
dynMixedSmagorinsky.C
|
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
#ifndef dynMixedSmagorinsky_H
|
|
||||||
#define dynMixedSmagorinsky_H
|
|
||||||
|
|
||||||
#include "dynSmagorinsky.H"
|
|
||||||
#include "scaleSimilarity.H"
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
namespace Foam
|
|
||||||
{
|
|
||||||
namespace incompressible
|
|
||||||
{
|
|
||||||
namespace LESModels
|
|
||||||
{
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
|
||||||
Class dynMixedSmagorinsky Declaration
|
|
||||||
\*---------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
class dynMixedSmagorinsky
|
|
||||||
:
|
|
||||||
public scaleSimilarity,
|
|
||||||
public dynSmagorinsky
|
|
||||||
{
|
|
||||||
// Private Member Functions
|
|
||||||
|
|
||||||
// Disallow default bitwise copy construct and assignment
|
|
||||||
dynMixedSmagorinsky(const dynMixedSmagorinsky&);
|
|
||||||
dynMixedSmagorinsky& operator=(const dynMixedSmagorinsky&);
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
//- Runtime type information
|
|
||||||
TypeName("dynMixedSmagorinsky");
|
|
||||||
|
|
||||||
// Constructors
|
|
||||||
|
|
||||||
//- Constructors from components
|
|
||||||
dynMixedSmagorinsky
|
|
||||||
(
|
|
||||||
const volVectorField& U,
|
|
||||||
const surfaceScalarField& phi,
|
|
||||||
transportModel& transport,
|
|
||||||
const word& turbulenceModelName = turbulenceModel::typeName,
|
|
||||||
const word& modelName = typeName
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
//- Destructor
|
|
||||||
~dynMixedSmagorinsky()
|
|
||||||
{}
|
|
||||||
|
|
||||||
|
|
||||||
// Member Functions
|
|
||||||
|
|
||||||
//- Return SGS kinetic energy
|
|
||||||
tmp<volScalarField> k() const;
|
|
||||||
|
|
||||||
//- Return sub-grid disipation rate
|
|
||||||
tmp<volScalarField> epsilon() const;
|
|
||||||
|
|
||||||
//- Return the sub-grid stress tensor.
|
|
||||||
tmp<volSymmTensorField> B() const;
|
|
||||||
|
|
||||||
//- Return the effective sub-grid turbulence stress tensor
|
|
||||||
// including the laminar stress
|
|
||||||
tmp<volSymmTensorField> devBeff() const;
|
|
||||||
|
|
||||||
//- Returns div(B).
|
|
||||||
// This is the additional term due to the filtering of the NSE.
|
|
||||||
tmp<fvVectorMatrix> divDevBeff(volVectorField& U) const;
|
|
||||||
|
|
||||||
//- Correct Eddy-Viscosity and related properties
|
|
||||||
void correct(const tmp<volTensorField>& gradU);
|
|
||||||
|
|
||||||
//- Read LESProperties dictionary
|
|
||||||
bool read();
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
} // End namespace LESModels
|
|
||||||
} // End namespace incompressible
|
|
||||||
} // End namespace Foam
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// ************************************************************************* //
|
|
||||||
@ -2,7 +2,7 @@
|
|||||||
========= |
|
========= |
|
||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd.
|
\\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd.
|
||||||
\\/ M anipulation |
|
\\/ M anipulation |
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
@ -23,7 +23,7 @@ License
|
|||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "dynSmagorinsky.H"
|
#include "homogeneousDynSmagorinsky.H"
|
||||||
#include "addToRunTimeSelectionTable.H"
|
#include "addToRunTimeSelectionTable.H"
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
@ -37,19 +37,25 @@ namespace LESModels
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
defineTypeNameAndDebug(dynSmagorinsky, 0);
|
defineTypeNameAndDebug(homogeneousDynSmagorinsky, 0);
|
||||||
addToRunTimeSelectionTable(LESModel, dynSmagorinsky, dictionary);
|
addToRunTimeSelectionTable(LESModel, homogeneousDynSmagorinsky, dictionary);
|
||||||
|
|
||||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
void dynSmagorinsky::updateSubGridScaleFields(const volSymmTensorField& D)
|
void homogeneousDynSmagorinsky::updateSubGridScaleFields
|
||||||
|
(
|
||||||
|
const volSymmTensorField& D
|
||||||
|
)
|
||||||
{
|
{
|
||||||
nuSgs_ = cD(D)*sqr(delta())*sqrt(magSqr(D));
|
nuSgs_ = cD(D)*sqr(delta())*sqrt(magSqr(D));
|
||||||
nuSgs_.correctBoundaryConditions();
|
nuSgs_.correctBoundaryConditions();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
dimensionedScalar dynSmagorinsky::cD(const volSymmTensorField& D) const
|
dimensionedScalar homogeneousDynSmagorinsky::cD
|
||||||
|
(
|
||||||
|
const volSymmTensorField& D
|
||||||
|
) const
|
||||||
{
|
{
|
||||||
const volSymmTensorField MM
|
const volSymmTensorField MM
|
||||||
(
|
(
|
||||||
@ -72,7 +78,10 @@ dimensionedScalar dynSmagorinsky::cD(const volSymmTensorField& D) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
dimensionedScalar dynSmagorinsky::cI(const volSymmTensorField& D) const
|
dimensionedScalar homogeneousDynSmagorinsky::cI
|
||||||
|
(
|
||||||
|
const volSymmTensorField& D
|
||||||
|
) const
|
||||||
{
|
{
|
||||||
const volScalarField mm
|
const volScalarField mm
|
||||||
(
|
(
|
||||||
@ -97,7 +106,7 @@ dimensionedScalar dynSmagorinsky::cI(const volSymmTensorField& D) const
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
dynSmagorinsky::dynSmagorinsky
|
homogeneousDynSmagorinsky::homogeneousDynSmagorinsky
|
||||||
(
|
(
|
||||||
const volVectorField& U,
|
const volVectorField& U,
|
||||||
const surfaceScalarField& phi,
|
const surfaceScalarField& phi,
|
||||||
@ -135,7 +144,7 @@ dynSmagorinsky::dynSmagorinsky
|
|||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
void dynSmagorinsky::correct(const tmp<volTensorField>& gradU)
|
void homogeneousDynSmagorinsky::correct(const tmp<volTensorField>& gradU)
|
||||||
{
|
{
|
||||||
LESModel::correct(gradU);
|
LESModel::correct(gradU);
|
||||||
|
|
||||||
@ -148,7 +157,7 @@ void dynSmagorinsky::correct(const tmp<volTensorField>& gradU)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool dynSmagorinsky::read()
|
bool homogeneousDynSmagorinsky::read()
|
||||||
{
|
{
|
||||||
if (GenEddyVisc::read())
|
if (GenEddyVisc::read())
|
||||||
{
|
{
|
||||||
@ -22,10 +22,11 @@ License
|
|||||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
Class
|
Class
|
||||||
Foam::incompressible::LESModels::dynSmagorinsky
|
Foam::incompressible::LESModels::homogeneousDynSmagorinsky
|
||||||
|
|
||||||
Description
|
Description
|
||||||
The Isochoric dynamic Smagorinsky Model for incompressible flows.
|
The Isochoric homogeneous dynamic Smagorinsky Model for
|
||||||
|
incompressible flows.
|
||||||
|
|
||||||
Algebraic eddy viscosity SGS model founded on the assumption that
|
Algebraic eddy viscosity SGS model founded on the assumption that
|
||||||
local equilibrium prevails.
|
local equilibrium prevails.
|
||||||
@ -55,15 +56,18 @@ Description
|
|||||||
m = delta^2*(4*||F(D)||^2 - F(||D||^2))
|
m = delta^2*(4*||F(D)||^2 - F(||D||^2))
|
||||||
L = dev(F(U*U) - F(U)*F(U))
|
L = dev(F(U*U) - F(U)*F(U))
|
||||||
M = delta^2*(F(||D||*dev(D)) - 4*||F(D)||*F(dev(D)))
|
M = delta^2*(F(||D||*dev(D)) - 4*||F(D)||*F(dev(D)))
|
||||||
|
|
||||||
|
The averaging <...> is over the whole domain, i.e. homogeneous turbulence
|
||||||
|
is assumed
|
||||||
\endverbatim
|
\endverbatim
|
||||||
|
|
||||||
SourceFiles
|
SourceFiles
|
||||||
dynSmagorinsky.C
|
homogeneousDynSmagorinsky.C
|
||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#ifndef dynSmagorinsky_H
|
#ifndef homogeneousDynSmagorinsky_H
|
||||||
#define dynSmagorinsky_H
|
#define homogeneousDynSmagorinsky_H
|
||||||
|
|
||||||
#include "Smagorinsky.H"
|
#include "Smagorinsky.H"
|
||||||
#include "LESfilter.H"
|
#include "LESfilter.H"
|
||||||
@ -78,10 +82,10 @@ namespace LESModels
|
|||||||
{
|
{
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
/*---------------------------------------------------------------------------*\
|
||||||
Class dynSmagorinsky Declaration
|
Class homogeneousDynSmagorinsky Declaration
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
class dynSmagorinsky
|
class homogeneousDynSmagorinsky
|
||||||
:
|
:
|
||||||
public GenEddyVisc
|
public GenEddyVisc
|
||||||
{
|
{
|
||||||
@ -103,19 +107,19 @@ class dynSmagorinsky
|
|||||||
dimensionedScalar cI(const volSymmTensorField& D) const;
|
dimensionedScalar cI(const volSymmTensorField& D) const;
|
||||||
|
|
||||||
// Disallow default bitwise copy construct and assignment
|
// Disallow default bitwise copy construct and assignment
|
||||||
dynSmagorinsky(const dynSmagorinsky&);
|
homogeneousDynSmagorinsky(const homogeneousDynSmagorinsky&);
|
||||||
dynSmagorinsky& operator=(const dynSmagorinsky&);
|
homogeneousDynSmagorinsky& operator=(const homogeneousDynSmagorinsky&);
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
//- Runtime type information
|
//- Runtime type information
|
||||||
TypeName("dynSmagorinsky");
|
TypeName("homogeneousDynSmagorinsky");
|
||||||
|
|
||||||
// Constructors
|
// Constructors
|
||||||
|
|
||||||
//- Construct from components
|
//- Construct from components
|
||||||
dynSmagorinsky
|
homogeneousDynSmagorinsky
|
||||||
(
|
(
|
||||||
const volVectorField& U,
|
const volVectorField& U,
|
||||||
const surfaceScalarField& phi,
|
const surfaceScalarField& phi,
|
||||||
@ -126,7 +130,7 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
//- Destructor
|
//- Destructor
|
||||||
virtual ~dynSmagorinsky()
|
virtual ~homogeneousDynSmagorinsky()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
|
||||||
@ -63,7 +63,7 @@ PIMPLE
|
|||||||
"(U|k|epsilon)"
|
"(U|k|epsilon)"
|
||||||
{
|
{
|
||||||
relTol 0;
|
relTol 0;
|
||||||
absTol 0.0001;
|
tolerance 0.0001;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user