isothermalFilm: Corrected impingement pressure transfer

The previous implementation was dimensionally inconsistent and was
missing a factor of the VbyA field. This change will, in most cases,
reduce the total impingement pressure contribution.
This commit is contained in:
Will Bainbridge
2023-09-15 10:35:59 +01:00
parent 9c3a404533
commit 0b321e3eea
4 changed files with 22 additions and 62 deletions

View File

@ -83,21 +83,12 @@ void Foam::CloudFilmTransfer<CloudType>::absorbInteraction
const parcelThermo& thermo = const parcelThermo& thermo =
static_cast<const ThermoCloud<CloudType>&>(this->owner()).thermo(); static_cast<const ThermoCloud<CloudType>&>(this->owner()).thermo();
// Patch face normal
const vector& nf = pp.faceNormals()[facei];
// Patch velocity // Patch velocity
const vector& Up = this->owner().U().boundaryField()[pp.index()][facei]; const vector& Up = this->owner().U().boundaryField()[pp.index()][facei];
// Relative parcel velocity // Relative parcel velocity
const vector Urel = p.U() - Up; const vector Urel = p.U() - Up;
// Parcel normal velocity
const vector Un = nf*(Urel & nf);
// Parcel tangential velocity
const vector Ut = Urel - Un;
const liquidProperties& liq = thermo.liquids().properties()[0]; const liquidProperties& liq = thermo.liquids().properties()[0];
// Local pressure // Local pressure
@ -107,8 +98,7 @@ void Foam::CloudFilmTransfer<CloudType>::absorbInteraction
( (
facei, facei,
mass, // mass mass, // mass
mass*Ut, // tangential momentum mass*Urel, // momentum
mass*mag(Un), // impingement pressure
mass*liq.Hs(pc, p.T()) // energy mass*liq.Hs(pc, p.T()) // energy
); );

View File

@ -75,7 +75,6 @@ Foam::wordList Foam::fv::filmCloudTransfer::addSupFields() const
{ {
return wordList return wordList
{ {
"pi",
film_.alpha.name(), film_.alpha.name(),
film_.thermo.he().name(), film_.thermo.he().name(),
film_.U.name() film_.U.name()
@ -136,36 +135,6 @@ inline Foam::fv::filmCloudTransfer::CloudToFilmTransferRate
} }
void Foam::fv::filmCloudTransfer::addSup
(
fvMatrix<scalar>& eqn,
const word& fieldName
) const
{
if (debug)
{
Info<< type() << ": applying source to " << eqn.psi().name() << endl;
}
// Droplet impingement pressure
if (fieldName == "pi")
{
eqn +=
CloudToFilmTransferRate<scalar>
(
pressureFromCloud_,
dimPressure*dimVolume
);
}
else
{
FatalErrorInFunction
<< "Support for field " << fieldName << " is not implemented"
<< exit(FatalError);
}
}
void Foam::fv::filmCloudTransfer::addSup void Foam::fv::filmCloudTransfer::addSup
( (
const volScalarField& rho, const volScalarField& rho,
@ -240,11 +209,20 @@ void Foam::fv::filmCloudTransfer::addSup
Info<< type() << ": applying source to " << eqn.psi().name() << endl; Info<< type() << ": applying source to " << eqn.psi().name() << endl;
} }
eqn += CloudToFilmTransferRate<vector>(momentumFromCloud_, dimMomentum); if (fieldName == film_.U.name())
if (ejection_.valid())
{ {
eqn -= fvm::Sp(alpha()*rho()*ejection_->rate(), eqn.psi()); eqn += CloudToFilmTransferRate<vector>(momentumFromCloud_, dimMomentum);
if (ejection_.valid())
{
eqn -= fvm::Sp(alpha()*rho()*ejection_->rate(), eqn.psi());
}
}
else
{
FatalErrorInFunction
<< "Support for field " << fieldName << " is not implemented"
<< exit(FatalError);
} }
} }
@ -260,13 +238,11 @@ void Foam::fv::filmCloudTransfer::resetFromCloudFields()
{ {
massFromCloud_.setSize(nCloudPatchFaces); massFromCloud_.setSize(nCloudPatchFaces);
momentumFromCloud_.setSize(nCloudPatchFaces); momentumFromCloud_.setSize(nCloudPatchFaces);
pressureFromCloud_.setSize(nCloudPatchFaces);
energyFromCloud_.setSize(nCloudPatchFaces); energyFromCloud_.setSize(nCloudPatchFaces);
} }
massFromCloud_ = 0; massFromCloud_ = 0;
momentumFromCloud_ = Zero; momentumFromCloud_ = Zero;
pressureFromCloud_ = 0;
energyFromCloud_ = 0; energyFromCloud_ = 0;
cloudFieldsTransferred_ = true; cloudFieldsTransferred_ = true;
@ -281,13 +257,11 @@ void Foam::fv::filmCloudTransfer::parcelFromCloud
const label facei, const label facei,
const scalar mass, const scalar mass,
const vector& momentum, const vector& momentum,
const scalar pressure,
const scalar energy const scalar energy
) )
{ {
massFromCloud_[facei] += mass; massFromCloud_[facei] += mass;
momentumFromCloud_[facei] += momentum; momentumFromCloud_[facei] += momentum;
pressureFromCloud_[facei] += pressure;
energyFromCloud_[facei] += energy; energyFromCloud_[facei] += energy;
} }

View File

@ -75,7 +75,6 @@ class filmCloudTransfer
scalarField massFromCloud_; scalarField massFromCloud_;
vectorField momentumFromCloud_; vectorField momentumFromCloud_;
scalarField pressureFromCloud_;
scalarField energyFromCloud_; scalarField energyFromCloud_;
//- Switch to ensure the ejection rate is not updated until //- Switch to ensure the ejection rate is not updated until
@ -147,13 +146,6 @@ public:
// Add explicit and implicit contributions to compressible equation // Add explicit and implicit contributions to compressible equation
//- Add explicit droplet impingement contribution to pressure field
virtual void addSup
(
fvMatrix<scalar>& eqn,
const word& fieldName
) const;
//- Add explicit contribution to phase continuity //- Add explicit contribution to phase continuity
virtual void addSup virtual void addSup
( (
@ -193,7 +185,6 @@ public:
const label facei, const label facei,
const scalar mass, const scalar mass,
const vector& momentum, const vector& momentum,
const scalar pressure,
const scalar energy const scalar energy
); );

View File

@ -76,8 +76,9 @@ Foam::solvers::isothermalFilm::pe() const
// Update the pressure, mapping from the fluid region as required // Update the pressure, mapping from the fluid region as required
p.correctBoundaryConditions(); p.correctBoundaryConditions();
// Add the droplet impingement pressure // Add the pressure caused normal momentum sources (e.g., parcels impinging
p.ref() += mesh.time().deltaT()*fvModels().source(p, "pi")().Su(); // with a normal velocity)
p.ref() += VbyA*(nHat & (fvModels().source(alpha, rho, U) & U));
return p; return p;
} }
@ -90,6 +91,10 @@ void Foam::solvers::isothermalFilm::momentumPredictor()
// Calculate the surface tension coefficient // Calculate the surface tension coefficient
const volScalarField sigma(this->sigma()); const volScalarField sigma(this->sigma());
// Get the momentum source and remove any normal components
fvVectorMatrix alphaRhoUsource(fvModels().source(alpha, rho, U));
alphaRhoUsource.source() -= nHat*(nHat & alphaRhoUsource.source());
tUEqn = tUEqn =
( (
fvm::ddt(alpha, rho, U) + fvm::div(alphaRhoPhi, U) fvm::ddt(alpha, rho, U) + fvm::div(alphaRhoPhi, U)
@ -97,7 +102,7 @@ void Foam::solvers::isothermalFilm::momentumPredictor()
+ momentumTransport->divDevTau(U) + momentumTransport->divDevTau(U)
== ==
contactForce(sigma) contactForce(sigma)
+ fvModels().source(alpha, rho, U) + alphaRhoUsource
); );
fvVectorMatrix& UEqn = tUEqn.ref(); fvVectorMatrix& UEqn = tUEqn.ref();