From 5d3db386e7d1666a70db7196d0a1e7bcd95d3755 Mon Sep 17 00:00:00 2001 From: andy Date: Tue, 3 Mar 2009 18:46:53 +0000 Subject: [PATCH] initial check-in of entrainment injection model --- .../makeBasicKinematicParcelInjectionModels.C | 15 +- ...cReactingMultiphaseParcelInjectionModels.C | 15 +- .../makeBasicReactingParcelInjectionModels.C | 15 +- .../makeBasicThermoParcelInjectionModels.C | 33 ++- .../EntrainmentInjection.C | 231 ++++++++++++++++++ .../EntrainmentInjection.H | 196 +++++++++++++++ 6 files changed, 488 insertions(+), 17 deletions(-) create mode 100755 src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/EntrainmentInjection/EntrainmentInjection.C create mode 100755 src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/EntrainmentInjection/EntrainmentInjection.H diff --git a/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/submodels/makeBasicKinematicParcelInjectionModels.C b/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/submodels/makeBasicKinematicParcelInjectionModels.C index c722ac91fd..ca6eea491e 100644 --- a/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/submodels/makeBasicKinematicParcelInjectionModels.C +++ b/src/lagrangian/intermediate/parcels/derived/basicKinematicParcel/submodels/makeBasicKinematicParcelInjectionModels.C @@ -27,9 +27,10 @@ License #include "basicKinematicParcel.H" #include "KinematicCloud.H" -#include "NoInjection.H" -#include "ManualInjection.H" #include "ConeInjection.H" +#include "EntrainmentInjection.H" +#include "ManualInjection.H" +#include "NoInjection.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -40,7 +41,13 @@ namespace Foam // Add instances of injection model to the table makeInjectionModelType ( - NoInjection, + ConeInjection, + KinematicCloud, + basicKinematicParcel + ); + makeInjectionModelType + ( + EntrainmentInjection, KinematicCloud, basicKinematicParcel ); @@ -52,7 +59,7 @@ namespace Foam ); makeInjectionModelType ( - ConeInjection, + NoInjection, KinematicCloud, basicKinematicParcel ); diff --git a/src/lagrangian/intermediate/parcels/derived/basicReactingMultiphaseParcel/submodels/makeBasicReactingMultiphaseParcelInjectionModels.C b/src/lagrangian/intermediate/parcels/derived/basicReactingMultiphaseParcel/submodels/makeBasicReactingMultiphaseParcelInjectionModels.C index 6d8b5aeac9..38b738d924 100644 --- a/src/lagrangian/intermediate/parcels/derived/basicReactingMultiphaseParcel/submodels/makeBasicReactingMultiphaseParcelInjectionModels.C +++ b/src/lagrangian/intermediate/parcels/derived/basicReactingMultiphaseParcel/submodels/makeBasicReactingMultiphaseParcelInjectionModels.C @@ -27,9 +27,10 @@ License #include "basicReactingMultiphaseParcel.H" #include "ReactingCloud.H" -#include "NoInjection.H" -#include "ManualInjection.H" #include "ConeInjection.H" +#include "EntrainmentInjection.H" +#include "ManualInjection.H" +#include "NoInjection.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -40,7 +41,13 @@ namespace Foam // Add instances of injection model to the table makeInjectionModelType ( - NoInjection, + ConeInjection, + KinematicCloud, + basicReactingMultiphaseParcel + ); + makeInjectionModelType + ( + EntrainmentInjection, KinematicCloud, basicReactingMultiphaseParcel ); @@ -52,7 +59,7 @@ namespace Foam ); makeInjectionModelType ( - ConeInjection, + NoInjection, KinematicCloud, basicReactingMultiphaseParcel ); diff --git a/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/submodels/makeBasicReactingParcelInjectionModels.C b/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/submodels/makeBasicReactingParcelInjectionModels.C index 1af1e37088..b5a7e83610 100644 --- a/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/submodels/makeBasicReactingParcelInjectionModels.C +++ b/src/lagrangian/intermediate/parcels/derived/basicReactingParcel/submodels/makeBasicReactingParcelInjectionModels.C @@ -27,9 +27,10 @@ License #include "basicReactingParcel.H" #include "ReactingCloud.H" -#include "NoInjection.H" -#include "ManualInjection.H" #include "ConeInjection.H" +#include "EntrainmentInjection.H" +#include "ManualInjection.H" +#include "NoInjection.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -40,7 +41,13 @@ namespace Foam // Add instances of injection model to the table makeInjectionModelType ( - NoInjection, + ConeInjection, + KinematicCloud, + basicReactingParcel + ); + makeInjectionModelType + ( + EntrainmentInjection, KinematicCloud, basicReactingParcel ); @@ -52,7 +59,7 @@ namespace Foam ); makeInjectionModelType ( - ConeInjection, + NoInjection, KinematicCloud, basicReactingParcel ); diff --git a/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/submodels/makeBasicThermoParcelInjectionModels.C b/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/submodels/makeBasicThermoParcelInjectionModels.C index f2f433b021..feb948d66c 100644 --- a/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/submodels/makeBasicThermoParcelInjectionModels.C +++ b/src/lagrangian/intermediate/parcels/derived/basicThermoParcel/submodels/makeBasicThermoParcelInjectionModels.C @@ -26,9 +26,11 @@ License #include "basicThermoParcel.H" #include "ThermoCloud.H" -#include "NoInjection.H" -#include "ManualInjection.H" + #include "ConeInjection.H" +#include "EntrainmentInjection.H" +#include "ManualInjection.H" +#include "NoInjection.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -37,11 +39,32 @@ namespace Foam makeInjectionModel(KinematicCloud); // Add instances of injection model to the table - makeInjectionModelType(NoInjection, KinematicCloud, basicThermoParcel); - makeInjectionModelType(ManualInjection, KinematicCloud, basicThermoParcel); + makeInjectionModelType + ( + ConeInjection, + KinematicCloud, + basicThermoParcel + ); + makeInjectionModelType + ( + EntrainmentInjection, + KinematicCloud, + basicThermoParcel + ); + makeInjectionModelType + ( + ManualInjection, + KinematicCloud, + basicThermoParcel + ); + makeInjectionModelType + ( + NoInjection, + KinematicCloud, + basicThermoParcel + ); - makeInjectionModelType(ConeInjection, KinematicCloud, basicThermoParcel); }; diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/EntrainmentInjection/EntrainmentInjection.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/EntrainmentInjection/EntrainmentInjection.C new file mode 100755 index 0000000000..758a14ee33 --- /dev/null +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/EntrainmentInjection/EntrainmentInjection.C @@ -0,0 +1,231 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2008 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "EntrainmentInjection.H" +#include "volFields.H" + +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // + +template +Foam::label Foam::EntrainmentInjection::parcelsToInject +( + const scalar time0, + const scalar time1 +) const +{ + if (sum(nParcelsInjected_) < nParcelsPerInjector_*positions_.size()) + { + return positions_.size(); + } + else + { + return 0; + } +} + + +template +Foam::scalar Foam::EntrainmentInjection::volumeToInject +( + const scalar time0, + const scalar time1 +) const +{ + if (sum(nParcelsInjected_) < nParcelsPerInjector_*positions_.size()) + { + return this->volumeTotal_/nParcelsPerInjector_; + } + else + { + return 0; + } +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template +Foam::EntrainmentInjection::EntrainmentInjection +( + const dictionary& dict, + CloudType& owner +) +: + InjectionModel(dict, owner, typeName), + c_(readScalar(this->coeffDict().lookup("c"))), + rhoc_ + ( + owner.db().objectRegistry::lookupObject + ( + this->coeffDict().lookup("rhoc") + ) + ), + rhol_ + ( + owner.db().objectRegistry::lookupObject + ( + this->coeffDict().lookup("rhol") + ) + ), + Uc_ + ( + owner.db().objectRegistry::lookupObject + ( + this->coeffDict().lookup("Uc") + ) + ), + positionsFile_(this->coeffDict().lookup("positionsFile")), + positions_ + ( + IOobject + ( + positionsFile_, + owner.db().time().constant(), + owner.mesh(), + IOobject::MUST_READ, + IOobject::NO_WRITE + ) + ), + injectorCells_(positions_.size()), + nParcelsPerInjector_ + ( + readLabel(this->coeffDict().lookup("parcelsPerInjector")) + ), + nParcelsInjected_(positions_.size(), 0), + U0_(this->coeffDict().lookup("U0")), + diameters_(positions_.size()), + parcelPDF_ + ( + pdf::New + ( + this->coeffDict().subDict("parcelPDF"), + owner.rndGen() + ) + ) +{ + // Construct parcel diameters - one per injector cell + forAll(diameters_, i) + { + diameters_[i] = parcelPDF_->sample(); + } + + // Determine total volume of particles to inject + this->volumeTotal_ = + nParcelsPerInjector_ + *sum(pow3(diameters_)) + *mathematicalConstant::pi/6.0; + + // Set/cahce the injector cells + forAll(positions_, i) + { + this->findCellAtPosition + ( + injectorCells_[i], + positions_[i] + ); + } +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +template +Foam::EntrainmentInjection::~EntrainmentInjection() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template +bool Foam::EntrainmentInjection::active() const +{ + return true; +} + + +template +Foam::scalar Foam::EntrainmentInjection::timeEnd() const +{ + return GREAT; +} + + +template +void Foam::EntrainmentInjection::setPositionAndCell +( + const label parcelI, + const scalar, + vector& position, + label& cellOwner +) +{ + position = positions_[parcelI]; + cellOwner = injectorCells_[parcelI]; +} + + +template +Foam::vector Foam::EntrainmentInjection::velocity +( + const label, + const scalar +) +{ + return U0_; +} + + +template +Foam::scalar Foam::EntrainmentInjection::d0 +( + const label parcelI, + const scalar +) const +{ + return diameters_[parcelI]; +} + + +template +bool Foam::EntrainmentInjection::validInjection(const label parcelI) +{ + + const label cellI = injectorCells_[parcelI]; + if + ( + nParcelsInjected_[parcelI] < nParcelsPerInjector_ + && rhol_[cellI] < c_*0.5*rhoc_[cellI]*magSqr(Uc_[cellI]) + ) + { + nParcelsInjected_[parcelI]++; + return true; + } + + return false; +} + + +// ************************************************************************* // diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/EntrainmentInjection/EntrainmentInjection.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/EntrainmentInjection/EntrainmentInjection.H new file mode 100755 index 0000000000..845a0d58bc --- /dev/null +++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/EntrainmentInjection/EntrainmentInjection.H @@ -0,0 +1,196 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2008 OpenCFD Ltd. + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM; if not, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::EntrainmentInjection + +Description + +SourceFiles + EntrainmentInjection.C + +\*---------------------------------------------------------------------------*/ + +#ifndef EntrainmentInjection_H +#define EntrainmentInjection_H + +#include "InjectionModel.H" +#include "pdf.H" +#include "volFieldsFwd.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class EntrainmentInjection Declaration +\*---------------------------------------------------------------------------*/ + +template +class EntrainmentInjection +: + public InjectionModel +{ + // Private data + + // Model parameters + + //- Injection permission: rhol <= c_*0.5*rho*|U|^2 + const scalar c_; + + //- Carrier phase density field + const volScalarField& rhoc_; + + //- Lagrangian phase density field + const scalarField& rhol_; + + //- Carrier phase velocity field + const vectorField& Uc_; + + + // Injector properties + + //- Name of file containing positions data + const word positionsFile_; + + //- Field of injector (x,y,z) positions + vectorIOField positions_; + + //- Field of cell labels corresoponding to injector positions + labelField injectorCells_; + + //- nParcels per injector + const label nParcelsPerInjector_; + + //- Field of number of parcels injected for each injector + labelField nParcelsInjected_; + + + // Parcel properties + + //- Initial parcel velocity + const vector U0_; + + //- Field of parcel diameters + scalarField diameters_; + + //- Parcel size PDF model + const autoPtr parcelPDF_; + + +protected: + + // Protected member functions + + //- Number of parcels to introduce over the time step + label parcelsToInject + ( + const scalar time0, + const scalar time1 + ) const; + + //- Volume of parcels to introduce over the time step + scalar volumeToInject + ( + const scalar time0, + const scalar time1 + ) const; + + +public: + + //- Runtime type information + TypeName("EntrainmentInjection"); + + + // Constructors + + //- Construct from dictionary + EntrainmentInjection + ( + const dictionary& dict, + CloudType& owner + ); + + + // Destructor + virtual ~EntrainmentInjection(); + + + // Member Functions + + //- Flag to indicate whether model activates injection model + bool active() const; + + //- Return the end-of-injection time + scalar timeEnd() const; + + + // Injection geometry + + //- Set the injection position and owner cell + void setPositionAndCell + ( + const label parcelI, + const scalar time, + vector& position, + label& cellOwner + ); + + //- Return the velocity of the parcel to introduce at a time + vector velocity + ( + const label parcelI, + const scalar time + ); + + //- Return the diameter of the parcel to introduce at a time + scalar d0 + ( + const label parcelI, + const scalar time + ) const; + + //- Return flag to identify whether or not injection in cellI is + // permitted + bool validInjection(const label parcelI); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository +# include "EntrainmentInjection.C" +#endif + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* //