Merge branch 'master' of /home/noisy3/OpenFOAM/OpenFOAM-dev

This commit is contained in:
andy
2011-03-08 11:32:18 +00:00
48 changed files with 296 additions and 246 deletions

View File

@ -50,8 +50,7 @@ Foam::XiEqModels::Gulder::Gulder
:
XiEqModel(XiEqProperties, thermo, turbulence, Su),
XiEqCoef_(readScalar(XiEqModelCoeffs_.lookup("XiEqCoef"))),
SuMin_(0.01*Su.average()),
uPrimeCoef_(readScalar(XiEqModelCoeffs_.lookup("uPrimeCoef")))
SuMin_(0.01*Su.average())
{}
@ -67,78 +66,11 @@ Foam::tmp<Foam::volScalarField> Foam::XiEqModels::Gulder::XiEq() const
{
volScalarField up(sqrt((2.0/3.0)*turbulence_.k()));
const volScalarField& epsilon = turbulence_.epsilon();
const fvMesh& mesh = Su_.mesh();
const volVectorField& U = mesh.lookupObject<volVectorField>("U");
const volSymmTensorField& CT = mesh.lookupObject<volSymmTensorField>("CT");
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("zero", Nv.dimensions(), 0.0),
zeroGradientFvPatchVectorField::typeName
)
);
volScalarField& N = tN();
N.internalField() = Nv.internalField()*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
(
"zero",
nsv.dimensions(),
pTraits<symmTensor>::zero
)
)
);
volSymmTensorField& ns = tns();
ns.internalField() = nsv.internalField()*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.0), pow(nr, 0.5)) - 1.0));
up.internalField() += deltaUp;
if (subGridSchelkin())
{
up.internalField() += calculateSchelkinEffect();
}
volScalarField tauEta(sqrt(mag(thermo_.muu()/(thermo_.rhou()*epsilon))));
@ -161,6 +93,7 @@ bool Foam::XiEqModels::Gulder::read(const dictionary& XiEqProperties)
XiEqModelCoeffs_.lookup("XiEqCoef") >> XiEqCoef_;
XiEqModelCoeffs_.lookup("uPrimeCoef") >> uPrimeCoef_;
XiEqModelCoeffs_.lookup("subGridSchelkin") >> subGridSchelkin_;
return true;
}

View File

@ -61,9 +61,6 @@ class Gulder
//- Minimum laminar burning velocity
const dimensionedScalar SuMin_;
//- Model constant
scalar uPrimeCoef_;
// Private Member Functions

View File

@ -84,6 +84,11 @@ Foam::tmp<Foam::volScalarField> Foam::XiEqModels::SCOPEXiEq::XiEq() const
const volScalarField& epsilon = turbulence_.epsilon();
volScalarField up(sqrt((2.0/3.0)*k));
if (subGridSchelkin())
{
up.internalField() += calculateSchelkinEffect();
}
volScalarField l(lCoef_*sqrt(3.0/2.0)*up*k/epsilon);
volScalarField Rl(up*l*thermo_.rhou()/thermo_.muu());

View File

@ -58,9 +58,16 @@ class SCOPEXiEq
{
// Private data
// Model constant
scalar XiEqCoef_;
// Model constant
scalar XiEqExp_;
// Model constant
scalar lCoef_;
//- Minimum Su
dimensionedScalar SuMin_;
//- The SCOPE laminar flame speed model used to obtain the

View File

@ -77,6 +77,11 @@ Foam::XiEqModel::XiEqModel
IOobject::NO_WRITE
),
Su.mesh()
),
uPrimeCoef_(XiEqModelCoeffs_.lookupOrDefault<scalar>("uPrimeCoef", 0.0)),
subGridSchelkin_
(
XiEqModelCoeffs_.lookupOrDefault<bool>("subGridSchelkin", false)
)
{}
@ -93,6 +98,10 @@ bool Foam::XiEqModel::read(const dictionary& XiEqProperties)
{
XiEqModelCoeffs_ = XiEqProperties.subDict(type() + "Coeffs");
uPrimeCoef_ = XiEqModelCoeffs_.lookupOrDefault<scalar>("uPrimeCoef", 0.0);
subGridSchelkin_ =
XiEqModelCoeffs_.lookupOrDefault<bool>("subGridSchelkin", false);
return true;
}
@ -109,4 +118,85 @@ void Foam::XiEqModel::writeFields() const
}
}
Foam::tmp<Foam::volScalarField>
Foam::XiEqModel::calculateSchelkinEffect() const
{
const fvMesh& mesh = Su_.mesh();
const volVectorField& U = mesh.lookupObject<volVectorField>("U");
const volSymmTensorField& CT = mesh.lookupObject<volSymmTensorField>("CT");
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("zero", Nv.dimensions(), 0.0),
zeroGradientFvPatchVectorField::typeName
)
);
volScalarField& N = tN();
N.internalField() = Nv.internalField()*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
(
"zero",
nsv.dimensions(),
pTraits<symmTensor>::zero
)
)
);
volSymmTensorField& ns = tns();
ns.internalField() = nsv.internalField()*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.0), pow(nr, 0.5)) - 1.0));
//Re use tN
N.internalField() = upLocal*(max(scalar(1.0), pow(nr, 0.5)) - 1.0);
return tN;
}
// ************************************************************************* //

View File

@ -62,14 +62,30 @@ protected:
// Protected data
//- Dictionary
dictionary XiEqModelCoeffs_;
//- Thermo
const hhuCombustionThermo& thermo_;
//- Turbulence
const compressible::RASModel& turbulence_;
//- Laminar burning velocity
const volScalarField& Su_;
//- Volumetric obstacles number
volScalarField Nv_;
//
volSymmTensorField nsv_;
//- Schelkin effect Model constant
scalar uPrimeCoef_;
//- Use sub-grid Schelkin effect
bool subGridSchelkin_;
private:
@ -146,6 +162,15 @@ public:
return turbulence_.muEff();
}
//- Return state of the sub-grid Schelkin effect
bool subGridSchelkin() const
{
return subGridSchelkin_;
}
//- Return the sub-grid Schelkin effect
tmp<volScalarField> calculateSchelkinEffect() const;
//- Update properties from given dictionary
virtual bool read(const dictionary& XiEqProperties) = 0;

View File

@ -17,7 +17,7 @@ FoamFile
dimensions [ 0 -1 0 0 0 0 0 ];
internalField nonuniform List<scalar>
internalField nonuniform List<scalar>
8025
(
18.372496

View File

@ -17,7 +17,7 @@ FoamFile
dimensions [ 0 0 0 0 0 0 0 ];
internalField nonuniform List<symmTensor>
internalField nonuniform List<symmTensor>
8025
(
(1.785697 0 0 1.785697 0 1.875)

View File

@ -17,7 +17,7 @@ FoamFile
dimensions [ 0 -1 0 0 0 0 0 ];
internalField nonuniform List<symmTensor>
internalField nonuniform List<symmTensor>
8025
(
(98.997697 0 0 77.711245 0 30.754852)

View File

@ -17,7 +17,7 @@ FoamFile
dimensions [ 0 -1 0 0 0 0 0 ];
internalField nonuniform List<symmTensor>
internalField nonuniform List<symmTensor>
8025
(
(4.501854 0 0 3.437531 0 1.537743)

View File

@ -17,7 +17,7 @@ FoamFile
dimensions [ 0 1 0 0 0 0 0 ];
internalField nonuniform List<scalar>
internalField nonuniform List<scalar>
8025
(
0.2

View File

@ -17,7 +17,7 @@ FoamFile
dimensions [ 0 0 0 0 0 0 0 ];
internalField nonuniform List<scalar>
internalField nonuniform List<scalar>
8025
(
2.019581

View File

@ -17,7 +17,7 @@ FoamFile
dimensions [ 0 0 0 0 0 0 0 ];
internalField nonuniform List<scalar>
internalField nonuniform List<scalar>
8025
(
0

View File

@ -17,7 +17,7 @@ FoamFile
dimensions [ 0 0 0 0 0 0 0 ];
internalField nonuniform List<symmTensor>
internalField nonuniform List<symmTensor>
8025
(
(0.634791 0 0 0.634791 0 0.03)

View File

@ -14,5 +14,4 @@ runApplication PDRMesh
# Run
runApplication PDRFoam
# ----------------------------------------------------------------- end-of-file
# ----------------------------------------------------------------- end-of-file

View File

@ -8,5 +8,4 @@ Step to introduce the PDR fields:
1) Create zero-size patches for wall or/and coupled baffles in
the boundary file.
2) Specify the boundary contitions for these patches in the fields.
3) Create the new PDR mesh using the PDRMesh utility
3) Create the new PDR mesh using the PDRMesh utility.

View File

@ -49,25 +49,27 @@ instabilityCoeffs
{
XiEqModelL
{
XiEqModel Gulder;
XiEqModel Gulder;
uPrimeCoef 1.0;
subGridSchelkin true;
GulderCoeffs
{
XiEqCoef 0.62;
uPrimeCoef 1.0;
XiEqCoef 0.62;
}
}
XiEqModelH
{
XiEqModel SCOPEXiEq;
XiEqModel SCOPEXiEq;
uPrimeCoef 1.0;
subGridSchelkin true;
SCOPEXiEqCoeffs
{
XiEqCoef 1.6;
XiEqExp 0.33333;
lCoef 0.336;
uPrimeCoef 1.0;
SCOPEXiEqCoeffs
{
XiEqCoef 1.6;
XiEqExp 0.33333;
lCoef 0.336;
}
}
}

View File

@ -59,6 +59,4 @@ burntProducts
Ts 170.672;
}
// ************************************************************************* //
// ************************************************************************* //

View File

@ -51,5 +51,4 @@ maxCo 0.3;
maxDeltaT 1;
// ************************************************************************* //
// ************************************************************************* //

View File

@ -1,87 +1,85 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: www.OpenFOAM.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
location "system";
object fvSchemes;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
ddtSchemes
{
default Euler;
}
gradSchemes
{
default Gauss linear;
grad(p) Gauss linear;
}
divSchemes
{
default none;
div(phi,U) Gauss limitedLinearV 1;
div(phiU,p) Gauss limitedLinear 1;
div(phid,p) Gauss limitedLinear 1;
div(phi,k) Gauss limitedLinear 1;
div(phi,epsilon) Gauss limitedLinear 1;
div(phiXi,Xi) Gauss limitedLinear 1;
div(phiSt,b) Gauss limitedLinear01 1;
div(phi,ft_b_h_hu) Gauss multivariateSelection
{
ft limitedLinear01 1;
b limitedLinear01 1;
Xi limitedLinear 1;
h limitedLinear 1;
hu limitedLinear 1;
};
div((Su*grad(b))) Gauss linear;
div((U+((Su*Xi)*grad(b)))) Gauss linear;
div((muEff*dev2(T(grad(U))))) Gauss linear;
div(U) Gauss linear;
}
laplacianSchemes
{
default none;
laplacian(muEff,U) Gauss linear limited 0.333;
laplacian(DkEff,k) Gauss linear limited 0.333;
laplacian(DepsilonEff,epsilon) Gauss linear limited 0.333;
laplacian((rho*inv((((1)*A(U))+((((0.5*rho)*CR)*mag(U))+((((Csu*(1))*betav)*muEff)*sqr(Aw)))))),p) Gauss linear limited 0.333;
laplacian(Db,b) Gauss linear limited 0.333;
laplacian(Db,ft) Gauss linear limited 0.333;
laplacian(Db,h) Gauss linear limited 0.333;
laplacian(Db,hu) Gauss linear limited 0.333;
}
interpolationSchemes
{
default linear;
}
snGradSchemes
{
default limited 0.333;
}
fluxRequired
{
default no;
p;
}
// ************************************************************************* //
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: www.OpenFOAM.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
location "system";
object fvSchemes;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
ddtSchemes
{
default Euler;
}
gradSchemes
{
default Gauss linear;
grad(p) Gauss linear;
}
divSchemes
{
default none;
div(phi,U) Gauss limitedLinearV 1;
div(phiU,p) Gauss limitedLinear 1;
div(phid,p) Gauss limitedLinear 1;
div(phi,k) Gauss limitedLinear 1;
div(phi,epsilon) Gauss limitedLinear 1;
div(phiXi,Xi) Gauss limitedLinear 1;
div(phiSt,b) Gauss limitedLinear01 1;
div(phi,ft_b_h_hu) Gauss multivariateSelection
{
ft limitedLinear01 1;
b limitedLinear01 1;
Xi limitedLinear 1;
h limitedLinear 1;
hu limitedLinear 1;
};
div((Su*grad(b))) Gauss linear;
div((U+((Su*Xi)*grad(b)))) Gauss linear;
div((muEff*dev2(T(grad(U))))) Gauss linear;
div(U) Gauss linear;
}
laplacianSchemes
{
default none;
laplacian(muEff,U) Gauss linear limited 0.333;
laplacian(DkEff,k) Gauss linear limited 0.333;
laplacian(DepsilonEff,epsilon) Gauss linear limited 0.333;
laplacian((rho*inv((((1)*A(U))+((((0.5*rho)*CR)*mag(U))+((((Csu*(1))*betav)*muEff)*sqr(Aw)))))),p) Gauss linear limited 0.333;
laplacian(Db,b) Gauss linear limited 0.333;
laplacian(Db,ft) Gauss linear limited 0.333;
laplacian(Db,h) Gauss linear limited 0.333;
laplacian(Db,hu) Gauss linear limited 0.333;
}
interpolationSchemes
{
default linear;
}
snGradSchemes
{
default limited 0.333;
}
fluxRequired
{
default no;
p;
}
// ************************************************************************* //

View File

@ -1,54 +1,53 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: www.OpenFOAM.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
location "system";
object fvSolution;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
solvers
{
rho
{
solver PCG;
preconditioner DIC;
tolerance 1e-05;
relTol 0;
};
p
{
solver PCG;
preconditioner DIC;
tolerance 1e-6;
relTol 0;
};
"(U|ft|fu|b|Xi|Su|h|hu|R|k|epsilon)"
{
solver PBiCG;
preconditioner DILU;
tolerance 1e-05;
relTol 0;
}
}
PISO
{
nCorrectors 2;
nNonOrthogonalCorrectors 0;
momentumPredictor true;
}
// ************************************************************************* //
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: www.OpenFOAM.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
location "system";
object fvSolution;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
solvers
{
rho
{
solver PCG;
preconditioner DIC;
tolerance 1e-05;
relTol 0;
};
p
{
solver PCG;
preconditioner DIC;
tolerance 1e-6;
relTol 0;
};
"(U|ft|fu|b|Xi|Su|h|hu|R|k|epsilon)"
{
solver PBiCG;
preconditioner DILU;
tolerance 1e-05;
relTol 0;
}
}
PISO
{
nCorrectors 2;
nNonOrthogonalCorrectors 0;
momentumPredictor true;
}
// ************************************************************************* //