reactingEulerFoam: Added update interval for population balance source terms.
This can be used to speedup simulations that converge to a steady state
by only updating the source terms once every few iterations. The number
of iterations between each update is set in fvSolution as follows:
solvers
{
bubbles
{
sourceUpdateInterval 10;
}
// etc ...
}
By default the interval is 1, and so the sources update every time.
Based on a patch contributed by Juho Peltola, VTT.
This commit is contained in:
@ -841,6 +841,15 @@ void Foam::diameterModels::populationBalanceModel::calcVelocity()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Foam::diameterModels::populationBalanceModel::updateSources()
|
||||||
|
{
|
||||||
|
const bool result = sourceUpdateCounter_ % sourceUpdateInterval() == 0;
|
||||||
|
|
||||||
|
++ sourceUpdateCounter_;
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
@ -927,7 +936,11 @@ Foam::diameterModels::populationBalanceModel::populationBalanceModel
|
|||||||
nucleationRate_(),
|
nucleationRate_(),
|
||||||
alphas_(),
|
alphas_(),
|
||||||
dsm_(),
|
dsm_(),
|
||||||
U_()
|
U_(),
|
||||||
|
sourceUpdateCounter_
|
||||||
|
(
|
||||||
|
(mesh_.time().timeIndex()*nCorr())%sourceUpdateInterval()
|
||||||
|
)
|
||||||
{
|
{
|
||||||
this->registerVelocityAndSizeGroups();
|
this->registerVelocityAndSizeGroups();
|
||||||
|
|
||||||
@ -1224,22 +1237,14 @@ Foam::diameterModels::populationBalanceModel::continuousTurbulence() const
|
|||||||
void Foam::diameterModels::populationBalanceModel::solve()
|
void Foam::diameterModels::populationBalanceModel::solve()
|
||||||
{
|
{
|
||||||
const dictionary& solutionControls = mesh_.solverDict(name_);
|
const dictionary& solutionControls = mesh_.solverDict(name_);
|
||||||
bool solveOnFinalIterOnly
|
bool solveOnFinalIterOnly =
|
||||||
(
|
solutionControls.lookupOrDefault<bool>("solveOnFinalIterOnly", false);
|
||||||
solutionControls.lookupOrDefault<bool>
|
|
||||||
(
|
|
||||||
"solveOnFinalIterOnly",
|
|
||||||
false
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!solveOnFinalIterOnly || pimple_.finalIter())
|
if (!solveOnFinalIterOnly || pimple_.finalIter())
|
||||||
{
|
{
|
||||||
label nCorr(readLabel(solutionControls.lookup("nCorr")));
|
const label nCorr = this->nCorr();
|
||||||
scalar tolerance
|
const scalar tolerance =
|
||||||
(
|
readScalar(solutionControls.lookup("tolerance"));
|
||||||
readScalar(solutionControls.lookup("tolerance"))
|
|
||||||
);
|
|
||||||
|
|
||||||
if (nCorr > 0)
|
if (nCorr > 0)
|
||||||
{
|
{
|
||||||
@ -1257,7 +1262,10 @@ void Foam::diameterModels::populationBalanceModel::solve()
|
|||||||
<< iCorr
|
<< iCorr
|
||||||
<< endl;
|
<< endl;
|
||||||
|
|
||||||
sources();
|
if (updateSources())
|
||||||
|
{
|
||||||
|
sources();
|
||||||
|
}
|
||||||
|
|
||||||
dmdt();
|
dmdt();
|
||||||
|
|
||||||
|
|||||||
@ -277,6 +277,9 @@ class populationBalanceModel
|
|||||||
//- Average velocity
|
//- Average velocity
|
||||||
autoPtr<volVectorField> U_;
|
autoPtr<volVectorField> U_;
|
||||||
|
|
||||||
|
//- Counter for interval between source term updates
|
||||||
|
label sourceUpdateCounter_;
|
||||||
|
|
||||||
|
|
||||||
// Private member functions
|
// Private member functions
|
||||||
|
|
||||||
@ -316,6 +319,14 @@ class populationBalanceModel
|
|||||||
|
|
||||||
void calcVelocity();
|
void calcVelocity();
|
||||||
|
|
||||||
|
//- Return whether the sources should be updated on this iteration
|
||||||
|
bool updateSources();
|
||||||
|
|
||||||
|
//- Return the number of corrections
|
||||||
|
inline label nCorr() const;
|
||||||
|
|
||||||
|
//- Return the interval at which the sources are updated
|
||||||
|
inline label sourceUpdateInterval() const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
|||||||
@ -23,6 +23,23 @@ License
|
|||||||
|
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
inline Foam::label Foam::diameterModels::populationBalanceModel::nCorr() const
|
||||||
|
{
|
||||||
|
return mesh_.solverDict(name_).lookupType<label>("nCorr");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline Foam::label
|
||||||
|
Foam::diameterModels::populationBalanceModel::sourceUpdateInterval() const
|
||||||
|
{
|
||||||
|
return
|
||||||
|
mesh_.solverDict(name_)
|
||||||
|
.lookupOrDefault<label>("sourceUpdateInterval", 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||||
|
|
||||||
inline const Foam::phaseSystem&
|
inline const Foam::phaseSystem&
|
||||||
|
|||||||
Reference in New Issue
Block a user