From bc71a7d2082de78dbb13501c6fbb817809caade2 Mon Sep 17 00:00:00 2001 From: Henry Weller <http://cfd.direct> Date: Tue, 16 Aug 2016 11:32:27 +0100 Subject: [PATCH] lagrangian: Delete lost particles on restart Warning messages are generated for each particle deleted --- src/lagrangian/basic/Cloud/Cloud.C | 19 +++++++++++++++++++ .../Templates/CollidingCloud/CollidingCloud.C | 1 + .../Templates/KinematicCloud/KinematicCloud.C | 1 + .../clouds/Templates/MPPICCloud/MPPICCloud.C | 1 + .../Templates/ReactingCloud/ReactingCloud.C | 1 + .../ReactingMultiphaseCloud.C | 1 + .../Templates/ThermoCloud/ThermoCloud.C | 1 + .../solidParticle/solidParticleCloud.H | 2 +- .../clouds/Templates/SprayCloud/SprayCloud.C | 1 + 9 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/lagrangian/basic/Cloud/Cloud.C b/src/lagrangian/basic/Cloud/Cloud.C index 4bbfc9f99fc..1e108771a96 100644 --- a/src/lagrangian/basic/Cloud/Cloud.C +++ b/src/lagrangian/basic/Cloud/Cloud.C @@ -172,6 +172,25 @@ void Foam::Cloud<ParticleType>::deleteParticle(ParticleType& p) } +template<class ParticleType> +void Foam::Cloud<ParticleType>::deleteLostParticles() +{ + forAllIter(typename Cloud<ParticleType>, *this, pIter) + { + ParticleType& p = pIter(); + + if (p.cell() == -1) + { + WarningInFunction + << "deleting lost particle at position " << p.position() + << endl; + + deleteParticle(p); + } + } +} + + template<class ParticleType> void Foam::Cloud<ParticleType>::cloudReset(const Cloud<ParticleType>& c) { diff --git a/src/lagrangian/intermediate/clouds/Templates/CollidingCloud/CollidingCloud.C b/src/lagrangian/intermediate/clouds/Templates/CollidingCloud/CollidingCloud.C index be5611162f6..84facfc8829 100644 --- a/src/lagrangian/intermediate/clouds/Templates/CollidingCloud/CollidingCloud.C +++ b/src/lagrangian/intermediate/clouds/Templates/CollidingCloud/CollidingCloud.C @@ -109,6 +109,7 @@ Foam::CollidingCloud<CloudType>::CollidingCloud if (readFields) { parcelType::readFields(*this); + this->deleteLostParticles(); } } } diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C index a6a9ba0b153..3814ffd52f7 100644 --- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C +++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C @@ -394,6 +394,7 @@ Foam::KinematicCloud<CloudType>::KinematicCloud if (readFields) { parcelType::readFields(*this); + this->deleteLostParticles(); } } diff --git a/src/lagrangian/intermediate/clouds/Templates/MPPICCloud/MPPICCloud.C b/src/lagrangian/intermediate/clouds/Templates/MPPICCloud/MPPICCloud.C index 5cbfaf7418f..5286c933851 100644 --- a/src/lagrangian/intermediate/clouds/Templates/MPPICCloud/MPPICCloud.C +++ b/src/lagrangian/intermediate/clouds/Templates/MPPICCloud/MPPICCloud.C @@ -94,6 +94,7 @@ Foam::MPPICCloud<CloudType>::MPPICCloud if (readFields) { parcelType::readFields(*this); + this->deleteLostParticles(); } } } diff --git a/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.C b/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.C index 9343fe5e240..d168d158e6e 100644 --- a/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.C +++ b/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.C @@ -111,6 +111,7 @@ Foam::ReactingCloud<CloudType>::ReactingCloud if (readFields) { parcelType::readFields(*this, this->composition()); + this->deleteLostParticles(); } } diff --git a/src/lagrangian/intermediate/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.C b/src/lagrangian/intermediate/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.C index 831208bf433..21b03b25dce 100644 --- a/src/lagrangian/intermediate/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.C +++ b/src/lagrangian/intermediate/clouds/Templates/ReactingMultiphaseCloud/ReactingMultiphaseCloud.C @@ -98,6 +98,7 @@ Foam::ReactingMultiphaseCloud<CloudType>::ReactingMultiphaseCloud if (readFields) { parcelType::readFields(*this, this->composition()); + this->deleteLostParticles(); } } diff --git a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C index 2b47ad1cd04..cbf98371f84 100644 --- a/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C +++ b/src/lagrangian/intermediate/clouds/Templates/ThermoCloud/ThermoCloud.C @@ -203,6 +203,7 @@ Foam::ThermoCloud<CloudType>::ThermoCloud if (readFields) { parcelType::readFields(*this); + this->deleteLostParticles(); } } diff --git a/src/lagrangian/solidParticle/solidParticleCloud.H b/src/lagrangian/solidParticle/solidParticleCloud.H index 47149ec8b06..d204bd9ff03 100644 --- a/src/lagrangian/solidParticle/solidParticleCloud.H +++ b/src/lagrangian/solidParticle/solidParticleCloud.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License diff --git a/src/lagrangian/spray/clouds/Templates/SprayCloud/SprayCloud.C b/src/lagrangian/spray/clouds/Templates/SprayCloud/SprayCloud.C index d5684374f92..7a1906c4e46 100644 --- a/src/lagrangian/spray/clouds/Templates/SprayCloud/SprayCloud.C +++ b/src/lagrangian/spray/clouds/Templates/SprayCloud/SprayCloud.C @@ -94,6 +94,7 @@ Foam::SprayCloud<CloudType>::SprayCloud if (readFields) { parcelType::readFields(*this, this->composition()); + this->deleteLostParticles(); } Info << "Average parcel mass: " << averageParcelMass_ << endl; -- GitLab