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()),
86 this->coeffDict().subDict(
"sizeDistribution"),
95 diameters_[i] = sizeDistribution_->sample();
102 template<
class CloudType>
110 referenceField_(im.referenceField_),
111 thresholdField_(im.thresholdField_),
112 positionsFile_(im.positionsFile_),
113 positions_(im.positions_),
114 injectorCoordinates_(im.injectorCoordinates_),
115 injectorCells_(im.injectorCells_),
116 injectorTetFaces_(im.injectorTetFaces_),
117 injectorTetPts_(im.injectorTetPts_),
118 massTotal_(im.massTotal_),
119 nParcelsPerInjector_(im.nParcelsPerInjector_),
120 nParcelsInjected_(im.nParcelsInjected_),
122 diameters_(im.diameters_),
123 sizeDistribution_(im.sizeDistribution_().
clone().ptr())
129 template<
class CloudType>
136 template<
class CloudType>
142 this->findCellAtPosition
145 injectorCoordinates_[i],
147 injectorTetFaces_[i],
154 template<
class CloudType>
161 template<
class CloudType>
168 if (
sum(nParcelsInjected_) < nParcelsPerInjector_*positions_.size())
170 return positions_.size();
179 template<
class CloudType>
186 if (
sum(nParcelsInjected_) < nParcelsPerInjector_*positions_.size())
188 return massTotal_/nParcelsPerInjector_;
197 template<
class CloudType>
210 const label injectorCelli = injectorCells_[parceli];
214 nParcelsInjected_[parceli] < nParcelsPerInjector_
215 && factor_*referenceField_[injectorCelli] > thresholdField_[injectorCelli]
218 coordinates = injectorCoordinates_[parceli];
219 celli = injectorCells_[parceli];
220 tetFacei = injectorTetFaces_[parceli];
221 tetPti = injectorTetPts_[parceli];
223 nParcelsInjected_[parceli]++;
228 template<
class CloudType>
241 parcel.d() = diameters_[parceli];
245 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 void setProperties(const label parceli, const label nParcels, const scalar time, typename CloudType::parcelType &parcel)
Set the parcel properties.
virtual ~FieldActivatedInjection()
Destructor.
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....
Accumulating histogram of values. Specified bin resolution automatic generation of bins.
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)
tmp< DimensionedField< TypeR, GeoMesh > > New(const tmp< DimensionedField< TypeR, GeoMesh >> &tdf1, const word &name, const dimensionSet &dimensions)