32 template<
class CloudType>
39 if ((time0 >= 0.0) && (time0 < duration_))
41 const scalar targetVolume = volumeFlowRate_().integrate(0, time1);
43 const label targetParcels =
44 parcelsPerInjector_*targetVolume/this->volumeTotal_;
46 const label nToInject = targetParcels - nInjected_;
48 nInjected_ += nToInject;
50 return positions_.size()*nToInject;
59 template<
class CloudType>
66 if ((time0 >= 0.0) && (time0 < duration_))
68 return volumeFlowRate_().integrate(time0, time1);
79 template<
class CloudType>
87 positionsFile_(this->coeffDict().lookup(
"positionsFile")),
93 owner.db().time().constant(),
99 injectorCells_(positions_.size()),
100 axesFile_(this->coeffDict().lookup(
"axesFile")),
106 owner.db().time().constant(),
112 duration_(
readScalar(this->coeffDict().lookup(
"duration"))),
115 readScalar(this->coeffDict().lookup(
"parcelsPerInjector"))
153 this->coeffDict().subDict(
"parcelPDF"),
157 nInjected_(this->parcelsAddedTotal()),
158 tanVec1_(positions_.size()),
159 tanVec2_(positions_.size())
165 axes_[i] /=
mag(axes_[i]);
167 vector tangent = vector::zero;
168 scalar magTangent = 0.0;
170 while (magTangent < SMALL)
172 vector v = this->owner().rndGen().vector01();
174 tangent = v - (v & axes_[i])*axes_[i];
175 magTangent =
mag(tangent);
178 tanVec1_[i] = tangent/magTangent;
179 tanVec2_[i] = axes_[i]^tanVec1_[i];
183 this->volumeTotal_ = volumeFlowRate_().integrate(0.0, duration_);
188 this->findCellAtPosition
199 template<
class CloudType>
206 template<
class CloudType>
213 template<
class CloudType>
216 return this->SOI_ + duration_;
220 template<
class CloudType>
230 const label i = parcelI%positions_.size();
232 position = positions_[i];
233 cellOwner = injectorCells_[i];
237 template<
class CloudType>
243 typename CloudType::parcelType&
parcel
247 const label i = parcelI%positions_.size();
251 scalar t = time - this->SOI_;
252 scalar ti = thetaInner_().value(t);
253 scalar to = thetaOuter_().value(t);
254 scalar coneAngle = this->owner().rndGen().scalar01()*(to - ti) + ti;
256 coneAngle *= deg2Rad;
257 scalar alpha =
sin(coneAngle);
258 scalar dcorr =
cos(coneAngle);
262 vector dirVec = dcorr*axes_[i];
265 dirVec /=
mag(dirVec);
267 parcel.U() = Umag_().value(t)*dirVec;
270 parcel.d() = parcelPDF_().sample();
274 template<
class CloudType>
281 template<
class CloudType>