37template<
class CloudType>
44 this->subModelProperties(),
52 this->subModelProperties(),
60 this->subModelProperties(),
69template<
class CloudType>
81 packingModel_(nullptr),
82 dampingModel_(nullptr),
83 isotropyModel_(nullptr)
90 <<
"MPPIC modelling not available for steady state calculations"
105template<
class CloudType>
113 packingModel_(c.packingModel_->clone()),
114 dampingModel_(c.dampingModel_->clone()),
115 isotropyModel_(c.isotropyModel_->clone())
119template<
class CloudType>
128 packingModel_(nullptr),
129 dampingModel_(nullptr),
130 isotropyModel_(nullptr)
136template<
class CloudType>
143template<
class CloudType>
150 clone(this->
name() +
"Copy").ptr()
156template<
class CloudType>
159 this->cloudReset(cloudCopyPtr_());
160 cloudCopyPtr_.clear();
164template<
class CloudType>
171 this->
solve(*
this, td);
176template<
class CloudType>
177template<
class TrackCloudType>
188 td.part() = parcelType::trackingData::tpLinearTrack;
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;
223 td.part() = parcelType::trackingData::tpCorrectTrack;
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;
248 td.part() = parcelType::trackingData::tpCorrectTrack;
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());
279template<
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;
const List< DynamicList< molecule * > > & cellOccupancy
const uniformDimensionedVectorField & g
void deleteLostParticles()
Remove lost particles from cloud and delete.
Templated base class for dsmc cloud.
void info() const
Print cloud information.
Base class for collisional damping models.
Base class for collisional return-to-isotropy models.
Adds MPPIC modelling to kinematic clouds.
void setModels()
Set cloud sub-models.
void storeState()
Store the current cloud state.
virtual ~MPPICCloud()
Destructor.
void evolve()
Evolve the cloud.
void restoreState()
Reset the current cloud to the previously stored state.
Base class for packing models.
A cloud is a registry collection of lagrangian particles.
const motionSolver & motion() const
Return the motionSolver.
Class used to pass data into container.
Reads fields from the time directories and adds them to the mesh database for further post-processing...
Mesh data needed to do the Finite Volume discretisation.
Selector class for relaxation factors, solver type and solution.
A class for managing temporary objects.
A class for handling words, derived from Foam::string.
const volScalarField & mu
bool coupled(solutionDict.getOrDefault("coupledEnergyField", false))
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
messageStream Info
Information stream (stdout output on master, null elsewhere)
void readFields(const typename GeoFieldType::Mesh &mesh, const IOobjectList &objects, const wordHashSet &selectedFields, LIFOStack< regIOobject * > &storedObjects)
Read the selected GeometricFields of the templated type.
Ostream & endl(Ostream &os)
Add newline and flush stream.
void reduce(const List< UPstream::commsStruct > &comms, T &value, const BinaryOp &bop, const int tag, const label comm)
Type gMin(const FieldField< Field, Type > &f)
word name(const expressions::valueTypeCode typeCode)
A word representation of a valueTypeCode. Empty for INVALID.
errorManipArg< error, int > exit(error &err, const int errNo=1)
Type gMax(const FieldField< Field, Type > &f)
dimensionedScalar alphaMax("alphaMax", dimless/dimTime, laminarTransport)
#define forAll(list, i)
Loop across all elements in list.
const word cloudName(propsDict.get< word >("cloud"))