/*---------------------------------------------------------------------------*\ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2015-2016 OpenCFD Ltd. ------------------------------------------------------------------------------- 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 3 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, see . Class Foam::InjectedParticleDistributionInjection Description Interrogates an injectedParticleCloud to convert the raw particle data into a set of 'binned' injectors. The bins are set according to the particle \c tag property, from which: - diameters are converted into \c general distributions with a user-specified bin width - raw velocity and diameter data are resampled and stored to provide variations per injector The mass to inject can be set according to the raw input data mass total by using the \c applyDistributionMassTotal switch Usage \verbatim model1 { type injectedParticleDistributionInjection; SOI 0; parcelBasisType mass; cloud eulerianParticleCloud; positionOffset (-0.025 2 -0.025); binWidth 0.1e-3; parcelsPerInjector 500; resampleSize 100; // optional applyDistributionMassTotal yes; // Placeholder only when using applyDistributionMassTotal massTotal 0; } \endverbatim Note The each injector location is assumed to be operating under steady conditions, i.e. using a constant flow rate profile SourceFiles InjectedParticleDistributionInjection.C See also Foam::injectedParticle Foam::injectedParticleCloud Foam::functionObjects::extractEulerianParticles Foam::distributionModels::general \*---------------------------------------------------------------------------*/ #ifndef InjectedParticleDistributionInjection_H #define InjectedParticleDistributionInjection_H #include "InjectionModel.H" #include "general.H" #include "Switch.H" #include "vectorList.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { /*---------------------------------------------------------------------------*\ Class InjectedParticleDistributionInjection Declaration \*---------------------------------------------------------------------------*/ template class InjectedParticleDistributionInjection : public InjectionModel { protected: // Protected data //- Name of cloud used to seed the new particles const word cloudName_; //- List of start time per injector scalarList startTime_; //- List of end time per injector scalarList endTime_; //- List of position per injector List position_; //- Position offset to apply to input positions vector positionOffset_; //- List of volume flow rate per injector [m3/s] scalarList volumeFlowRate_; //- List of parcel velocity per injector List U_; //- Bin width when generating particle distributions scalar binWidth_; //- List of size distribution model per injector PtrList sizeDistribution_; //- Target number of parcels to inject per injector scalar parcelsPerInjector_; //- Resample size label resampleSize_; //- Flag to apply mass calculated from distribution instead of // InjectionModel massTotal_ bool applyDistributionMassTotal_; //- Flag to suppress errors if particle injection site is out-of-bounds Switch ignoreOutOfBounds_; //- Running total of number of parcels injected label nParcelsInjected_; //- Number of parcels injected in last step (local proc only) label nParcelsInjected0_; //- Current injector label currentInjectori_; //- Current sample label currentSamplei_; // Protected Member Functions //- Initialise injectors void initialise(); public: //- Runtime type information TypeName("injectedParticleDistributionInjection"); // Constructors //- Construct from dictionary InjectedParticleDistributionInjection ( const dictionary& dict, CloudType& owner, const word& modelName ); //- Construct copy InjectedParticleDistributionInjection ( const InjectedParticleDistributionInjection& im ); //- Construct and return a clone virtual autoPtr> clone() const { return autoPtr> ( new InjectedParticleDistributionInjection(*this) ); } //- Destructor virtual ~InjectedParticleDistributionInjection(); // Member Functions //- Set injector locations when mesh is updated virtual void updateMesh(); //- Return the end-of-injection time scalar timeEnd() const; //- Number of parcels to introduce relative to SOI virtual label parcelsToInject(const scalar time0, const scalar time1); //- Volume of parcels to introduce relative to SOI virtual scalar volumeToInject(const scalar time0, const scalar time1); // Injection geometry //- Set the injection position and owner cell, tetFace and tetPt virtual void setPositionAndCell ( const label parcelI, const label nParcels, const scalar time, vector& position, label& cellOwner, label& tetFaceI, label& tetPtI ); //- Set the parcel properties virtual void setProperties ( const label parcelI, const label nParcels, const scalar time, typename CloudType::parcelType& parcel ); //- Flag to identify whether model fully describes the parcel virtual bool fullyDescribed() const; //- Return flag to identify whether or not injection of parcelI is // permitted virtual bool validInjection(const label parcelI); // I-O //- Write injection info void info(); }; // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace Foam // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #ifdef NoRepository # include "InjectedParticleDistributionInjection.C" #endif // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #endif // ************************************************************************* //