34 template<
class CloudType>
43 factor_(this->coeffDict().template lookup<scalar>(
"factor")),
48 this->coeffDict().lookup(
"referenceField")
55 this->coeffDict().lookup(
"thresholdField")
58 positionsFile_(this->coeffDict().lookup(
"positionsFile")),
64 owner.db().time().constant(),
70 injectorCoordinates_(positions_.size()),
71 injectorCells_(positions_.size()),
72 injectorTetFaces_(positions_.size()),
73 injectorTetPts_(positions_.size()),
74 massTotal_(this->readMassTotal(
dict, owner)),
77 this->coeffDict().template lookup<
label>(
"parcelsPerInjector")
79 nParcelsInjected_(positions_.size(), 0),
80 U0_(this->coeffDict().lookup(
"U0")),
81 diameters_(positions_.size()),
87 this->coeffDict().subDict(
"sizeDistribution"),
96 diameters_[i] = sizeDistribution_->sample();
103 template<
class CloudType>
111 referenceField_(im.referenceField_),
112 thresholdField_(im.thresholdField_),
113 positionsFile_(im.positionsFile_),
114 positions_(im.positions_),
115 injectorCoordinates_(im.injectorCoordinates_),
116 injectorCells_(im.injectorCells_),
117 injectorTetFaces_(im.injectorTetFaces_),
118 injectorTetPts_(im.injectorTetPts_),
119 massTotal_(im.massTotal_),
120 nParcelsPerInjector_(im.nParcelsPerInjector_),
121 nParcelsInjected_(im.nParcelsInjected_),
123 diameters_(im.diameters_),
124 sizeDistribution_(im.sizeDistribution_, false)
130 template<
class CloudType>
137 template<
class CloudType>
143 this->findCellAtPosition
146 injectorCoordinates_[i],
148 injectorTetFaces_[i],
155 template<
class CloudType>
162 template<
class CloudType>
169 if (
sum(nParcelsInjected_) < nParcelsPerInjector_*positions_.size())
171 return positions_.size();
180 template<
class CloudType>
187 if (
sum(nParcelsInjected_) < nParcelsPerInjector_*positions_.size())
189 return massTotal_/nParcelsPerInjector_;
198 template<
class CloudType>
211 const label injectorCelli = injectorCells_[parceli];
215 nParcelsInjected_[parceli] < nParcelsPerInjector_
216 && factor_*referenceField_[injectorCelli] > thresholdField_[injectorCelli]
219 coordinates = injectorCoordinates_[parceli];
220 celli = injectorCells_[parceli];
221 tetFacei = injectorTetFaces_[parceli];
222 tetPti = injectorTetPts_[parceli];
224 nParcelsInjected_[parceli]++;
229 template<
class CloudType>
235 typename CloudType::parcelType::trackingData& td,
243 parcel.d() = diameters_[parceli];
247 template<
class CloudType>
#define forAll(list, i)
Loop across all elements in list.
Templated base class for dsmc cloud.
ParcelType parcelType
Type of parcel the cloud was instantiated for.
Injection at specified positions, with the conditions:
virtual void topoChange()
Set injector locations when mesh is updated.
virtual ~FieldActivatedInjection()
Destructor.
virtual void setProperties(const label parceli, const label nParcels, const scalar time, typename CloudType::parcelType::trackingData &td, typename CloudType::parcelType &parcel)
Set the parcel properties.
virtual label nParcelsToInject(const scalar time0, const scalar time1)
Number of parcels to introduce relative to SOI.
FieldActivatedInjection(const dictionary &dict, CloudType &owner, const word &modelName)
Construct from dictionary.
virtual void setPositionAndCell(const label parceli, const label nParcels, const scalar time, barycentric &coordinates, label &celli, label &tetFacei, label &tetPti, label &facei)
Set the injection position and owner cell, tetFace and tetPt.
virtual bool fullyDescribed() const
Flag to identify whether model fully describes the parcel.
scalar timeEnd() const
Return the end-of-injection time.
virtual scalar massToInject(const scalar time0, const scalar time1)
Parcel mass to introduce relative to SOI.
Generic GeometricField class.
IOobject defines the attributes of an object for which implicit objectRegistry management is supporte...
Templated injection model class.
A list of keyword definitions, which are a keyword followed by any number of values (e....
Base class for statistical distributions.
Registry of regIOobjects.
A class for handling words, derived from string.
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
dimensioned< Type > sum(const DimensionedField< Type, GeoMesh > &df)
const dimensionSet dimLength
tmp< DimensionedField< TypeR, GeoMesh > > New(const tmp< DimensionedField< TypeR, GeoMesh >> &tdf1, const word &name, const dimensionSet &dimensions)
randomGenerator rndGen(653213)