diff --git a/src/turbulenceModels/LES/LESdeltas/Make/files b/src/turbulenceModels/LES/LESdeltas/Make/files index b7d627cb48ec3127b8261575f2e3818019e0b33a..b150cc49969bf7d1649fe00d9687a869d85ae6ff 100644 --- a/src/turbulenceModels/LES/LESdeltas/Make/files +++ b/src/turbulenceModels/LES/LESdeltas/Make/files @@ -2,6 +2,6 @@ LESdelta/LESdelta.C cubeRootVolDelta/cubeRootVolDelta.C PrandtlDelta/PrandtlDelta.C smoothDelta/smoothDelta.C -maxhxhyhzDelta/maxhxhyhzDelta.C +maxDeltaxyz/maxDeltaxyz.C LIB = $(FOAM_LIBBIN)/libLESdeltas diff --git a/src/turbulenceModels/LES/LESdeltas/maxDeltaxyz/maxDeltaxyz.C b/src/turbulenceModels/LES/LESdeltas/maxDeltaxyz/maxDeltaxyz.C new file mode 100644 index 0000000000000000000000000000000000000000..f3c7166fb03d243183b360458586f4510d608d1b --- /dev/null +++ b/src/turbulenceModels/LES/LESdeltas/maxDeltaxyz/maxDeltaxyz.C @@ -0,0 +1,142 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2010-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 "maxDeltaxyz.H" +#include "addToRunTimeSelectionTable.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +defineTypeNameAndDebug(maxDeltaxyz, 0); +addToRunTimeSelectionTable(LESdelta, maxDeltaxyz, dictionary); + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + +void maxDeltaxyz::calcDelta() +{ + label nD = mesh().nGeometricD(); + + tmp<volScalarField> hmax + ( + new volScalarField + ( + IOobject + ( + "hmax", + mesh().time().timeName(), + mesh(), + IOobject::NO_READ, + IOobject::NO_WRITE + ), + mesh(), + dimensionedScalar("zrero", dimLength, 0.0) + ) + ); + + const cellList& cells = mesh().cells(); + + forAll(cells,cellI) + { + scalar deltaMaxTmp = 0.0; + const labelList& cFaces = mesh().cells()[cellI]; + const point& centrevector = mesh().cellCentres()[cellI]; + + forAll(cFaces, cFaceI) + { + label faceI = cFaces[cFaceI]; + const point& facevector = mesh().faceCentres()[faceI]; + scalar tmp = mag(facevector - centrevector); + if (tmp > deltaMaxTmp) + { + deltaMaxTmp = tmp; + } + } + hmax()[cellI] = deltaCoeff_*deltaMaxTmp; + } + + if (nD == 3) + { + delta_.internalField() = hmax(); + } + else if (nD == 2) + { + WarningIn("maxDeltaxyz::calcDelta()") + << "Case is 2D, LES is not strictly applicable\n" + << endl; + + delta_.internalField() = hmax(); + } + else + { + FatalErrorIn("maxDeltaxyz::calcDelta()") + << "Case is not 3D or 2D, LES is not applicable" + << exit(FatalError); + } +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +maxDeltaxyz::maxDeltaxyz +( + const word& name, + const fvMesh& mesh, + const dictionary& dd +) +: + LESdelta(name, mesh), + deltaCoeff_(readScalar(dd.subDict(type() + "Coeffs").lookup("deltaCoeff"))) +{ + calcDelta(); +} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void maxDeltaxyz::read(const dictionary& dd) +{ + dd.subDict(type() + "Coeffs").lookup("deltaCoeff") >> deltaCoeff_; + calcDelta(); +} + + +void maxDeltaxyz::correct() +{ + if (mesh_.changing()) + { + calcDelta(); + } +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// ************************************************************************* // diff --git a/src/turbulenceModels/LES/LESdeltas/maxDeltaxyz/maxDeltaxyz.H b/src/turbulenceModels/LES/LESdeltas/maxDeltaxyz/maxDeltaxyz.H new file mode 100644 index 0000000000000000000000000000000000000000..8ca13b4f719a39bb339194222bd0ce69f96253c0 --- /dev/null +++ b/src/turbulenceModels/LES/LESdeltas/maxDeltaxyz/maxDeltaxyz.H @@ -0,0 +1,111 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2010-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/>. + +Class + Foam::maxDeltaxyz + +Description + maxDeltaxyz takes the maximum of the three dimensions per cell: + max(hx, hy, hz). Valid for structures hexahedral cells only. + + +SourceFiles + maxDeltaxyz.C + +\*---------------------------------------------------------------------------*/ + +#ifndef maxDeltaxyzDelta_H +#define maxDeltaxyzDelta_H + +#include "LESdelta.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class maxDeltaxyz Declaration +\*---------------------------------------------------------------------------*/ + +class maxDeltaxyz +: + public LESdelta +{ + // Private data + + scalar deltaCoeff_; // + + + // Private Member Functions + + //- Disallow default bitwise copy construct and assignment + maxDeltaxyz(const maxDeltaxyz&); + void operator=(const maxDeltaxyz&); + + // Calculate the delta values + void calcDelta(); + + +public: + + //- Runtime type information + TypeName("maxDeltaxyz"); + + + // Constructors + + //- Construct from name, mesh and IOdictionary + maxDeltaxyz + ( + const word& name, + const fvMesh& mesh, + const dictionary& + ); + + + //- Destructor + virtual ~maxDeltaxyz() + {} + + + // Member Functions + + //- Read the LESdelta dictionary + virtual void read(const dictionary&); + + // Correct values + virtual void correct(); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + + +#endif + +// ************************************************************************* //