mirror of
https://github.com/OpenFOAM/OpenFOAM-6.git
synced 2025-12-08 06:57:46 +00:00
LTS, MULES and sub-cycling: Improved the handling of the rSubDeltaT field
This commit is contained in:
@ -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)
|
||||||
)
|
)
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
@ -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)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
@ -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;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
@ -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
|
||||||
(
|
(
|
||||||
|
|||||||
@ -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
|
||||||
(
|
(
|
||||||
|
|||||||
Reference in New Issue
Block a user