diff --git a/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C b/src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C index dc32224a008a363eec88c75452cdc59bf479c080..cf651a54e12aa581bdf47fcd6b703681e15fb71d 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 ebd298c44ef8e6444a32e212b3a5ae2ea2f941c3..f282b3f99f0f38bbed6a11497b485f81c561b1b3 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 1f358d6f6cf2c5fa4b5d1c90fb6a1b727d71f457..3a2d27df7bfa0f8baf34aa447cba5e574b311849 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 d6605d6f46d0a1d527b22730a8640c0c6a1ca34a..f23dc19c0a1d9aeb8a8430bd7afb4de79920559f 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 f19d59723fb955cf9c3e5560fbda1274f2fdee72..0b00ebeda95c90c63448921a79cdd16e12744962 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 (