From bc71a7d2082de78dbb13501c6fbb817809caade2 Mon Sep 17 00:00:00 2001 From: Henry Weller 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 4bbfc9f99f..1e108771a9 100644 --- a/src/lagrangian/basic/Cloud/Cloud.C +++ b/src/lagrangian/basic/Cloud/Cloud.C @@ -172,6 +172,25 @@ void Foam::Cloud::deleteParticle(ParticleType& p) } +template +void Foam::Cloud::deleteLostParticles() +{ + forAllIter(typename Cloud, *this, pIter) + { + ParticleType& p = pIter(); + + if (p.cell() == -1) + { + WarningInFunction + << "deleting lost particle at position " << p.position() + << endl; + + deleteParticle(p); + } + } +} + + template void Foam::Cloud::cloudReset(const Cloud& c) { diff --git a/src/lagrangian/intermediate/clouds/Templates/CollidingCloud/CollidingCloud.C b/src/lagrangian/intermediate/clouds/Templates/CollidingCloud/CollidingCloud.C index be5611162f..84facfc882 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::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 a6a9ba0b15..3814ffd52f 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::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 5cbfaf7418..5286c93385 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::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 9343fe5e24..d168d158e6 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::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 831208bf43..21b03b25dc 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::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 2b47ad1cd0..cbf98371f8 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::ThermoCloud if (readFields) { parcelType::readFields(*this); + this->deleteLostParticles(); } } diff --git a/src/lagrangian/solidParticle/solidParticleCloud.H b/src/lagrangian/solidParticle/solidParticleCloud.H index 47149ec8b0..d204bd9ff0 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 d5684374f9..7a1906c4e4 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::SprayCloud if (readFields) { parcelType::readFields(*this, this->composition()); + this->deleteLostParticles(); } Info << "Average parcel mass: " << averageParcelMass_ << endl;