Skip to content

Commit

Permalink
multiphaseEuler: Update the virtual-mass force implementation
Browse files Browse the repository at this point in the history
The central coefficient part of the virtual-mass phase acceleration matrix is
now included in the phase velocity transport central coefficient + drag matrix
so that the all the phase contributions to each phase momentum equation are
handled implicitly and consistently without lagging contribution from the other
phases in either the pressure equation or phase momentum correctors.

This improves the conditioning of the pressure equation and convergence rate of
bubbly-flow cases.
  • Loading branch information
Henry Weller committed Sep 1, 2023
1 parent a0c391b commit 18200e7
Show file tree
Hide file tree
Showing 11 changed files with 274 additions and 378 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,10 @@ bool Foam::functionObjects::phaseForces::execute()
*forceFields_[virtualMassModel::typeName] +=
fluid_.lookupInterfacialModel
<blendedVirtualMassModel>(interface).K()
*(otherPhase.DUDt() - phase_.DUDt());
*(
(otherPhase.DUDt() & otherPhase.U())
- (phase_.DUDt() & phase_.U())
);
}

if (fluid_.foundInterfacialModel<blendedLiftModel>(interface))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ void Foam::solvers::multiphaseEuler::cellPressureCorrector()
rAs.setSize(phases.size());
}

PtrList<volVectorField> HVms(movingPhases.size());
PtrList<PtrList<volScalarField>> invADs;
PtrList<PtrList<surfaceScalarField>> invADfs;
{
Expand Down Expand Up @@ -109,7 +110,7 @@ void Foam::solvers::multiphaseEuler::cellPressureCorrector()
}
}

fluid.invADs(As, invADs, invADfs);
fluid.invADs(As, HVms, invADs, invADfs);
}

volScalarField rho("rho", fluid.rho());
Expand Down Expand Up @@ -168,7 +169,6 @@ void Foam::solvers::multiphaseEuler::cellPressureCorrector()
// --- Optional momentum predictor
if (predictMomentum)
{
InfoInFunction << endl;
PtrList<volVectorField> HbyADs;
{
PtrList<volVectorField> Hs(movingPhases.size());
Expand All @@ -189,6 +189,11 @@ void Foam::solvers::multiphaseEuler::cellPressureCorrector()
)
*phase.U()().oldTime()
);

if (HVms.set(movingPhasei))
{
Hs[movingPhasei] += HVms[movingPhasei];
}
}

HbyADs = invADs & Hs;
Expand Down Expand Up @@ -253,6 +258,11 @@ void Foam::solvers::multiphaseEuler::cellPressureCorrector()
*phase.U()().oldTime()
);

if (HVms.set(movingPhasei))
{
Hs[movingPhasei] += HVms[movingPhasei];
}

phiHs.set
(
movingPhasei,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,9 +68,9 @@ void Foam::solvers::multiphaseEuler::facePressureCorrector()
rAs.setSize(phases.size());
}

PtrList<surfaceScalarField> HVmfs(movingPhases.size());
PtrList<PtrList<surfaceScalarField>> invADfs;
{
PtrList<surfaceScalarField> Vmfs(fluid.Vmfs());
PtrList<surfaceScalarField> Afs(movingPhases.size());

forAll(fluid.movingPhases(), movingPhasei)
Expand Down Expand Up @@ -110,14 +110,9 @@ void Foam::solvers::multiphaseEuler::facePressureCorrector()
fvc::interpolate(A)
)
);

if (Vmfs.set(phase.index()))
{
Afs[movingPhasei] += Vmfs[phase.index()];
}
}

invADfs = fluid.invADfs(Afs);
invADfs = fluid.invADfs(Afs, HVmfs);
}

volScalarField rho("rho", fluid.rho());
Expand Down Expand Up @@ -205,6 +200,11 @@ void Foam::solvers::multiphaseEuler::facePressureCorrector()
+ fvc::flux(UEqns[phase.index()].H())
)
);

if (HVmfs.set(movingPhasei))
{
phiHs[movingPhasei] += HVmfs[movingPhasei];
}
}

phiHbyADs = invADfs & phiHs;
Expand Down
Loading

0 comments on commit 18200e7

Please sign in to comment.