37 template<
class CloudType>
44 this->subModelProperties(),
52 this->subModelProperties(),
60 this->subModelProperties(),
69 template<
class CloudType>
81 packingModel_(
nullptr),
82 dampingModel_(
nullptr),
83 isotropyModel_(
nullptr)
90 <<
"MPPIC modelling not available for steady state calculations"
99 this->deleteLostParticles();
105 template<
class CloudType>
113 packingModel_(
c.packingModel_->clone()),
114 dampingModel_(
c.dampingModel_->clone()),
115 isotropyModel_(
c.isotropyModel_->clone())
119 template<
class CloudType>
128 packingModel_(
nullptr),
129 dampingModel_(
nullptr),
130 isotropyModel_(
nullptr)
136 template<
class CloudType>
143 template<
class CloudType>
150 clone(this->
name() +
"Copy").ptr()
156 template<
class CloudType>
159 this->cloudReset(cloudCopyPtr_());
160 cloudCopyPtr_.clear();
164 template<
class CloudType>
169 typename parcelType::trackingData td(*
this);
171 this->
solve(*
this, td);
176 template<
class CloudType>
177 template<
class TrackCloudType>
180 TrackCloudType&
cloud,
181 typename parcelType::trackingData& td
188 td.part() = parcelType::trackingData::tpLinearTrack;
189 CloudType::move(
cloud, td, this->db().time().deltaTValue());
196 this->forces().setCalcNonCoupled(
false);
197 this->forces().setCalcCoupled(
false);
203 if (dampingModel_->active())
205 if (this->
mesh().moving())
208 <<
"MPPIC damping modelling does not support moving meshes."
213 td.updateAverages(
cloud);
216 dampingModel_->cacheFields(
true);
219 td.part() = parcelType::trackingData::tpDampingNoTrack;
220 CloudType::move(
cloud, td, this->db().time().deltaTValue());
223 td.part() = parcelType::trackingData::tpCorrectTrack;
224 CloudType::move(
cloud, td, this->db().time().deltaTValue());
227 dampingModel_->cacheFields(
false);
234 if (packingModel_->active())
236 if (this->
mesh().moving())
239 <<
"MPPIC packing modelling does not support moving meshes."
244 td.updateAverages(
cloud);
245 packingModel_->cacheFields(
true);
246 td.part() = parcelType::trackingData::tpPackingNoTrack;
247 CloudType::move(
cloud, td, this->db().time().deltaTValue());
248 td.part() = parcelType::trackingData::tpCorrectTrack;
249 CloudType::move(
cloud, td, this->db().time().deltaTValue());
250 packingModel_->cacheFields(
false);
257 if (isotropyModel_->active())
260 td.updateAverages(
cloud);
263 isotropyModel_->calculate();
271 this->updateCellOccupancy();
274 this->forces().setCalcNonCoupled(
true);
275 this->forces().setCalcCoupled(this->
solution().coupled());
279 template<
class CloudType>
286 const scalar alphaMin =
gMin(
alpha().primitiveField());
289 Info<<
" Min cell volume fraction = " << alphaMin <<
endl;
316 Info<<
" Min dense number of parcels = " << nMin <<
endl;