From dda4777ebe5a8694b38383a40c61059c4f223059 Mon Sep 17 00:00:00 2001 From: andy <a.heather@opencfd.co.uk> Date: Fri, 19 Dec 2008 13:11:26 +0000 Subject: [PATCH] moved setInjectorCellAndPosition functionality to injection model --- .../Templates/KinematicCloud/KinematicCloud.C | 61 +------------------ .../Templates/KinematicCloud/KinematicCloud.H | 7 --- .../Templates/ReactingCloud/ReactingCloud.C | 2 +- .../InjectionModel/InjectionModel.C | 51 ++++++++++++++++ .../InjectionModel/InjectionModel.H | 8 +++ 5 files changed, 61 insertions(+), 68 deletions(-) diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C index dc32224a008..cf651a54e12 100644 --- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C +++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C @@ -35,65 +35,6 @@ License // * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * * // -template<class ParcelType> -void Foam::KinematicCloud<ParcelType>::setInjectorCellAndPosition -( - label& pCell, - vector& pPosition -) -{ - const vector originalPosition = pPosition; - - bool foundCell = false; - - pCell = mesh_.findCell(pPosition); - - if (pCell >= 0) - { - const vector& C = mesh_.C()[pCell]; - pPosition += 1.0e-6*(C - pPosition); - - foundCell = mesh_.pointInCell - ( - pPosition, - pCell - ); - } - reduce(foundCell, orOp<bool>()); - - // Last chance - find nearest cell and try that one - // - the point is probably on an edge - if (!foundCell) - { - pCell = mesh_.findNearestCell(pPosition); - - if (pCell >= 0) - { - const vector& C = mesh_.C()[pCell]; - pPosition += 1.0e-6*(C - pPosition); - - foundCell = mesh_.pointInCell - ( - pPosition, - pCell - ); - } - reduce(foundCell, orOp<bool>()); - } - - if (!foundCell) - { - FatalErrorIn - ( - "void KinematicCloud<ParcelType>::findInjectorCell" - "(label&, vector&)" - )<< "Cannot find parcel injection cell. " - << "Parcel position = " << originalPosition << nl - << abort(FatalError); - } -} - - template<class ParcelType> Foam::scalar Foam::KinematicCloud<ParcelType>::setNumberOfParticles ( @@ -419,7 +360,7 @@ void Foam::KinematicCloud<ParcelType>::inject // Determine the injection cell label pCell = -1; - setInjectorCellAndPosition(pCell, pPosition); + this->injection().findInjectorCellAndPosition(pCell, pPosition); if (pCell >= 0) { diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H index ebd298c44ef..f282b3f99f0 100644 --- a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H +++ b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H @@ -223,13 +223,6 @@ protected: // Protected member functions - //- Set parcel position and cell into which parcel is introduced - void setInjectorCellAndPosition - ( - label& pCell, - vector& pPosition - ); - //- Set the number of particles per parcel scalar setNumberOfParticles ( diff --git a/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.C b/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.C index 1f358d6f6cf..3a2d27df7bf 100644 --- a/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.C +++ b/src/lagrangian/intermediate/clouds/Templates/ReactingCloud/ReactingCloud.C @@ -269,7 +269,7 @@ void Foam::ReactingCloud<ParcelType>::inject // Determine the injection cell label pCell = -1; - this->setInjectorCellAndPosition(pCell, pPosition); + this->injection().findInjectorCellAndPosition(pCell, pPosition); if (pCell >= 0) { diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C index d6605d6f46d..f23dc19c0a1 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C @@ -159,6 +159,57 @@ void Foam::InjectionModel<CloudType>::prepareForNextTimeStep } +template<class CloudType> +void Foam::InjectionModel<CloudType>::findInjectorCellAndPosition +( + label& cellI, + vector& position +) +{ + const vector p0 = position; + + bool foundCell = false; + + cellI = owner_.mesh().findCell(position); + + if (cellI >= 0) + { + const vector& C = owner_.mesh().C()[cellI]; + position += 1.0e-6*(C - position); + + foundCell = owner_.mesh().pointInCell(position, cellI); + } + reduce(foundCell, orOp<bool>()); + + // Last chance - find nearest cell and try that one + // - the point is probably on an edge + if (!foundCell) + { + cellI = owner_.mesh().findNearestCell(position); + + if (cellI >= 0) + { + const vector& C = owner_.mesh().C()[cellI]; + position += 1.0e-6*(C - position); + + foundCell = owner_.mesh().pointInCell(position, cellI); + } + reduce(foundCell, orOp<bool>()); + } + + if (!foundCell) + { + FatalErrorIn + ( + "InjectionModel<CloudType>::setInjectorCellAndPosition" + "(label&, vector&)" + )<< "Cannot find parcel injection cell. " + << "Parcel position = " << p0 << nl + << abort(FatalError); + } +} + + // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #include "NewInjectionModel.C" diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H index f19d59723fb..0b00ebeda95 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H @@ -208,6 +208,14 @@ public: // Injection geometry + //- Find the cell that contains the injector position + // Will modify position slightly towards the owner cell centroid + virtual void findInjectorCellAndPosition + ( + label& cellI, + vector& position + ); + //- Return the injection position virtual vector position ( -- GitLab