ENH: Adding PDR sub-models
This commit is contained in:
@ -0,0 +1,229 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | www.openfoam.com
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
Copyright (C) 2021 OpenCFD Ltd.
|
||||
-------------------------------------------------------------------------------
|
||||
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 "normBasicXiSubXiEq.H"
|
||||
#include "addToRunTimeSelectionTable.H"
|
||||
#include "ignition.H"
|
||||
|
||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace XiEqModels
|
||||
{
|
||||
defineTypeNameAndDebug(normBasicSubGrid, 0);
|
||||
addToRunTimeSelectionTable(XiEqModel, normBasicSubGrid, dictionary);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::XiEqModels::normBasicSubGrid::normBasicSubGrid
|
||||
(
|
||||
const dictionary& XiEqProperties,
|
||||
const word& modelType,
|
||||
const psiuReactionThermo& thermo,
|
||||
const compressible::RASModel& turbulence,
|
||||
const volScalarField& Su
|
||||
)
|
||||
:
|
||||
XiEqModel(XiEqProperties, modelType,thermo, turbulence, Su),
|
||||
Cxpe1_(XiEqModelCoeffs_.get<scalar>("Cxpe1")),
|
||||
Cxpe2_(XiEqModelCoeffs_.get<scalar>("Cxpe2")),
|
||||
Cxpe3_(XiEqModelCoeffs_.get<scalar>("Cxpe3")),
|
||||
Cxpe4_(XiEqModelCoeffs_.get<scalar>("Cxpe4"))
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Destructors * * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::XiEqModels::normBasicSubGrid::~normBasicSubGrid()
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::tmp<Foam::volScalarField> Foam::XiEqModels::normBasicSubGrid::XiEq() const
|
||||
{
|
||||
const fvMesh& mesh = Su_.mesh();
|
||||
const volVectorField& U = mesh.lookupObject<volVectorField>("U");
|
||||
const volScalarField& b = mesh.lookupObject<volScalarField>("b");
|
||||
const volScalarField& Nv = mesh.lookupObject<volScalarField>("Nv");
|
||||
const volSymmTensorField& nsv =
|
||||
mesh.lookupObject<volSymmTensorField>("nsv");
|
||||
const volSymmTensorField& Bv =
|
||||
mesh.lookupObject<volSymmTensorField>("Bv");
|
||||
|
||||
volScalarField magU(mag(U));
|
||||
|
||||
const scalarField Cw = pow(mesh.V(), 2.0/3.0);
|
||||
|
||||
tmp<volScalarField> tN
|
||||
(
|
||||
new volScalarField
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"tN",
|
||||
mesh.time().constant(),
|
||||
mesh,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh,
|
||||
dimensionedScalar(Nv.dimensions(), Zero)
|
||||
)
|
||||
);
|
||||
|
||||
volScalarField& N = tN.ref();
|
||||
|
||||
N.primitiveFieldRef() = Nv.primitiveField()*Cw;
|
||||
|
||||
tmp<volSymmTensorField> tns
|
||||
(
|
||||
new volSymmTensorField
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"tns",
|
||||
mesh.time().timeName(),
|
||||
mesh,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh,
|
||||
dimensionedSymmTensor(nsv.dimensions(), Zero)
|
||||
)
|
||||
);
|
||||
volSymmTensorField& ns = tns.ref();
|
||||
|
||||
tmp<volSymmTensorField> tB
|
||||
(
|
||||
new volSymmTensorField
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"tB",
|
||||
mesh.time().timeName(),
|
||||
mesh,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh,
|
||||
dimensionedSymmTensor(Bv.dimensions(), Zero)
|
||||
)
|
||||
);
|
||||
volSymmTensorField& B = tB.ref();
|
||||
|
||||
//calculating flame normal
|
||||
|
||||
volVectorField flNormal
|
||||
(
|
||||
"flNormal",
|
||||
fvc::reconstruct(fvc::snGrad(b)*mesh.magSf())
|
||||
);
|
||||
|
||||
volScalarField mgb("mgb", mag(flNormal));
|
||||
|
||||
dimensionedScalar dMgb("dMgb", mgb.dimensions(), SMALL);
|
||||
|
||||
const volScalarField bc(b*(1.0-b));
|
||||
|
||||
dMgb += 1.0e-8*
|
||||
(bc*mgb)().weightedAverage(mesh.V())
|
||||
/(bc.weightedAverage(mesh.V()) + SMALL);
|
||||
|
||||
mgb += dMgb;
|
||||
flNormal /= mgb;
|
||||
|
||||
B.primitiveFieldRef() = Bv.primitiveField()*sqrt(Cw);
|
||||
volScalarField Ntemp("Ntemp", N);
|
||||
volScalarField Np("Np", max(N - (flNormal & ns & flNormal), scalar(1)));
|
||||
|
||||
// B_ is Bv*sqrt(Cw)
|
||||
volScalarField bl("bl",(flNormal & B & flNormal)/sqrt(Np));
|
||||
bl.min(1.0);
|
||||
|
||||
volScalarField up(sqrt((2.0/3.0)*turbulence_.k()));
|
||||
|
||||
IOdictionary combustionProperties
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"combustionProperties",
|
||||
mesh.time().constant(),
|
||||
mesh,
|
||||
IOobject::MUST_READ,
|
||||
IOobject::NO_WRITE
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
ignition ign(combustionProperties, mesh.time(), mesh);
|
||||
|
||||
dimensionedVector ignLoc("ignLoc", dimLength, ign.sites()[0].location());
|
||||
|
||||
dimensionedScalar filtRad2
|
||||
(
|
||||
"filtRad2",
|
||||
dimLength,
|
||||
6.0*ign.sites()[0].diameter()
|
||||
);
|
||||
|
||||
const volScalarField filDist(mag(mesh.C() - ignLoc));
|
||||
|
||||
const volScalarField filterMult
|
||||
(
|
||||
pos(filDist - filtRad2)*neg(bl - 0.99)*pos(N - 1e-3)
|
||||
);
|
||||
|
||||
tmp<volScalarField> XiSubEq
|
||||
(
|
||||
scalar(1)
|
||||
+ min( min(Cxpe1_, Cxpe2_*magU/up)*sqrt(bl), Cxpe3_)
|
||||
* filterMult
|
||||
);
|
||||
|
||||
return XiSubEq;
|
||||
}
|
||||
|
||||
|
||||
bool Foam::XiEqModels::normBasicSubGrid::read(const dictionary& XiEqProperties)
|
||||
{
|
||||
XiEqModel::read(XiEqProperties);
|
||||
|
||||
XiEqModelCoeffs_.readEntry("Cxpe1", Cxpe1_);
|
||||
XiEqModelCoeffs_.readEntry("Cxpe2", Cxpe2_);
|
||||
XiEqModelCoeffs_.readEntry("Cxpe3", Cxpe3_);
|
||||
XiEqModelCoeffs_.readEntry("Cxpe4", Cxpe4_);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,117 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | www.openfoam.com
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
Copyright (C) 2021 OpenCFD Ltd.
|
||||
-------------------------------------------------------------------------------
|
||||
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::XiEqModels::normBasicSubGrid
|
||||
|
||||
Description
|
||||
|
||||
|
||||
SourceFiles
|
||||
normBasicSubGrid.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef normBasicSubGrid_H
|
||||
#define normBasicSubGrid_H
|
||||
|
||||
#include "XiEqModel.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace XiEqModels
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class normBasicSubGrid Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
class normBasicSubGrid
|
||||
:
|
||||
public XiEqModel
|
||||
{
|
||||
// Private data
|
||||
|
||||
// Constants in the equilibrium Xp equation
|
||||
scalar Cxpe1_;
|
||||
scalar Cxpe2_;
|
||||
scalar Cxpe3_;
|
||||
scalar Cxpe4_;
|
||||
|
||||
|
||||
// Private Member Functions
|
||||
|
||||
//- Disallow copy construct
|
||||
normBasicSubGrid(const normBasicSubGrid&);
|
||||
|
||||
//- Disallow default bitwise assignment
|
||||
void operator=(const normBasicSubGrid&);
|
||||
|
||||
|
||||
public:
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("normBasicSubGrid");
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from components
|
||||
normBasicSubGrid
|
||||
(
|
||||
const dictionary& XiEqProperties,
|
||||
const word& modelType,
|
||||
const psiuReactionThermo& thermo,
|
||||
const compressible::RASModel& turbulence,
|
||||
const volScalarField& Su
|
||||
);
|
||||
|
||||
|
||||
//- Destructor
|
||||
virtual ~normBasicSubGrid();
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
//- Return the flame-wrinking XiEq
|
||||
virtual tmp<volScalarField> XiEq() const;
|
||||
|
||||
//- Update properties from given dictionary
|
||||
virtual bool read(const dictionary& XiEqProperties);
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace XiEqModels
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,300 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | www.openfoam.com
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
Copyright (C) 2021 OpenCFD Ltd.
|
||||
-------------------------------------------------------------------------------
|
||||
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 "normBasicXiSubG.H"
|
||||
#include "addToRunTimeSelectionTable.H"
|
||||
#include "zeroGradientFvPatchField.H"
|
||||
|
||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace XiGModels
|
||||
{
|
||||
defineTypeNameAndDebug(normBasicSubGrid, 0);
|
||||
addToRunTimeSelectionTable(XiGModel, normBasicSubGrid, dictionary);
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::XiGModels::normBasicSubGrid::normBasicSubGrid
|
||||
(
|
||||
const dictionary& XiGProperties,
|
||||
const word& modelType,
|
||||
const psiuReactionThermo& thermo,
|
||||
const compressible::RASModel& turbulence,
|
||||
const volScalarField& Su
|
||||
)
|
||||
:
|
||||
XiGModel(XiGProperties, modelType, thermo, turbulence, Su),
|
||||
// Bv_
|
||||
// (
|
||||
// IOobject
|
||||
// (
|
||||
// "Bv",
|
||||
// Su.mesh().facesInstance(),
|
||||
// Su.mesh(),
|
||||
// IOobject::MUST_READ,
|
||||
// IOobject::NO_WRITE
|
||||
// ),
|
||||
// Su.mesh()
|
||||
// ),
|
||||
k1_(XiGModelCoeffs_.get<scalar>("k1")),
|
||||
kb1_(XiGModelCoeffs_.get<scalar>("kb1")),
|
||||
kbe_(XiGModelCoeffs_.get<scalar>("kbe")),
|
||||
kbx_(XiGModelCoeffs_.get<scalar>("kbx")),
|
||||
k2_(XiGModelCoeffs_.get<scalar>("k2")),
|
||||
LOverCw_(XiGModelCoeffs_.get<scalar>("LOverCw"))
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Destructors * * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::XiGModels::normBasicSubGrid::~normBasicSubGrid()
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::tmp<Foam::volScalarField> Foam::XiGModels::normBasicSubGrid::G() const
|
||||
{
|
||||
const objectRegistry& db = Su_.db();
|
||||
const fvMesh& mesh = Su_.mesh();
|
||||
const volVectorField& U = db.lookupObject<volVectorField>("U");
|
||||
const volScalarField& b = db.lookupObject<volScalarField>("b");
|
||||
const volScalarField& Nv = db.lookupObject<volScalarField>("Nv");
|
||||
const volScalarField& St = db.lookupObject<volScalarField>("St");
|
||||
const volSymmTensorField& nsv = db.lookupObject<volSymmTensorField>("nsv");
|
||||
const volScalarField& Lobs = db.lookupObject<volScalarField>("Lobs");
|
||||
const volSymmTensorField& Bv = db.lookupObject<volSymmTensorField>("Bv");
|
||||
|
||||
const scalarField Cw(pow(Su_.mesh().V(), 2.0/3.0));
|
||||
volScalarField CwVol
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"CwVol",
|
||||
mesh.time().timeName(),
|
||||
mesh
|
||||
),
|
||||
mesh,
|
||||
dimensionSet(dimLength),
|
||||
Cw,
|
||||
zeroGradientFvPatchField<scalar>::typeName
|
||||
);
|
||||
CwVol.correctBoundaryConditions();
|
||||
|
||||
if (!db.foundObject<volScalarField>("Ep"))
|
||||
{
|
||||
FatalErrorIn
|
||||
(
|
||||
"Foam::tmp<Foam::volScalarField> Foam::XiGModels::"
|
||||
"normBasicSubGrid::G() const"
|
||||
)
|
||||
<< "Looking for Ep in db which does not exist "
|
||||
<< Foam::abort(FatalError);
|
||||
}
|
||||
|
||||
const volScalarField& Ep = db.lookupObject<volScalarField>("Ep");
|
||||
const volScalarField& Xp = db.lookupObject<volScalarField>("Xp");
|
||||
const volScalarField& Xi = db.lookupObject<volScalarField>("Xi");
|
||||
|
||||
//tmp<volScalarField> tGtot = XiGModel_->G();
|
||||
tmp<volScalarField> tGtot
|
||||
(
|
||||
new volScalarField
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"tGtot",
|
||||
Su_.mesh().time().timeName(),
|
||||
Su_.mesh(),
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE,
|
||||
false
|
||||
),
|
||||
Su_.mesh(),
|
||||
dimensionedScalar(inv(dimTime), Zero)
|
||||
|
||||
)
|
||||
);
|
||||
|
||||
volScalarField& Gtot = tGtot.ref();
|
||||
|
||||
|
||||
//calculating flame normal
|
||||
|
||||
volVectorField flNormal(fvc::reconstruct(fvc::snGrad(b)*mesh.magSf()));
|
||||
volScalarField mgb("mgb", mag(flNormal));
|
||||
dimensionedScalar dMgb("dMgb", mgb.dimensions(), SMALL);
|
||||
{
|
||||
volScalarField bc(b*(1.0-b));
|
||||
|
||||
dMgb += 1.0e-8*
|
||||
(bc*mgb)().weightedAverage(mesh.V())
|
||||
/(bc.weightedAverage(mesh.V()) + SMALL);
|
||||
}
|
||||
mgb += dMgb;
|
||||
flNormal /= mgb;
|
||||
|
||||
|
||||
tmp<volScalarField> tN
|
||||
(
|
||||
new volScalarField
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"tN",
|
||||
Su_.mesh().time().timeName(),
|
||||
Su_.mesh(),
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE,
|
||||
false
|
||||
),
|
||||
Su_.mesh(),
|
||||
dimensionedScalar(Nv.dimensions(), Zero)
|
||||
|
||||
)
|
||||
);
|
||||
|
||||
volScalarField& N = tN.ref();
|
||||
|
||||
N.primitiveFieldRef() = Nv.primitiveField()*Cw;
|
||||
|
||||
tmp<volSymmTensorField> tns
|
||||
(
|
||||
new volSymmTensorField
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"tns",
|
||||
Su_.mesh().time().timeName(),
|
||||
Su_.mesh(),
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
Su_.mesh(),
|
||||
dimensionedSymmTensor(nsv.dimensions(), Zero)
|
||||
)
|
||||
);
|
||||
|
||||
volSymmTensorField& ns = tns.ref();
|
||||
|
||||
ns.primitiveFieldRef() = nsv.primitiveField()*Cw;
|
||||
|
||||
tmp<volSymmTensorField> tB
|
||||
(
|
||||
new volSymmTensorField
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"tB",
|
||||
Su_.mesh().time().timeName(),
|
||||
Su_.mesh(),
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
Su_.mesh(),
|
||||
dimensionedSymmTensor(Bv.dimensions(), Zero)
|
||||
)
|
||||
);
|
||||
|
||||
volSymmTensorField& B = tB.ref();
|
||||
|
||||
B.primitiveFieldRef() = Bv.primitiveField()*sqrt(Cw);
|
||||
|
||||
volScalarField Np(max(N - (flNormal & ns & flNormal), scalar(1)));
|
||||
|
||||
// B_ is Bv*sqrt(Cw)
|
||||
volScalarField bl("bl",(flNormal & B & flNormal)/sqrt(Np));
|
||||
bl.min(1.0);
|
||||
|
||||
volScalarField flSpeed("flSpeed", ((U & flNormal) + St)*b/(b+SMALL)) ;
|
||||
|
||||
volScalarField up("up", sqrt((2.0/3.0)*turbulence_.k()));
|
||||
|
||||
const volScalarField Gtot1
|
||||
(
|
||||
"Gtot1",
|
||||
(
|
||||
k1_ + kb1_*min(pow(bl, kbe_), kbx_)
|
||||
)*mag(flSpeed)/(max(Lobs, LOverCw_*CwVol))
|
||||
);
|
||||
|
||||
const volScalarField Gtot2("Gtot2", k2_*Ep*Su_*Xi/(Xp - 0.999));
|
||||
|
||||
const volScalarField value(pos(N - 1.e-3)*neg(bl - 0.99));
|
||||
|
||||
Gtot = value*Gtot1+(1.0 - value)*Gtot2;
|
||||
|
||||
|
||||
//if (Xi.mesh().time().outputTime())
|
||||
{
|
||||
//Gtot.write();
|
||||
//bl.write();
|
||||
//Lobs.write();
|
||||
//flSpeed.write();
|
||||
//N.write();
|
||||
}
|
||||
|
||||
return tGtot;
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::volScalarField> Foam::XiGModels::normBasicSubGrid::Db() const
|
||||
{
|
||||
// Not used //
|
||||
const objectRegistry& db = Su_.db();
|
||||
const volScalarField& Xi = db.lookupObject<volScalarField>("Xi");
|
||||
const volScalarField& rho = db.lookupObject<volScalarField>("rho");
|
||||
const volScalarField& mgb = db.lookupObject<volScalarField>("mgb");
|
||||
const volScalarField& Lobs = db.lookupObject<volScalarField>("Lobs");
|
||||
const volScalarField& Db = db.lookupObject<volScalarField>("Db");
|
||||
|
||||
//return turbulence_.muEff()
|
||||
return Db
|
||||
+ rho*Su_*(Xi - 1.0)*mgb*(0.5*Lobs)*Lobs/(mgb*Lobs + 1.0);
|
||||
}
|
||||
|
||||
|
||||
bool Foam::XiGModels::normBasicSubGrid::read(const dictionary& XiGProperties)
|
||||
{
|
||||
XiGModel::read(XiGProperties);
|
||||
|
||||
XiGModelCoeffs_.readEntry("k1", k1_);
|
||||
XiGModelCoeffs_.readEntry("kb1", kb1_);
|
||||
XiGModelCoeffs_.readEntry("kbe", kbe_);
|
||||
XiGModelCoeffs_.readEntry("kbx", kbx_);
|
||||
XiGModelCoeffs_.readEntry("k2", k2_);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,132 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | www.openfoam.com
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
Copyright (C) 2021 OpenCFD Ltd.
|
||||
-------------------------------------------------------------------------------
|
||||
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::XiGModel::normBasicSubGrid
|
||||
|
||||
Description
|
||||
|
||||
|
||||
|
||||
SourceFiles
|
||||
normBasicSubGrid.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef normBasicSubGrid_H
|
||||
#define normBasicSubGrid_H
|
||||
|
||||
#include "XiGModel.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace XiGModels
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class normBasicSubGrid Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
class normBasicSubGrid
|
||||
:
|
||||
public XiGModel
|
||||
{
|
||||
// Private data
|
||||
|
||||
//- Sub-grid generation rate coefficient
|
||||
scalar k1_;
|
||||
|
||||
//- Sub-grid generation rate coefficient - * sqrt(b)
|
||||
scalar kb1_;
|
||||
|
||||
//- Sub-grid generation rate coefficient - * b
|
||||
scalar kbe_;
|
||||
|
||||
//- Sub-grid generation rate upper limit coefficient - * b
|
||||
scalar kbx_;
|
||||
|
||||
//- Sub-grid generation rate coefficient
|
||||
scalar k2_;
|
||||
|
||||
//- Maximum Lobs/CellWidth
|
||||
scalar LOverCw_;
|
||||
|
||||
// Private Member Functions
|
||||
|
||||
//- Disallow copy construct
|
||||
normBasicSubGrid(const normBasicSubGrid&);
|
||||
|
||||
//- Disallow default bitwise assignment
|
||||
void operator=(const normBasicSubGrid&);
|
||||
|
||||
|
||||
public:
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("normBasicSubGridG");
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from components
|
||||
normBasicSubGrid
|
||||
(
|
||||
const dictionary& XiGProperties,
|
||||
const word& modelType,
|
||||
const psiuReactionThermo& thermo,
|
||||
const compressible::RASModel& turbulence,
|
||||
const volScalarField& Su
|
||||
);
|
||||
|
||||
|
||||
//- Destructor
|
||||
virtual ~normBasicSubGrid();
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
//- Return the flame-wrinking generation rate
|
||||
virtual tmp<volScalarField> G() const;
|
||||
|
||||
//- Return the flame diffusivity
|
||||
virtual tmp<volScalarField> Db() const;
|
||||
|
||||
//- Update properties from given dictionary
|
||||
virtual bool read(const dictionary& XiGProperties);
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace XiGModels
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,319 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | www.openfoam.com
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
Copyright (C) 2021 OpenCFD Ltd.
|
||||
-------------------------------------------------------------------------------
|
||||
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 "basicSch.H"
|
||||
#include "addToRunTimeSelectionTable.H"
|
||||
|
||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace PDRDragModels
|
||||
{
|
||||
defineTypeNameAndDebug(basicSch, 0);
|
||||
addToRunTimeSelectionTable(PDRDragModel, basicSch, dictionary);
|
||||
}
|
||||
}
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::PDRDragModels::basicSch::basicSch
|
||||
(
|
||||
const dictionary& PDRProperties,
|
||||
const compressible::RASModel& turbulence,
|
||||
const volScalarField& rho,
|
||||
const volVectorField& U,
|
||||
const surfaceScalarField& phi
|
||||
)
|
||||
:
|
||||
PDRDragModel(PDRProperties,turbulence, rho, U, phi),
|
||||
Csu("Csu", dimless, PDRDragModelCoeffs_),
|
||||
Csk("Csk", dimless, PDRDragModelCoeffs_),
|
||||
Aw_
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"Aw",
|
||||
U_.mesh().facesInstance(),
|
||||
U_.mesh(),
|
||||
IOobject::MUST_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
U_.mesh()
|
||||
),
|
||||
|
||||
CR_
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"CR",
|
||||
U_.mesh().facesInstance(),
|
||||
U_.mesh(),
|
||||
IOobject::MUST_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
U_.mesh()
|
||||
),
|
||||
nrCoef_(PDRDragModelCoeffs_.get<scalar>("nrCoef")),
|
||||
nrExp2_(PDRDragModelCoeffs_.get<scalar>("nrExp2")),
|
||||
lCoef_(PDRDragModelCoeffs_.get<scalar>("lCoef")),
|
||||
maxSchFac_(PDRDragModelCoeffs_.get<scalar>("maxSchFac")),
|
||||
subGridSchelkin_(PDRDragModelCoeffs_.get<bool>("subGridSchelkin"))
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Destructors * * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::PDRDragModels::basicSch::~basicSch()
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::tmp<Foam::volSymmTensorField> Foam::PDRDragModels::basicSch::Dcu() const
|
||||
{
|
||||
tmp<volSymmTensorField> tDragDcu
|
||||
(
|
||||
new volSymmTensorField
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"tDragDcu",
|
||||
U_.mesh().time().constant(),
|
||||
U_.mesh(),
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
U_.mesh(),
|
||||
dimensionedSymmTensor(dimMass/dimTime/dimVolume, Zero)
|
||||
|
||||
)
|
||||
);
|
||||
|
||||
volSymmTensorField& DragDcu = tDragDcu.ref();
|
||||
|
||||
if (on_)
|
||||
{
|
||||
const volScalarField& betav =
|
||||
U_.db().lookupObject<volScalarField>("betav");
|
||||
|
||||
DragDcu =
|
||||
(0.5*rho_)*CR_*mag(U_) + (Csu*I)*betav*turbulence_.muEff()*sqr(Aw_);
|
||||
}
|
||||
|
||||
return tDragDcu;
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::volScalarField> Foam::PDRDragModels::basicSch::Gk() const
|
||||
{
|
||||
tmp<volScalarField> tGk
|
||||
(
|
||||
new volScalarField
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"tGk",
|
||||
U_.mesh().time().constant(),
|
||||
U_.mesh(),
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
U_.mesh(),
|
||||
dimensionedScalar(dimMass/dimLength/pow3(dimTime), Zero)
|
||||
|
||||
)
|
||||
);
|
||||
|
||||
volScalarField& Gk = tGk.ref();
|
||||
|
||||
if (on_)
|
||||
{
|
||||
const volScalarField& betav =
|
||||
U_.db().lookupObject<volScalarField>("betav");
|
||||
|
||||
const volSymmTensorField& CT =
|
||||
U_.db().lookupObject<volSymmTensorField>("CT");
|
||||
|
||||
Gk =
|
||||
(0.5*rho_)*mag(U_)*(U_ & CT & U_)
|
||||
+ Csk*betav*turbulence_.muEff()*sqr(Aw_)*magSqr(U_);
|
||||
|
||||
if (subGridSchelkin_)
|
||||
{
|
||||
Gk *= schFac();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return tGk;
|
||||
}
|
||||
|
||||
Foam::tmp<Foam::volScalarField> Foam::PDRDragModels::basicSch::schFac() const
|
||||
{
|
||||
const volScalarField& Su_ = U_.db().lookupObject<volScalarField>("Su");
|
||||
const volScalarField& rhou_ = U_.db().lookupObject<volScalarField>("rhou");
|
||||
const volScalarField& muu_ = U_.db().lookupObject<volScalarField>("muu");
|
||||
|
||||
tmp<volScalarField> tfac
|
||||
(
|
||||
new volScalarField
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"tfac",
|
||||
U_.mesh().time().constant(),
|
||||
U_.mesh(),
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
U_.mesh(),
|
||||
dimensionedScalar(dimless, Zero)
|
||||
|
||||
)
|
||||
);
|
||||
|
||||
volScalarField& schFac = tfac.ref();
|
||||
|
||||
const volScalarField& k = turbulence_.k();
|
||||
const volScalarField& epsilon = turbulence_.epsilon();
|
||||
|
||||
const volScalarField up(sqrt((2.0/3.0)*k));
|
||||
const volScalarField l(lCoef_*sqrt(3.0/2.0)*up*k/epsilon);
|
||||
|
||||
volScalarField Rs(Su_*l*rhou_/muu_);
|
||||
|
||||
if (subGridSchelkin_)
|
||||
{
|
||||
schFac = max
|
||||
(
|
||||
1.0,
|
||||
min
|
||||
(
|
||||
maxSchFac_,
|
||||
pow(Rs, 2.0 * SchelkinExponent(nrCoef_, nrExp2_, Su_))
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
return tfac;
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::volScalarField> Foam::PDRDragModels::basicSch::SchelkinExponent
|
||||
(
|
||||
const scalar nrCoef,
|
||||
const scalar nrExp,
|
||||
const volScalarField& Su
|
||||
) const
|
||||
{
|
||||
const fvMesh& mesh = Su.mesh();
|
||||
|
||||
const volVectorField& U = mesh.lookupObject<volVectorField>("U");
|
||||
|
||||
const volScalarField& Nv = mesh.lookupObject<volScalarField>("Nv");
|
||||
const volSymmTensorField& nsv =
|
||||
mesh.lookupObject<volSymmTensorField>("nsv");
|
||||
|
||||
tmp<volScalarField> tN
|
||||
(
|
||||
new volScalarField
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"tN",
|
||||
mesh.time().timeName(),
|
||||
mesh,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE,
|
||||
false
|
||||
),
|
||||
mesh,
|
||||
dimensionedScalar(Nv.dimensions(), Zero)
|
||||
|
||||
)
|
||||
);
|
||||
|
||||
volScalarField& N = tN.ref();
|
||||
|
||||
N.primitiveFieldRef() = Nv.primitiveField()*pow(mesh.V(), 2.0/3.0);
|
||||
|
||||
tmp<volSymmTensorField> tns
|
||||
(
|
||||
new volSymmTensorField
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"tns",
|
||||
mesh.time().timeName(),
|
||||
mesh,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh,
|
||||
dimensionedSymmTensor(nsv.dimensions(), Zero)
|
||||
)
|
||||
);
|
||||
|
||||
volSymmTensorField& 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(1.0))));
|
||||
|
||||
//Re use tN
|
||||
N.primitiveFieldRef() =
|
||||
nrCoef*((scalar(1.0) - pow(nrExp, nr))/(1.0 - nrExp) - scalar(1.0));
|
||||
|
||||
return tN;
|
||||
|
||||
}
|
||||
|
||||
|
||||
bool Foam::PDRDragModels::basicSch::read(const dictionary& PDRProperties)
|
||||
{
|
||||
PDRDragModel::read(PDRProperties);
|
||||
|
||||
PDRDragModelCoeffs_.readEntry("Csu", Csu.value());
|
||||
PDRDragModelCoeffs_.readEntry("Csk", Csk.value());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void Foam::PDRDragModels::basicSch::writeFields() const
|
||||
{
|
||||
Aw_.write();
|
||||
CR_.write();
|
||||
}
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,142 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | www.openfoam.com
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
Copyright (C) 2021 OpenCFD Ltd.
|
||||
-------------------------------------------------------------------------------
|
||||
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::PDRDragModels::basicSch
|
||||
|
||||
Description
|
||||
|
||||
|
||||
SourceFiles
|
||||
basicSch.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef basicSch_H
|
||||
#define basicSch_H
|
||||
|
||||
#include "PDRDragModel.H"
|
||||
#include "XiEqModel.H"
|
||||
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace PDRDragModels
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class basicSch Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
class basicSch
|
||||
:
|
||||
public PDRDragModel
|
||||
{
|
||||
// Private data
|
||||
|
||||
dimensionedScalar Csu;
|
||||
dimensionedScalar Csk;
|
||||
volScalarField Aw_;
|
||||
volSymmTensorField CR_;
|
||||
|
||||
//- Schelkin effect Model constants
|
||||
const scalar nrCoef_;
|
||||
const scalar nrExp2_;
|
||||
const scalar lCoef_;
|
||||
const scalar maxSchFac_;
|
||||
|
||||
//- Use sub-grid Schelkin effect
|
||||
bool subGridSchelkin_;
|
||||
|
||||
|
||||
// Private Member Functions
|
||||
|
||||
//- Disallow copy construct
|
||||
basicSch(const basicSch&);
|
||||
|
||||
//- Disallow default bitwise assignment
|
||||
void operator=(const basicSch&);
|
||||
|
||||
|
||||
public:
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("basicSch");
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from components
|
||||
basicSch
|
||||
(
|
||||
const dictionary& PDRProperties,
|
||||
const compressible::RASModel& turbulence,
|
||||
const volScalarField& rho,
|
||||
const volVectorField& U,
|
||||
const surfaceScalarField& phi
|
||||
);
|
||||
|
||||
|
||||
//- Destructor
|
||||
virtual ~basicSch();
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
//- Return the momentum drag coefficient
|
||||
virtual tmp<volSymmTensorField> Dcu() const;
|
||||
|
||||
//- Return the momentum drag turbulence generation rate
|
||||
virtual tmp<volScalarField> Gk() const;
|
||||
|
||||
//- Update properties from given dictionary
|
||||
virtual bool read(const dictionary& PDRProperties);
|
||||
|
||||
//- Write fields
|
||||
void writeFields() const;
|
||||
|
||||
//- Return the schelkin factor for drag turbulence generation rate
|
||||
tmp<volScalarField> schFac() const;
|
||||
|
||||
//- Return the sub-grid Schelkin effect exponent
|
||||
tmp<volScalarField> SchelkinExponent
|
||||
(
|
||||
const scalar,
|
||||
const scalar,
|
||||
const volScalarField&
|
||||
) const;
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace PDRDragModels
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,261 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | www.openfoam.com
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
Copyright (C) 2021 OpenCFD Ltd.
|
||||
-------------------------------------------------------------------------------
|
||||
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 "BLMgMaXiEq.H"
|
||||
#include "addToRunTimeSelectionTable.H"
|
||||
|
||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace XiEqModels
|
||||
{
|
||||
defineTypeNameAndDebug(BLMgMaXiEq, 0);
|
||||
addToRunTimeSelectionTable(XiEqModel, BLMgMaXiEq, dictionary);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::XiEqModels::BLMgMaXiEq::BLMgMaXiEq
|
||||
(
|
||||
const dictionary& XiEqProperties,
|
||||
const word& modelType,
|
||||
const psiuReactionThermo& thermo,
|
||||
const compressible::RASModel& turbulence,
|
||||
const volScalarField& Su
|
||||
)
|
||||
:
|
||||
XiEqModel(XiEqProperties, modelType, thermo, turbulence, Su),
|
||||
kaCoef_(XiEqModelCoeffs_.get<scalar>("kaCoef")),
|
||||
lowK0_(XiEqModelCoeffs_.get<scalar>("lowK0")),
|
||||
lowKg_(XiEqModelCoeffs_.get<scalar>("lowKg")),
|
||||
XiEqCoef_(XiEqModelCoeffs_.get<scalar>("XiEqCoef")),
|
||||
alphaCoefP_(XiEqModelCoeffs_.get<scalar>("alphaCoefP")),
|
||||
betaCoefP_(XiEqModelCoeffs_.get<scalar>("betaCoefP")),
|
||||
alphaCoefN_(XiEqModelCoeffs_.get<scalar>("alphaCoefN")),
|
||||
betaCoefN_(XiEqModelCoeffs_.get<scalar>("betaCoefN")),
|
||||
maLim_(XiEqModelCoeffs_.get<scalar>("maLim")),
|
||||
maLim1_(XiEqModelCoeffs_.get<scalar>("maLim1")),
|
||||
quenchCoef_(XiEqModelCoeffs_.get<scalar>("quenchCoef")),
|
||||
quenchExp_(XiEqModelCoeffs_.get<scalar>("quenchExp")),
|
||||
quenchM_(XiEqModelCoeffs_.get<scalar>("quenchM")),
|
||||
quenchRate1_(XiEqModelCoeffs_.get<scalar>("quenchRate1")),
|
||||
quenchRate2_(XiEqModelCoeffs_.get<scalar>("quenchRate2")),
|
||||
lCoef_(XiEqModelCoeffs_.get<scalar>("lCoef")),
|
||||
SuMin_(0.01*Su.average()),
|
||||
uPrimeCoef_(XiEqModelCoeffs_.get<scalar>("uPrimeCoef")),
|
||||
nrExp_(XiEqModelCoeffs_.get<scalar>("nrExp")),
|
||||
subGridSchelkin_(XiEqModelCoeffs_.get<bool>("subGridSchelkin")),
|
||||
MaModel
|
||||
(
|
||||
IOdictionary
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"combustionProperties",
|
||||
Su.mesh().time().constant(),
|
||||
Su.mesh(),
|
||||
IOobject::MUST_READ
|
||||
)
|
||||
),
|
||||
thermo
|
||||
)
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Destructors * * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::XiEqModels::BLMgMaXiEq::~BLMgMaXiEq()
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::tmp<Foam::volScalarField> Foam::XiEqModels::BLMgMaXiEq::XiEq() const
|
||||
{
|
||||
const volScalarField& k = turbulence_.k();
|
||||
const volScalarField& epsilon = turbulence_.epsilon();
|
||||
volScalarField up("up", sqrt((2.0/3.0)*k));
|
||||
if (subGridSchelkin_)
|
||||
{
|
||||
up.primitiveFieldRef() +=
|
||||
calculateSchelkinEffect(uPrimeCoef_, nrExp_);
|
||||
}
|
||||
|
||||
volScalarField l(lCoef_*sqrt(3.0/2.0)*up*k/epsilon);
|
||||
volScalarField Rl(up*l*thermo_.rhou()/thermo_.muu());
|
||||
|
||||
volScalarField upBySu("upBySu", up/(Su_ + SuMin_));
|
||||
volScalarField K("K", kaCoef_*upBySu*upBySu/sqrt(Rl));
|
||||
volScalarField Ma("Ma", MaModel.Ma());
|
||||
|
||||
volScalarField regime("regime", MaModel.Ma()*scalar(0.0));
|
||||
|
||||
tmp<volScalarField> tXiEq
|
||||
(
|
||||
new volScalarField
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"XiEq",
|
||||
epsilon.time().timeName(),
|
||||
epsilon.db(),
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
epsilon.mesh(),
|
||||
dimensionedScalar(dimless, Zero)
|
||||
)
|
||||
);
|
||||
|
||||
const objectRegistry& db = Su_.db();
|
||||
|
||||
const volScalarField& b = db.lookupObject<volScalarField>("b");
|
||||
|
||||
const volScalarField multiP1(0.0*pos(b - 0.99) + 1.0*neg(b - 0.99));
|
||||
const volScalarField multiP2(1.0*pos(b - 0.01) + 0.0*neg(b - 0.01));
|
||||
|
||||
volScalarField& xieq = tXiEq.ref();
|
||||
|
||||
forAll(xieq, celli)
|
||||
{
|
||||
scalar alpha;
|
||||
scalar beta;
|
||||
scalar gulderMa;
|
||||
|
||||
if (Ma[celli]>= 0)
|
||||
{
|
||||
gulderMa =
|
||||
1.0
|
||||
+ (0.1402 - 0.007*Ma[celli])
|
||||
* upBySu[celli]*sqrt(upBySu[celli]/K[celli]);
|
||||
|
||||
regime[celli] = multiP1[celli]*multiP2[celli];
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
gulderMa =
|
||||
1.0
|
||||
+ (0.005*Ma[celli]*Ma[celli]+0.01*Ma[celli] + 0.125)
|
||||
* upBySu[celli]*sqrt(upBySu[celli]/K[celli]);
|
||||
|
||||
regime[celli] = 2*multiP1[celli]*multiP2[celli];
|
||||
}
|
||||
|
||||
|
||||
if (K[celli] < (lowK0_ + lowKg_*Ma[celli]) )
|
||||
{
|
||||
xieq[celli] = gulderMa;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (Ma[celli] >= 0.0)
|
||||
{
|
||||
alpha = alphaCoefP_*(maLim_ - Ma[celli]);
|
||||
beta = betaCoefP_*(maLim_ - Ma[celli]);
|
||||
regime[celli] = 3*multiP1[celli]*multiP2[celli];
|
||||
}
|
||||
else
|
||||
{
|
||||
alpha = alphaCoefN_*(maLim1_ - Ma[celli]) ;
|
||||
beta = betaCoefN_*(maLim_ + Ma[celli]);
|
||||
regime[celli] = 4*multiP1[celli]*multiP2[celli];
|
||||
}
|
||||
xieq[celli] = XiEqCoef_*alpha*pow(K[celli], beta)*upBySu[celli];
|
||||
}
|
||||
|
||||
if (Ma[celli] > -3.0 && Ma[celli] < 11.0)
|
||||
{
|
||||
scalar K0p8 = quenchCoef_*pow( Ma[celli] - quenchM_, quenchExp_);
|
||||
scalar quenchRate = quenchRate1_ + quenchRate2_*Ma[celli];
|
||||
if (K[celli] > (K0p8 - 0.223/quenchRate))
|
||||
{
|
||||
xieq[celli] *= 0.8*exp(-quenchRate*(K[celli] - K0p8));
|
||||
regime[celli] = 5*multiP1[celli]*multiP2[celli];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
forAll(xieq.boundaryField(), patchi)
|
||||
{
|
||||
scalarField& xieqp = xieq.boundaryFieldRef()[patchi];
|
||||
const scalarField& Kp = K.boundaryField()[patchi];
|
||||
const scalarField& Map = Ma.boundaryField()[patchi];
|
||||
const scalarField& upBySup = upBySu.boundaryField()[patchi];
|
||||
|
||||
forAll(xieqp, facei)
|
||||
{
|
||||
scalar alpha;
|
||||
scalar beta;
|
||||
|
||||
if (Map[facei] > 0.0)
|
||||
{
|
||||
alpha = alphaCoefP_*(maLim_ - Map[facei]);
|
||||
beta = betaCoefP_*(maLim_ - Map[facei]);
|
||||
}
|
||||
else
|
||||
{
|
||||
alpha = alphaCoefN_*(maLim_ - Map[facei]);
|
||||
beta = betaCoefN_*(maLim_ + Map[facei]);
|
||||
}
|
||||
xieqp[facei] =
|
||||
XiEqCoef_*alpha*pow(Kp[facei], beta)*upBySup[facei];
|
||||
|
||||
if (Map[facei] > -3.0 && Map[facei] < 11.0)
|
||||
{
|
||||
scalar K0p8 = quenchCoef_*pow(Map[facei] - quenchM_, quenchExp_);
|
||||
scalar quenchRate = quenchRate1_ + quenchRate2_*Ma[facei];
|
||||
|
||||
if (Kp[facei] > (K0p8 - 0.223/quenchRate))
|
||||
{
|
||||
xieqp[facei] *= 0.8*exp(-quenchRate*(Kp[facei] - K0p8));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Info<<
|
||||
"Markstein Number out of range for Quench Formulation" << endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return tXiEq;
|
||||
}
|
||||
|
||||
|
||||
bool Foam::XiEqModels::BLMgMaXiEq::read(const dictionary& XiEqProperties)
|
||||
{
|
||||
XiEqModel::read(XiEqProperties);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,148 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | www.openfoam.com
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
Copyright (C) 2021 OpenCFD Ltd.
|
||||
-------------------------------------------------------------------------------
|
||||
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::XiEqModel::BLMgMaXiEq
|
||||
|
||||
Description
|
||||
Model for XiEq based on Bradley, Lawes and Mansour (2011)
|
||||
Cobustion and Falme, 158, 123 correlation
|
||||
with a linear correction function to give a plausible profile for XiEq.
|
||||
See \link SCOPELaminarFlameSpeed.H \endlink for details on the SCOPE laminar
|
||||
flame speed model.
|
||||
|
||||
SourceFiles
|
||||
BLMgMaXiEq.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef BLMgMaXiEq_H
|
||||
#define BLMgMaXiEq_H
|
||||
|
||||
#include "XiEqModel.H"
|
||||
#include "SCOPELaminarFlameSpeed.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace XiEqModels
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class BLMgMaXiEq Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
class BLMgMaXiEq
|
||||
:
|
||||
public XiEqModel
|
||||
{
|
||||
// Private data
|
||||
|
||||
// Model constants
|
||||
|
||||
scalar kaCoef_;
|
||||
scalar lowK0_;
|
||||
scalar lowKg_;
|
||||
scalar XiEqCoef_;
|
||||
scalar alphaCoefP_;
|
||||
scalar betaCoefP_;
|
||||
scalar alphaCoefN_;
|
||||
scalar betaCoefN_;
|
||||
scalar maLim_;
|
||||
scalar maLim1_;
|
||||
scalar quenchCoef_, quenchExp_, quenchM_;
|
||||
scalar quenchRate1_, quenchRate2_;
|
||||
scalar lCoef_;
|
||||
|
||||
//- Minimum Su
|
||||
dimensionedScalar SuMin_;
|
||||
|
||||
//- Schelkin effect Model constants
|
||||
scalar uPrimeCoef_;
|
||||
scalar nrExp_;
|
||||
|
||||
//- Use sub-grid Schelkin effect
|
||||
bool subGridSchelkin_;
|
||||
|
||||
//- The SCOPE laminar flame speed model used to obtain the
|
||||
// Marstein number. Note: the laminar flame speed need not be
|
||||
// obtained form the same model.
|
||||
laminarFlameSpeedModels::SCOPE MaModel;
|
||||
|
||||
|
||||
// Private Member Functions
|
||||
|
||||
//- Disallow copy construct
|
||||
BLMgMaXiEq(const BLMgMaXiEq&);
|
||||
|
||||
//- Disallow default bitwise assignment
|
||||
void operator=(const BLMgMaXiEq&);
|
||||
|
||||
|
||||
public:
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("BLMgMaXiEq");
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from components
|
||||
BLMgMaXiEq
|
||||
(
|
||||
const dictionary& XiEqProperties,
|
||||
const word& modelType,
|
||||
const psiuReactionThermo& thermo,
|
||||
const compressible::RASModel& turbulence,
|
||||
const volScalarField& Su
|
||||
);
|
||||
|
||||
|
||||
//- Destructor
|
||||
virtual ~BLMgMaXiEq();
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
//- Return the flame-wrinking XiEq
|
||||
virtual tmp<volScalarField> XiEq() const;
|
||||
|
||||
//- Update properties from given dictionary
|
||||
virtual bool read(const dictionary& XiEqProperties);
|
||||
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace XiEqModels
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,141 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | www.openfoam.com
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
Copyright (C) 2021 OpenCFD Ltd.
|
||||
-------------------------------------------------------------------------------
|
||||
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 "instability2XiEq.H"
|
||||
#include "addToRunTimeSelectionTable.H"
|
||||
#include "IFstream.H"
|
||||
#include "fvCFD.H"
|
||||
|
||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace XiEqModels
|
||||
{
|
||||
defineTypeNameAndDebug(instability2XiEq, 0);
|
||||
addToRunTimeSelectionTable(XiEqModel, instability2XiEq, dictionary);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::XiEqModels::instability2XiEq::instability2XiEq
|
||||
(
|
||||
const dictionary& XiEqProperties,
|
||||
const word& modelType,
|
||||
const psiuReactionThermo& thermo,
|
||||
const compressible::RASModel& turbulence,
|
||||
const volScalarField& Su
|
||||
)
|
||||
:
|
||||
XiEqModel(XiEqProperties, modelType, thermo, turbulence, Su),
|
||||
saModel_
|
||||
(
|
||||
IOdictionary
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"combustionProperties",
|
||||
Su.mesh().time().constant(),
|
||||
Su.mesh(),
|
||||
IOobject::MUST_READ
|
||||
)
|
||||
),
|
||||
thermo
|
||||
),
|
||||
CIn_(saModel_.CIn()),
|
||||
defaultCIn_(XiEqModelCoeffs_.get<scalar>("defaultCIn")),
|
||||
XiEqInFade_(XiEqModelCoeffs_.get<scalar>("XiEqInFade")),
|
||||
XiEqModel_
|
||||
(
|
||||
XiEqModel::New(XiEqModelCoeffs_, modelType, thermo, turbulence, Su)
|
||||
)
|
||||
{
|
||||
if (CIn_ <= 0.0)
|
||||
{
|
||||
CIn_ = defaultCIn_;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Destructors * * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::XiEqModels::instability2XiEq::~instability2XiEq()
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::tmp<Foam::volScalarField> Foam::XiEqModels::instability2XiEq::XiEq() const
|
||||
{
|
||||
IOdictionary combustionProperties
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"combustionProperties",
|
||||
Su_.mesh().time().constant(),
|
||||
Su_.mesh(),
|
||||
IOobject::MUST_READ,
|
||||
IOobject::NO_WRITE
|
||||
)
|
||||
);
|
||||
|
||||
ignition ign(combustionProperties, Su_.mesh().time(), Su_.mesh());
|
||||
|
||||
//const scalar ignTim = ign.sites()[0].tmIgn();
|
||||
scalar curTime = Su_.mesh().time().value();
|
||||
scalar deltaT = Su_.mesh().time().deltaTValue();
|
||||
const scalar ignTim = curTime - deltaT - ign.sites()[0].time();
|
||||
|
||||
volScalarField turbXiEq(XiEqModel_->XiEq());
|
||||
|
||||
volScalarField XiEqIn1("XiEqIn1", 0.0*turbXiEq);
|
||||
|
||||
dimensionedScalar CIn("CIn", dimensionSet(0, -2, 1, 0, 0, 0, 0), CIn_);
|
||||
dimensionedScalar ignTm("ignTm", dimTime, ignTim);
|
||||
XiEqIn1 = exp(CIn*Su_*Su_*ignTm) - 1.0;
|
||||
|
||||
return
|
||||
(
|
||||
1.0 + sqrt(XiEqInFade_*sqr(XiEqIn1) + sqr(turbXiEq - 1.0))
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
bool Foam::XiEqModels::instability2XiEq::read(const dictionary& XiEqProperties)
|
||||
{
|
||||
XiEqModel::read(XiEqProperties);
|
||||
|
||||
XiEqModelCoeffs_.readEntry("defaultCIn", defaultCIn_);
|
||||
XiEqModelCoeffs_.readEntry("XiEqInFade", XiEqInFade_);
|
||||
|
||||
return XiEqModel_->read(XiEqModelCoeffs_);
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,133 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | www.openfoam.com
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
Copyright (C) 2021 OpenCFD Ltd.
|
||||
-------------------------------------------------------------------------------
|
||||
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::XiEqModels::instability2XiEq
|
||||
|
||||
Description
|
||||
|
||||
|
||||
SourceFiles
|
||||
instability2XiEq.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef instability2XiEq_H
|
||||
#define instability2XiEq_H
|
||||
|
||||
#include "laminarFlameSpeed.H"
|
||||
#include "SCOPELaminarFlameSpeed.H"
|
||||
#include "ignitionSite.H"
|
||||
#include "ignition.H"
|
||||
#include "Time.H"
|
||||
#include "fvMesh.H"
|
||||
#include "XiEqModel.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace XiEqModels
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class instability2 Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
class instability2XiEq
|
||||
:
|
||||
public XiEqModel
|
||||
{
|
||||
// Private data
|
||||
|
||||
// -Laminar burning speed
|
||||
laminarFlameSpeedModels::SCOPE saModel_;
|
||||
|
||||
//- GIn (initial instability G)divided by Su^2. Read from fuel file
|
||||
scalar CIn_;
|
||||
|
||||
//- Default CIn if not in fuel file
|
||||
scalar defaultCIn_;
|
||||
|
||||
//- Determines how fast XiEqIn fades out as turbulence comes in
|
||||
scalar XiEqInFade_;
|
||||
|
||||
//- Equilibrium Xi model due to all other effects
|
||||
autoPtr<XiEqModel> XiEqModel_;
|
||||
|
||||
|
||||
// Private Member Functions
|
||||
|
||||
//- Disallow copy construct
|
||||
instability2XiEq(const instability2XiEq&);
|
||||
|
||||
//- Disallow default bitwise assignment
|
||||
void operator=(const instability2XiEq&);
|
||||
|
||||
|
||||
public:
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("instability2XiEq");
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from components
|
||||
instability2XiEq
|
||||
(
|
||||
const dictionary& XiEqProperties,
|
||||
const word& modelType,
|
||||
const psiuReactionThermo& thermo,
|
||||
const compressible::RASModel& turbulence,
|
||||
const volScalarField& Su
|
||||
);
|
||||
|
||||
|
||||
//- Destructor
|
||||
virtual ~instability2XiEq();
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
//- Return the flame-wrinking XiEq
|
||||
virtual tmp<volScalarField> XiEq() const;
|
||||
|
||||
//- Update properties from given dictionary
|
||||
virtual bool read(const dictionary& XiEqProperties);
|
||||
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace XiEqModels
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,171 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | www.openfoam.com
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
Copyright (C) 2021 OpenCFD Ltd.
|
||||
-------------------------------------------------------------------------------
|
||||
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 "IFstream.H"
|
||||
#include "instability2G.H"
|
||||
#include "addToRunTimeSelectionTable.H"
|
||||
#include "fvCFD.H"
|
||||
|
||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace XiGModels
|
||||
{
|
||||
defineTypeNameAndDebug(instability2G, 0);
|
||||
addToRunTimeSelectionTable(XiGModel, instability2G, dictionary);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::XiGModels::instability2G::instability2G
|
||||
(
|
||||
const dictionary& XiGProperties,
|
||||
const word& modelType,
|
||||
const psiuReactionThermo& thermo,
|
||||
const compressible::RASModel& turbulence,
|
||||
const volScalarField& Su
|
||||
)
|
||||
:
|
||||
XiGModel(XiGProperties, modelType, thermo, turbulence, Su),
|
||||
saModel_
|
||||
(
|
||||
IOdictionary
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"combustionProperties",
|
||||
Su.mesh().time().constant(),
|
||||
Su.mesh(),
|
||||
IOobject::MUST_READ
|
||||
)
|
||||
),
|
||||
thermo
|
||||
),
|
||||
CIn_(saModel_.CIn()),
|
||||
defaultCIn_(XiGModelCoeffs_.get<scalar>("defaultCIn")),
|
||||
GInFade_(XiGModelCoeffs_.get<scalar>("GInFade")),
|
||||
GInMult_(XiGModelCoeffs_.get<scalar>("GInMult")),
|
||||
lambdaIn_("lambdaIn", XiGModelCoeffs_),
|
||||
XiGModel_
|
||||
(
|
||||
XiGModel::New(XiGModelCoeffs_,modelType,thermo, turbulence, Su)
|
||||
)
|
||||
{
|
||||
if (CIn_ <= 0.0)
|
||||
{
|
||||
CIn_ = defaultCIn_;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Destructors * * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::XiGModels::instability2G::~instability2G()
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::tmp<Foam::volScalarField> Foam::XiGModels::instability2G::G() const
|
||||
{
|
||||
IOdictionary combustionProperties
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"combustionProperties",
|
||||
Su_.mesh().time().constant(),
|
||||
Su_.mesh(),
|
||||
IOobject::MUST_READ,
|
||||
IOobject::NO_WRITE
|
||||
)
|
||||
);
|
||||
|
||||
ignition ign(combustionProperties, Su_.mesh().time(), Su_.mesh());
|
||||
|
||||
scalar curTime = Su_.mesh().time().value();
|
||||
scalar deltaT = Su_.mesh().time().deltaTValue();
|
||||
const scalar ignTim = curTime - deltaT - ign.sites()[0].time();
|
||||
|
||||
volScalarField turbXiG(XiGModel_->G());
|
||||
|
||||
volScalarField GIn("GIn", 0.0*turbXiG);
|
||||
|
||||
|
||||
forAll (GIn, i)
|
||||
{
|
||||
GIn[i] = CIn_*Su_[i]*Su_[i]*exp(CIn_*Su_[i]*Su_[i]*ignTim)*GInMult_;
|
||||
}
|
||||
|
||||
dimensionedScalar CIn("CIn", dimensionSet(0, -2, 1, 0, 0, 0, 0), CIn_);
|
||||
dimensionedScalar ignTm("ignTm", dimTime, ignTim);
|
||||
|
||||
GIn = CIn*Su_*Su_*exp(CIn*Su_*Su_*ignTm)*GInMult_;
|
||||
|
||||
GIn *=
|
||||
GIn
|
||||
/
|
||||
(
|
||||
GIn
|
||||
+ GInFade_*turbXiG
|
||||
+ dimensionedScalar("GSmall", inv(dimTime), SMALL)
|
||||
);
|
||||
|
||||
return (GIn + turbXiG);
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::volScalarField> Foam::XiGModels::instability2G::Db() const
|
||||
{
|
||||
const objectRegistry& db = Su_.db();
|
||||
const volScalarField& Xi = db.lookupObject<volScalarField>("Xi");
|
||||
const volScalarField& rho = db.lookupObject<volScalarField>("rho");
|
||||
const volScalarField& mgb = db.lookupObject<volScalarField>("mgb");
|
||||
const volScalarField& Db1 = db.lookupObject<volScalarField>("Db");
|
||||
|
||||
//return turbulence_.muEff()
|
||||
return Db1
|
||||
+ rho*Su_*(Xi - 1.0)*mgb*(0.5*lambdaIn_)/(mgb + 1.0/lambdaIn_);
|
||||
}
|
||||
|
||||
|
||||
bool Foam::XiGModels::instability2G::read(const dictionary& XiGProperties)
|
||||
{
|
||||
XiGModel::read(XiGProperties);
|
||||
|
||||
XiGModelCoeffs_.readEntry("defaultCIn", defaultCIn_);
|
||||
XiGModelCoeffs_.readEntry("GInFade", GInFade_);
|
||||
XiGModelCoeffs_.readEntry("GInMult", GInMult_);
|
||||
XiGModelCoeffs_.readEntry("lambdaIn", lambdaIn_);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,141 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | www.openfoam.com
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
Copyright (C) 2021 OpenCFD Ltd.
|
||||
-------------------------------------------------------------------------------
|
||||
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::XiGModels::instability2G
|
||||
|
||||
Description
|
||||
|
||||
|
||||
SourceFiles
|
||||
instability2G.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef instability2G_H
|
||||
#define instability2G_H
|
||||
|
||||
#include "laminarFlameSpeed.H"
|
||||
#include "SCOPELaminarFlameSpeed.H"
|
||||
#include "XiGModel.H"
|
||||
#include "ignitionSite.H"
|
||||
#include "ignition.H"
|
||||
#include "Time.H"
|
||||
#include "fvMesh.H"
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace XiGModels
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class instability2G Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
class instability2G
|
||||
:
|
||||
public XiGModel
|
||||
{
|
||||
// Private data
|
||||
|
||||
laminarFlameSpeedModels::SCOPE saModel_;
|
||||
|
||||
// GIn (inituial instability G)divided by Su^2. Read from fuel file
|
||||
scalar CIn_;
|
||||
|
||||
//- Default CIn if not in fuel file
|
||||
scalar defaultCIn_;
|
||||
|
||||
// Determine how fast GIn fades out as turbulence starts
|
||||
scalar GInFade_;
|
||||
|
||||
// Set GIn large so that XiEq determines Xi value. Son increase byfactor:
|
||||
scalar GInMult_;
|
||||
|
||||
//- instability2G length-scale
|
||||
dimensionedScalar lambdaIn_;
|
||||
|
||||
//- Xi generation rate model due to all other processes
|
||||
autoPtr<XiGModel> XiGModel_;
|
||||
|
||||
|
||||
// Private Member Functions
|
||||
|
||||
//- Disallow copy construct
|
||||
instability2G(const instability2G&);
|
||||
|
||||
//- Disallow default bitwise assignment
|
||||
void operator=(const instability2G&);
|
||||
|
||||
|
||||
public:
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("instability2G");
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from components
|
||||
instability2G
|
||||
(
|
||||
const dictionary& XiGProperties,
|
||||
const word& modelType,
|
||||
const psiuReactionThermo& thermo,
|
||||
const compressible::RASModel& turbulence,
|
||||
const volScalarField& Su
|
||||
);
|
||||
|
||||
|
||||
//- Destructor
|
||||
virtual ~instability2G();
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
//- Return the flame-wrinking generation rate
|
||||
virtual tmp<volScalarField> G() const;
|
||||
|
||||
//- Return the flame diffusivity
|
||||
virtual tmp<volScalarField> Db() const;
|
||||
|
||||
//- Update properties from given dictionary
|
||||
virtual bool read(const dictionary& XiGProperties);
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace XiGModels
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,253 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | www.openfoam.com
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
Copyright (C) 2011-2015 OpenFOAM Foundation
|
||||
Copyright (C) 2021 OpenCFD Ltd.
|
||||
-------------------------------------------------------------------------------
|
||||
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 "transportTwoEqs.H"
|
||||
#include "addToRunTimeSelectionTable.H"
|
||||
|
||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace XiModels
|
||||
{
|
||||
defineTypeNameAndDebug(transportTwoEqs, 0);
|
||||
addToRunTimeSelectionTable(XiModel, transportTwoEqs, dictionary);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::XiModels::transportTwoEqs::transportTwoEqs
|
||||
(
|
||||
const dictionary& XiProperties,
|
||||
const psiuReactionThermo& thermo,
|
||||
const compressible::RASModel& turbulence,
|
||||
const volScalarField& Su,
|
||||
const volScalarField& rho,
|
||||
const volScalarField& b,
|
||||
const surfaceScalarField& phi
|
||||
)
|
||||
:
|
||||
XiModel(XiProperties, thermo, turbulence, Su, rho, b, phi),
|
||||
XiShapeCoef_(XiModelCoeffs_.get<scalar>("XiShapeCoef")),
|
||||
CpfiDot_(XiModelCoeffs_.get<scalar>("CpfiDot")),
|
||||
CpfiCross_(XiModelCoeffs_.get<scalar>("CpfiCross")),
|
||||
GEtaExp_(XiModelCoeffs_.get<scalar>("GEtaExp")),
|
||||
LOverCw_(XiModelCoeffs_.get<scalar>("LOverCw")),
|
||||
XiEqModel_
|
||||
(
|
||||
XiEqModel::New(XiProperties, "XiEqModel", thermo, turbulence, Su)
|
||||
),
|
||||
XiGModel_(XiGModel::New(XiProperties, "XiGModel", thermo, turbulence, Su)),
|
||||
XpEqModel_
|
||||
(
|
||||
XiEqModel::New(XiProperties, "XpEqModel", thermo, turbulence, Su)
|
||||
),
|
||||
XpGModel_
|
||||
(
|
||||
XiGModel::New(XiProperties, "XpGModel", thermo, turbulence, Su)
|
||||
),
|
||||
Ep_
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"Ep",
|
||||
b.time().timeName(),
|
||||
b.db(),
|
||||
IOobject::MUST_READ,
|
||||
IOobject::AUTO_WRITE
|
||||
),
|
||||
b.mesh()
|
||||
)
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Destructors * * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::XiModels::transportTwoEqs::~transportTwoEqs()
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
|
||||
|
||||
|
||||
Foam::tmp<Foam::volScalarField> Foam::XiModels::transportTwoEqs::Db() const
|
||||
{
|
||||
return XiGModel_->Db();
|
||||
}
|
||||
|
||||
|
||||
void Foam::XiModels::transportTwoEqs::correct
|
||||
(
|
||||
const fv::convectionScheme<scalar>& mvConvection
|
||||
)
|
||||
{
|
||||
const volScalarField XiEqEta(XiEqModel_->XiEq());
|
||||
volScalarField GEta(XiGModel_->G());
|
||||
|
||||
GEta *= max( 1.0, exp( GEtaExp_*(1.0 - (Xi_ - 1.0)/(XiEqEta - 0.999)))) ;
|
||||
|
||||
const volScalarField R(GEta*XiEqEta/(XiEqEta - 0.999));
|
||||
|
||||
const volScalarField XiEqStar(R/(R - GEta));
|
||||
|
||||
const volScalarField XiEq
|
||||
(
|
||||
1.0 + (1.0 + (2*XiShapeCoef_)*(0.5 - b_))*(XiEqStar - 1.0)
|
||||
);
|
||||
|
||||
const volScalarField G(R*(XiEq - 1.0)/XiEq);
|
||||
|
||||
|
||||
const objectRegistry& db = b_.db();
|
||||
const volScalarField& betav = db.lookupObject<volScalarField>("betav");
|
||||
const volScalarField& p = db.lookupObject<volScalarField>("p");
|
||||
const volScalarField& mgb = db.lookupObject<volScalarField>("mgb");
|
||||
const surfaceScalarField& phiSt =
|
||||
db.lookupObject<surfaceScalarField>("phiSt");
|
||||
const volScalarField& Db = db.lookupObject<volScalarField>("Db");
|
||||
const surfaceScalarField& nf = db.lookupObject<surfaceScalarField>("nf");
|
||||
|
||||
surfaceScalarField phiXi
|
||||
(
|
||||
"phiXi",
|
||||
phiSt
|
||||
+ (
|
||||
- fvc::interpolate(fvc::laplacian(Db, b_)/mgb)*nf
|
||||
+ fvc::interpolate(rho_)
|
||||
* fvc::interpolate(Su_*(1.0/(Xi_*Xp_) - (Xi_*Xp_)))*nf
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
dimensionedScalar zero
|
||||
(
|
||||
"zero",
|
||||
dimensionSet(2, -6, -2, 0, 0, 0, 0),
|
||||
scalar(0.0)
|
||||
);
|
||||
|
||||
const volScalarField Gpfi
|
||||
(
|
||||
CpfiDot_*sqrt(max(fvc::grad(rho_)&fvc::grad(p), zero ))/rho_*b_*(1.0-b_)
|
||||
+ CpfiCross_*sqrt(mag(fvc::grad(rho_)^fvc::grad(p) ))/rho_*b_*(1.0-b_)
|
||||
);
|
||||
|
||||
fvScalarMatrix XiEqn_
|
||||
(
|
||||
betav*fvm::ddt(rho_, Xi_)
|
||||
+ mvConvection.fvmDiv(phi_, Xi_)
|
||||
+ fvm::div(phiXi, Xi_)
|
||||
- fvm::Sp(fvc::div(phiXi), Xi_)
|
||||
==
|
||||
betav*rho_*(R + Gpfi )
|
||||
- fvm::Sp(betav*rho_*(R - G), Xi_)
|
||||
);
|
||||
|
||||
XiEqn_.relax();
|
||||
XiEqn_.solve();
|
||||
|
||||
// Correct boundedness of Xi
|
||||
// ~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Xi_.max(1.0);
|
||||
Xi_ = min(Xi_, 2.0*XiEq);
|
||||
|
||||
// Calculation of Xp generated by obstacles
|
||||
volScalarField XpEqEta("XpEqEta",XpEqModel_->XiEq());
|
||||
|
||||
const volScalarField GpEta("GpEta", XpGModel_->G());
|
||||
|
||||
const volScalarField Rp("Rp", GpEta*XpEqEta/(XpEqEta - 0.999));
|
||||
|
||||
const volScalarField XpEq
|
||||
(
|
||||
"XpEq",
|
||||
1.0 + (1.0 + (2*XiShapeCoef_)*(0.5 - b_))*(XpEqEta - 1.0)
|
||||
);
|
||||
|
||||
const volScalarField Gpp("Gpp", Rp*(XpEq - 1.0)/XpEq);
|
||||
|
||||
|
||||
fvScalarMatrix XpEqn_
|
||||
(
|
||||
betav*fvm::ddt(rho_, Xp_)
|
||||
+ mvConvection.fvmDiv(phi_, Xp_)
|
||||
+ fvm::div(phiXi, Xp_)
|
||||
- fvm::Sp(fvc::div(phiXi), Xp_)
|
||||
==
|
||||
betav*rho_*Rp
|
||||
- fvm::Sp(betav*rho_*(Rp - Gpp), Xp_)
|
||||
);
|
||||
|
||||
XpEqn_.relax();
|
||||
XpEqn_.solve();
|
||||
|
||||
Xp_.max(1.0);
|
||||
Xp_ = min(Xp_, 20.0*XpEq);
|
||||
|
||||
// Calculate Ep
|
||||
const volScalarField& Lobs = db.lookupObject<volScalarField>("Lobs");
|
||||
const scalarField Cw = pow(Su_.mesh().V(), 2.0/3.0);
|
||||
volScalarField LI(Lobs);
|
||||
|
||||
LI.primitiveFieldRef() = max(LI.primitiveField(),LOverCw_*sqrt(Cw));
|
||||
|
||||
fvScalarMatrix EpEqn_
|
||||
(
|
||||
betav*fvm::ddt(rho_, Ep_)
|
||||
+ mvConvection.fvmDiv(phi_, Ep_)
|
||||
+ fvm::div(phiXi, Ep_)
|
||||
- fvm::Sp(fvc::div(phiXi), Ep_)
|
||||
==
|
||||
betav*rho_*Gpp*Xp_/LI
|
||||
- fvm::Sp(betav*rho_*Rp, Ep_)
|
||||
);
|
||||
|
||||
EpEqn_.relax();
|
||||
EpEqn_.solve();
|
||||
|
||||
Ep_.max(0.0);
|
||||
Ep_.min(100000.0);
|
||||
}
|
||||
|
||||
|
||||
bool Foam::XiModels::transportTwoEqs::read(const dictionary& XiProperties)
|
||||
{
|
||||
XiModel::read(XiProperties);
|
||||
|
||||
XiModelCoeffs_.readEntry("XiShapeCoef", XiShapeCoef_);
|
||||
XiModelCoeffs_.readEntry("CpfiDot", CpfiDot_);
|
||||
XiModelCoeffs_.readEntry("CpfiCross", CpfiCross_);
|
||||
XiModelCoeffs_.readEntry("GEtaExp", GEtaExp_);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,154 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | www.openfoam.com
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
Copyright (C) 2011-2015 OpenFOAM Foundation
|
||||
Copyright (C) 2021 OpenCFD Ltd.
|
||||
-------------------------------------------------------------------------------
|
||||
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::XiModels::transportTwoEqs
|
||||
|
||||
Description
|
||||
|
||||
SourceFiles
|
||||
transportTwoEqs.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef transportTwoEqs_H
|
||||
#define transportTwoEqs_H
|
||||
|
||||
#include "XiModel.H"
|
||||
#include "XiEqModel.H"
|
||||
#include "XiGModel.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace XiModels
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class transportTwoEqs Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
class transportTwoEqs
|
||||
:
|
||||
public XiModel
|
||||
{
|
||||
// Private data
|
||||
|
||||
scalar XiShapeCoef_;
|
||||
scalar CpfiDot_;
|
||||
scalar CpfiCross_;
|
||||
scalar GEtaExp_;
|
||||
|
||||
//- Maximum Lobs/CellWidth
|
||||
scalar LOverCw_;
|
||||
|
||||
//- Equilibrium for Xi (turbulence)
|
||||
autoPtr<XiEqModel> XiEqModel_;
|
||||
|
||||
//- Generation for Xi (turbulence)
|
||||
autoPtr<XiGModel> XiGModel_;
|
||||
|
||||
//- Equilibrium for Xp (obstacles)
|
||||
autoPtr<XiEqModel> XpEqModel_;
|
||||
|
||||
//- Generation for Xp (obstacles)
|
||||
autoPtr<XiGModel> XpGModel_;
|
||||
|
||||
//- Dissipation lenght scale for subgrid obstacles
|
||||
volScalarField Ep_;
|
||||
|
||||
|
||||
// Private Member Functions
|
||||
|
||||
//- Disallow copy construct
|
||||
transportTwoEqs(const transportTwoEqs&);
|
||||
|
||||
//- Disallow default bitwise assignment
|
||||
void operator=(const transportTwoEqs&);
|
||||
|
||||
|
||||
public:
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("transportTwoEqs");
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from components
|
||||
transportTwoEqs
|
||||
(
|
||||
const dictionary& XiProperties,
|
||||
const psiuReactionThermo& thermo,
|
||||
const compressible::RASModel& turbulence,
|
||||
const volScalarField& Su,
|
||||
const volScalarField& rho,
|
||||
const volScalarField& b,
|
||||
const surfaceScalarField& phi
|
||||
);
|
||||
|
||||
|
||||
//- Destructor
|
||||
virtual ~transportTwoEqs();
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
//- Return the flame diffusivity
|
||||
virtual tmp<volScalarField> Db() const;
|
||||
|
||||
//- Correct the flame-wrinking Xi
|
||||
virtual void correct()
|
||||
{
|
||||
NotImplemented;
|
||||
}
|
||||
|
||||
//- Correct the flame-wrinking Xi using the given convection scheme
|
||||
virtual void correct(const fv::convectionScheme<scalar>& mvConvection);
|
||||
|
||||
//- Update properties from given dictionary
|
||||
virtual bool read(const dictionary& XiProperties);
|
||||
|
||||
//- Write fields of the XiEq model
|
||||
virtual void writeFields()
|
||||
{
|
||||
XiEqModel_().writeFields();
|
||||
XpEqModel_().writeFields();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace XiModels
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
47
applications/solvers/combustion/PDRFoam/readTimeControls.H
Normal file
47
applications/solvers/combustion/PDRFoam/readTimeControls.H
Normal file
@ -0,0 +1,47 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | www.openfoam.com
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
Copyright (C) 2011-2015 OpenFOAM Foundation
|
||||
Copyright (C) 2021 OpenCFD Ltd.
|
||||
-------------------------------------------------------------------------------
|
||||
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/>.
|
||||
|
||||
Global
|
||||
readTimeControls
|
||||
|
||||
Description
|
||||
Read the control parameters used by setDeltaT
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
const bool adjustTimeStep =
|
||||
runTime.controlDict().getOrDefault<bool>("adjustTimeStep", false);
|
||||
|
||||
scalar maxCo = runTime.controlDict().getOrDefault<scalar>("maxCo", 1.0);
|
||||
|
||||
scalar maxDeltaT =
|
||||
runTime.controlDict().getOrDefault<scalar>("maxDeltaT", GREAT);
|
||||
|
||||
scalar maxDeltaTRatio =
|
||||
runTime.controlDict().getOrDefault<scalar>("maxDeltaTRatio", 1.2);
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
Reference in New Issue
Block a user