From 1c1a69cabc6b32b95f91fc7c974bf161450c2f4a Mon Sep 17 00:00:00 2001 From: Henry Weller <http://cfd.direct> Date: Thu, 26 Jan 2017 15:34:51 +0000 Subject: [PATCH] patchInjectionBase: Improved particle positioning Patch contributed by Timo Niemi, VTT. Resolves bug-report https://bugs.openfoam.org/view.php?id=2442 --- .../PatchInjection/patchInjectionBase.C | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/PatchInjection/patchInjectionBase.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/PatchInjection/patchInjectionBase.C index b1bd72bdaad..293010fd137 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/PatchInjection/patchInjectionBase.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/PatchInjection/patchInjectionBase.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013-2016 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2017 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -201,16 +201,26 @@ void Foam::patchInjectionBase::setPositionAndCell // Position perturbed away from face (into domain) const scalar a = rnd.position(scalar(0.1), scalar(0.5)); const vector& pc = mesh.cellCentres()[cellOwner]; - const vector d = mag(pf - pc)*patchNormal_[facei]; + const vector d = + mag((pf - pc) & patchNormal_[facei])*patchNormal_[facei]; position = pf - a*d; - //Try to find tetFacei and tetPti in the current position + // Try to find tetFacei and tetPti in the current position mesh.findTetFacePt(cellOwner, position, tetFacei, tetPti); - //Search failed, choose a random position + // tetFacei and tetPti not found, check if the cell has changed if (tetFacei == -1 ||tetPti == -1) { + mesh.findCellFacePt(position, cellOwner, tetFacei, tetPti); + } + + // Both searches failed, choose a random position within + // the original cell + if (tetFacei == -1 ||tetPti == -1) + { + // Reset cellOwner + cellOwner = cellOwners_[facei]; const scalarField& V = mesh.V(); // Construct cell tet indices -- GitLab