LTS, MULES and sub-cycling: Improved the handling of the rSubDeltaT field

This commit is contained in:
Henry Weller
2015-06-26 21:58:27 +01:00
parent d14e8ed169
commit 587c93574a
7 changed files with 39 additions and 56 deletions

View File

@ -82,7 +82,7 @@
? fv::localEulerDdtScheme<scalar> ? fv::localEulerDdtScheme<scalar>
( (
mesh, mesh,
trSubDeltaT().name() nAlphaSubCycles > 1 ? "rSubDeltaT" : "rDeltaT"
).fvmDdt(alpha1) ).fvmDdt(alpha1)
: fv::EulerDdtScheme<scalar>(mesh).fvmDdt(alpha1) : fv::EulerDdtScheme<scalar>(mesh).fvmDdt(alpha1)
) )

View File

@ -13,6 +13,16 @@ if (nAlphaSubCycles > 1)
dimensionedScalar("0", rhoPhi.dimensions(), 0) dimensionedScalar("0", rhoPhi.dimensions(), 0)
); );
tmp<volScalarField> trSubDeltaT;
if (LTS)
{
trSubDeltaT = tmp<volScalarField>
(
new volScalarField("rSubDeltaT", trDeltaT()*nAlphaSubCycles)
);
}
for for
( (
subCycle<volScalarField> alphaSubCycle(alpha1, nAlphaSubCycles); subCycle<volScalarField> alphaSubCycle(alpha1, nAlphaSubCycles);

View File

@ -1,47 +0,0 @@
bool LTS =
word(mesh.ddtScheme("default"))
== fv::localEulerDdtScheme<scalar>::typeName;
tmp<volScalarField> trDeltaT;
tmp<volScalarField> trSubDeltaT;
if (LTS)
{
scalar maxDeltaT
(
pimple.dict().lookupOrDefault<scalar>("maxDeltaT", GREAT)
);
trDeltaT = tmp<volScalarField>
(
new volScalarField
(
IOobject
(
"rDeltaT",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
mesh,
1/dimensionedScalar("maxDeltaT", dimTime, maxDeltaT),
zeroGradientFvPatchScalarField::typeName
)
);
trSubDeltaT = tmp<volScalarField>
(
new volScalarField
(
IOobject
(
"rSubDeltaT",
runTime.timeName(),
mesh
),
mesh,
1/dimensionedScalar("maxDeltaT", dimTime, maxDeltaT)
)
);
}

View File

@ -1,6 +1,5 @@
{ {
volScalarField& rDeltaT = trDeltaT(); volScalarField& rDeltaT = trDeltaT();
volScalarField& rSubDeltaT = trSubDeltaT();
const dictionary& pimpleDict = pimple.dict(); const dictionary& pimpleDict = pimple.dict();
@ -134,9 +133,4 @@
<< gMin(1/rDeltaT.internalField()) << gMin(1/rDeltaT.internalField())
<< ", " << gMax(1/rDeltaT.internalField()) << endl; << ", " << gMax(1/rDeltaT.internalField()) << endl;
} }
const dictionary& alphaControls = mesh.solverDict(alpha1.name());
label nAlphaSubCycles(readLabel(alphaControls.lookup("nAlphaSubCycles")));
rSubDeltaT = rDeltaT*nAlphaSubCycles;
} }

View File

@ -175,6 +175,10 @@ void Foam::twoPhaseSystem::solve()
label nAlphaSubCycles(readLabel(alphaControls.lookup("nAlphaSubCycles"))); label nAlphaSubCycles(readLabel(alphaControls.lookup("nAlphaSubCycles")));
label nAlphaCorr(readLabel(alphaControls.lookup("nAlphaCorr"))); label nAlphaCorr(readLabel(alphaControls.lookup("nAlphaCorr")));
bool LTS =
word(mesh.ddtScheme("default"))
== fv::localEulerDdtScheme<scalar>::typeName;
word alphaScheme("div(phi," + alpha1.name() + ')'); word alphaScheme("div(phi," + alpha1.name() + ')');
word alpharScheme("div(phir," + alpha1.name() + ')'); word alpharScheme("div(phir," + alpha1.name() + ')');
@ -316,6 +320,22 @@ void Foam::twoPhaseSystem::solve()
if (nAlphaSubCycles > 1) if (nAlphaSubCycles > 1)
{ {
tmp<volScalarField> trSubDeltaT;
if (LTS)
{
const volScalarField& rDeltaT =
mesh.objectRegistry::lookupObject<volScalarField>
(
"rDeltaT"
);
trSubDeltaT = tmp<volScalarField>
(
new volScalarField("rSubDeltaT", rDeltaT*nAlphaSubCycles)
);
}
for for
( (
subCycle<volScalarField> alphaSubCycle(alpha1, nAlphaSubCycles); subCycle<volScalarField> alphaSubCycle(alpha1, nAlphaSubCycles);

View File

@ -96,7 +96,10 @@ void Foam::MULES::correct
if (LTS) if (LTS)
{ {
const volScalarField& rDeltaT = const volScalarField& rDeltaT =
mesh.objectRegistry::lookupObject<volScalarField>("rSubDeltaT"); mesh.objectRegistry::lookupObject<volScalarField>
(
mesh.time().subCycling() ? "rSubDeltaT" : "rDeltaT"
);
limitCorr limitCorr
( (

View File

@ -118,7 +118,10 @@ void Foam::MULES::explicitSolve
if (LTS) if (LTS)
{ {
const volScalarField& rDeltaT = const volScalarField& rDeltaT =
mesh.objectRegistry::lookupObject<volScalarField>("rSubDeltaT"); mesh.objectRegistry::lookupObject<volScalarField>
(
mesh.time().subCycling() ? "rSubDeltaT" : "rDeltaT"
);
limit limit
( (