/*---------------------------------------------------------------------------*\ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2017 OpenFOAM Foundation ------------------------------------------------------------------------------- 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 . \*---------------------------------------------------------------------------*/ #include "XiEqModel.H" // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // namespace Foam { defineTypeNameAndDebug(XiEqModel, 0); defineRunTimeSelectionTable(XiEqModel, dictionary); } // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // Foam::XiEqModel::XiEqModel ( const dictionary& XiEqProperties, const psiuReactionThermo& thermo, const compressible::RASModel& turbulence, const volScalarField& Su ) : XiEqModelCoeffs_ ( XiEqProperties.subDict ( XiEqProperties.get("XiEqModel") + "Coeffs" ) ), thermo_(thermo), turbulence_(turbulence), Su_(Su) {} // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // Foam::XiEqModel::~XiEqModel() {} // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // bool Foam::XiEqModel::read(const dictionary& XiEqProperties) { XiEqModelCoeffs_ = XiEqProperties.optionalSubDict(type() + "Coeffs"); return true; } void Foam::XiEqModel::writeFields() const { //***HGW It is not clear why B is written here const auto* B = Su_.mesh().cfindObject("B"); if (B) { B->write(); } } Foam::tmp Foam::XiEqModel::calculateSchelkinEffect(const scalar uPrimeCoef) const { const fvMesh& mesh = Su_.mesh(); const volVectorField& U = mesh.lookupObject("U"); const volSymmTensorField& CT = mesh.lookupObject("CT"); const volScalarField& Nv = mesh.lookupObject("Nv"); const volSymmTensorField& nsv = mesh.lookupObject("nsv"); auto tN = volScalarField::New ( "tN", IOobject::NO_REGISTER, mesh, dimensionedScalar(Nv.dimensions(), Zero) ); auto& N = tN.ref(); N.primitiveFieldRef() = Nv.primitiveField()*pow(mesh.V(), 2.0/3.0); auto tns = volSymmTensorField::New ( "tns", IOobject::NO_REGISTER, mesh, dimensionedSymmTensor(nsv.dimensions(), Zero) ); auto& ns = tns.ref(); ns.primitiveFieldRef() = nsv.primitiveField()*pow(mesh.V(), 2.0/3.0); const volVectorField Uhat ( U/(mag(U) + dimensionedScalar("Usmall", U.dimensions(), 1e-4)) ); const volScalarField nr(sqrt(max(N - (Uhat & ns & Uhat), scalar(1e-4)))); const scalarField cellWidth(pow(mesh.V(), 1.0/3.0)); const scalarField upLocal(uPrimeCoef*sqrt((U & CT & U)*cellWidth)); const scalarField deltaUp(upLocal*(max(scalar(1), pow(nr, 0.5)) - 1.0)); // Re use tN N.primitiveFieldRef() = upLocal*(max(scalar(1), pow(nr, 0.5)) - 1.0); return tN; } // ************************************************************************* //