diff --git a/applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelFoam/createFields.H b/applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelFoam/createFields.H index d98e9369b8a87828a16dc020e59c12be469ba769..179ac149badfef1c97ec876a581d746f4195ce69 100644 --- a/applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelFoam/createFields.H +++ b/applications/solvers/lagrangian/incompressibleUncoupledKinematicParcelFoam/createFields.H @@ -1,4 +1,4 @@ - Info<< "Reading transportProperties\n" << endl; + Info<< "\nReading transportProperties\n" << endl; IOdictionary transportProperties ( @@ -31,7 +31,7 @@ rhoInfValue ); - Info<< "\nReading field U\n" << endl; + Info<< "Reading field U\n" << endl; volVectorField U ( IOobject @@ -127,7 +127,7 @@ if (HdotGradHheader.headerOk()) { - Info<< "\nReading field HdotGradH\n" << endl; + Info<< "Reading field HdotGradH" << endl; HdotGradHPtr_.reset ( diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C index 243b0ab371643a36e1a6ba00116a00aa7753f99f..9b44324461ba87abce6e45c553f9f52fab06b71d 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.C @@ -129,10 +129,11 @@ void Foam::InjectionModel<CloudType>::prepareForNextTimeStep template<class CloudType> -void Foam::InjectionModel<CloudType>::findCellAtPosition +bool Foam::InjectionModel<CloudType>::findCellAtPosition ( label& cellI, - vector& position + vector& position, + bool errorOnNotFound ) { const volVectorField& cellCentres = owner_.mesh().C(); @@ -176,17 +177,26 @@ void Foam::InjectionModel<CloudType>::findCellAtPosition if (procI == -1) { - FatalErrorIn - ( - "Foam::InjectionModel<CloudType>::findCellAtPosition" - "(" - "label&, " - "vector&" - ")" - )<< "Cannot find parcel injection cell. " - << "Parcel position = " << p0 << nl - << abort(FatalError); + if (errorOnNotFound) + { + FatalErrorIn + ( + "Foam::InjectionModel<CloudType>::findCellAtPosition" + "(" + "label&, " + "vector&" + ")" + ) << "Cannot find parcel injection cell. " + << "Parcel position = " << p0 << nl + << abort(FatalError); + } + else + { + return false; + } } + + return true; } diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H index 4c5d96804887bb5602f2f1220a47fdef47654022..ad3d4b1daeddba1bd4be74d814b4f79022c9eeec 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel/InjectionModel.H @@ -180,7 +180,12 @@ protected: //- Find the cell that contains the supplied position // Will modify position slightly towards the owner cell centroid to // ensure that it lies in a cell and not edge/face - virtual void findCellAtPosition(label& cellI, vector& position); + virtual bool findCellAtPosition + ( + label& cellI, + vector& position, + bool errorOnNotFound = true + ); //- Set number of particles to inject given parcel properties virtual scalar setNumberOfParticles diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.C index 9b9ec19084e474baca12f0d89176795014e18ab3..f64cdc22681c5282cb6547327e116b9781fc8dbf 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ManualInjection/ManualInjection.C @@ -25,6 +25,8 @@ License #include "ManualInjection.H" #include "mathematicalConstants.H" +#include "PackedBoolList.H" +#include "Switch.H" using namespace Foam::constant::mathematical; @@ -100,6 +102,40 @@ Foam::ManualInjection<CloudType>::ManualInjection ) ) { + Switch checkAndIgnoreOutOfBounds + ( + this->coeffDict().lookupOrDefault("checkAndIgnoreOutOfBounds", false) + ); + + label nRejected = 0; + + if (checkAndIgnoreOutOfBounds) + { + // Dummy cell + label cellI = -1; + + PackedBoolList keep(positions_.size(), true); + + forAll(positions_, pI) + { + if (!this->findCellAtPosition(cellI, positions_[pI], false)) + { + keep[pI] = false; + + nRejected++; + } + } + + if (nRejected > 0) + { + inplaceSubset(keep, positions_); + inplaceSubset(keep, diameters_); + + Info<< " " << nRejected + << " particles ignored, out of bounds." << endl; + } + } + // Construct parcel diameters forAll(diameters_, i) {