BUG: post-processing of parcels on patch interaction models

Adding check for p.active at the end of KinematicParcel::move.
    p.hitFace() is called only for active parcels.

    Setting to zero the initialization for stored lists of stick and
escape parcels
    in LocalInteraction and StandardWallInteraction models

    NOTE: KinematicParcel::hitPatch counts overall system escaped
    parcels and mass based on polyPatch type and not on type of
    patchInteractionModel. Thus, if a patch is a Wall for fluid
    but escape for parcel the overall report will be wrong but
    the local report for each patch is correct
This commit is contained in:
sergio
2019-12-16 14:54:10 -08:00
parent f45c7fb7bd
commit c1b07cd103
4 changed files with 35 additions and 17 deletions

View File

@ -353,14 +353,14 @@ bool Foam::KinematicParcel<ParcelType>::move
p.age() += dt; p.age() += dt;
if (p.onFace()) if (p.active() && p.onFace())
{ {
cloud.functions().postFace(p, ttd.keepParticle); cloud.functions().postFace(p, ttd.keepParticle);
} }
cloud.functions().postMove(p, dt, start, ttd.keepParticle); cloud.functions().postMove(p, dt, start, ttd.keepParticle);
if (p.onFace() && ttd.keepParticle) if (p.active() && p.onFace() && ttd.keepParticle)
{ {
p.hitFace(s, cloud, ttd); p.hitFace(s, cloud, ttd);
} }
@ -399,6 +399,9 @@ bool Foam::KinematicParcel<ParcelType>::hitPatch
} }
else else
{ {
// This does not take into account the wall interation model
// Just the polyPatch type. Then, a patch type which has 'rebound'
// interation model will count as escaped parcel while it is not
if (!isA<wallPolyPatch>(pp) && !polyPatch::constraintType(pp.type())) if (!isA<wallPolyPatch>(pp) && !polyPatch::constraintType(pp.type()))
{ {
cloud.patchInteraction().addToEscapedParcels(nParticle_*mass()); cloud.patchInteraction().addToEscapedParcels(nParticle_*mass());

View File

@ -470,7 +470,7 @@ inline Foam::scalar Foam::KinematicParcel<ParcelType>::Eo
) )
{ {
const vector dir = U/max(mag(U), ROOTVSMALL); const vector dir = U/max(mag(U), ROOTVSMALL);
return mag(g & dir)*(rho - rhoc)*sqr(d)/max(sigma, ROOTVSMALL); return mag(g & dir)*mag(rho - rhoc)*sqr(d)/max(sigma, ROOTVSMALL);
} }

View File

@ -334,16 +334,24 @@ void Foam::LocalInteraction<CloudType>::info(Ostream& os)
PatchInteractionModel<CloudType>::info(os); PatchInteractionModel<CloudType>::info(os);
// retrieve any stored data // retrieve any stored data
labelListList npe0(nEscape_); labelListList npe0(patchData_.size());
this->getModelProperty("nEscape", npe0); labelListList mpe0(patchData_.size());
labelListList nps0(patchData_.size());
labelListList mps0(patchData_.size());
forAll(patchData_, patchi)
{
label lsd = nEscape_[patchi].size();
npe0[patchi].setSize(lsd, Zero);
mpe0[patchi].setSize(lsd, Zero);
nps0[patchi].setSize(lsd, Zero);
mps0[patchi].setSize(lsd, Zero);
}
scalarListList mpe0(massEscape_);
this->getModelProperty("nEscape", npe0);
this->getModelProperty("massEscape", mpe0); this->getModelProperty("massEscape", mpe0);
labelListList nps0(nStick_);
this->getModelProperty("nStick", nps0); this->getModelProperty("nStick", nps0);
scalarListList mps0(massStick_);
this->getModelProperty("massStick", mps0); this->getModelProperty("massStick", mps0);
// accumulate current data // accumulate current data

View File

@ -248,16 +248,23 @@ void Foam::StandardWallInteraction<CloudType>::info(Ostream& os)
{ {
PatchInteractionModel<CloudType>::info(os); PatchInteractionModel<CloudType>::info(os);
labelListList npe0(nEscape_); labelListList npe0(nEscape_.size());
labelListList mpe0(nEscape_.size());
labelListList nps0(nEscape_.size());
labelListList mps0(nEscape_.size());
forAll(nEscape_, patchi)
{
label lsd = nEscape_[patchi].size();
npe0[patchi].setSize(lsd, Zero);
mpe0[patchi].setSize(lsd, Zero);
nps0[patchi].setSize(lsd, Zero);
mps0[patchi].setSize(lsd, Zero);
}
this->getModelProperty("nEscape", npe0); this->getModelProperty("nEscape", npe0);
scalarListList mpe0(massEscape_);
this->getModelProperty("massEscape", mpe0); this->getModelProperty("massEscape", mpe0);
labelListList nps0(nStick_);
this->getModelProperty("nStick", nps0); this->getModelProperty("nStick", nps0);
scalarListList mps0(massStick_);
this->getModelProperty("massStick", mps0); this->getModelProperty("massStick", mps0);
// Accumulate current data // Accumulate current data