From 5e8748c6ebe854f46b1cab2f1d46572d8dcf280d Mon Sep 17 00:00:00 2001 From: Will Bainbridge Date: Thu, 7 Sep 2023 14:52:11 +0100 Subject: [PATCH] CloudFunctionObjects: ParticleErosion, PatchCollisionDensity: Execute before hitting the face These functions cannot execute on the 'postPatch' hook because at this point the particle properties have already been altered by the patch interaction (i.e., the rebound has occurred and the velocity has reversed). They need to execute in advance of the patch interaction. There is no 'prePatch' hook, and implementing one is not straightforward, so these functions have been changed to use the 'preFace' hook and manually check that the face in question is a boundary face. Patch contributed by Timo Niemi, VTT. --- .../ParticleErosion/ParticleErosion.C | 10 +++++----- .../ParticleErosion/ParticleErosion.H | 6 +++--- .../PatchCollisionDensity/PatchCollisionDensity.C | 10 +++++----- .../PatchCollisionDensity/PatchCollisionDensity.H | 6 +++--- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/lagrangian/parcel/submodels/CloudFunctionObjects/ParticleErosion/ParticleErosion.C b/src/lagrangian/parcel/submodels/CloudFunctionObjects/ParticleErosion/ParticleErosion.C index 595f9b1038..e617150510 100644 --- a/src/lagrangian/parcel/submodels/CloudFunctionObjects/ParticleErosion/ParticleErosion.C +++ b/src/lagrangian/parcel/submodels/CloudFunctionObjects/ParticleErosion/ParticleErosion.C @@ -161,12 +161,12 @@ void Foam::ParticleErosion::preEvolve() template -void Foam::ParticleErosion::postPatch -( - const parcelType& p, - const polyPatch& pp -) +void Foam::ParticleErosion::preFace(const parcelType& p) { + const fvMesh& mesh = this->owner().mesh(); + if (!p.onBoundaryFace(mesh)) return; + + const polyPatch& pp = mesh.boundaryMesh()[p.patch(mesh)]; const label patchi = pp.index(); const label localPatchi = applyToPatch(patchi); diff --git a/src/lagrangian/parcel/submodels/CloudFunctionObjects/ParticleErosion/ParticleErosion.H b/src/lagrangian/parcel/submodels/CloudFunctionObjects/ParticleErosion/ParticleErosion.H index 0ac9532f3f..17352fbc64 100644 --- a/src/lagrangian/parcel/submodels/CloudFunctionObjects/ParticleErosion/ParticleErosion.H +++ b/src/lagrangian/parcel/submodels/CloudFunctionObjects/ParticleErosion/ParticleErosion.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2023 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -169,8 +169,8 @@ public: //- Pre-evolve hook virtual void preEvolve(); - //- Post-patch hook - virtual void postPatch(const parcelType& p, const polyPatch& pp); + //- Pre-face hook + virtual void preFace(const parcelType& p); }; diff --git a/src/lagrangian/parcel/submodels/CloudFunctionObjects/PatchCollisionDensity/PatchCollisionDensity.C b/src/lagrangian/parcel/submodels/CloudFunctionObjects/PatchCollisionDensity/PatchCollisionDensity.C index c64aa32829..1e76b70e33 100644 --- a/src/lagrangian/parcel/submodels/CloudFunctionObjects/PatchCollisionDensity/PatchCollisionDensity.C +++ b/src/lagrangian/parcel/submodels/CloudFunctionObjects/PatchCollisionDensity/PatchCollisionDensity.C @@ -280,12 +280,12 @@ void Foam::PatchCollisionDensity::preEvolve() template -void Foam::PatchCollisionDensity::postPatch -( - const parcelType& p, - const polyPatch& pp -) +void Foam::PatchCollisionDensity::preFace(const parcelType& p) { + const fvMesh& mesh = this->owner().mesh(); + if (!p.onBoundaryFace(mesh)) return; + + const polyPatch& pp = mesh.boundaryMesh()[p.patch(mesh)]; if (pp.coupled()) return; const label patchi = pp.index(); diff --git a/src/lagrangian/parcel/submodels/CloudFunctionObjects/PatchCollisionDensity/PatchCollisionDensity.H b/src/lagrangian/parcel/submodels/CloudFunctionObjects/PatchCollisionDensity/PatchCollisionDensity.H index b1bae4be7c..a73459311e 100644 --- a/src/lagrangian/parcel/submodels/CloudFunctionObjects/PatchCollisionDensity/PatchCollisionDensity.H +++ b/src/lagrangian/parcel/submodels/CloudFunctionObjects/PatchCollisionDensity/PatchCollisionDensity.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2018-2022 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2018-2023 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -135,8 +135,8 @@ public: //- Pre-evolve hook virtual void preEvolve(); - //- Post-patch hook - virtual void postPatch(const parcelType& p, const polyPatch& pp); + //- Pre-face hook + virtual void preFace(const parcelType& p); };