37template<
class CloudType>
44 this->subModelProperties(),
52 this->subModelProperties(),
60 this->subModelProperties(),
69template<
class CloudType>
70Foam::MPPICCloud<CloudType>::MPPICCloud
81 packingModel_(nullptr),
82 dampingModel_(nullptr),
83 isotropyModel_(nullptr)
90 <<
"MPPIC modelling not available for steady state calculations"
105template<
class CloudType>
106Foam::MPPICCloud<CloudType>::MPPICCloud
119template<
class CloudType>
120Foam::MPPICCloud<CloudType>::MPPICCloud
128 packingModel_(nullptr),
129 dampingModel_(nullptr),
136template<
class CloudType>
143template<
class CloudType>
148 static_cast<MPPICCloud<CloudType>*
>
156template<
class CloudType>
160 cloudCopyPtr_.clear();
164template<
class CloudType>
169 typename parcelType::trackingData
td(*
this);
176template<
class CloudType>
177template<
class TrackCloudType>
180 TrackCloudType& cloud,
181 typename parcelType::trackingData&
td
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."
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."
245 packingModel_->cacheFields(
true);
246 td.part() = parcelType::trackingData::tpPackingNoTrack;
248 td.part() = parcelType::trackingData::tpCorrectTrack;
250 packingModel_->cacheFields(
false);
257 if (isotropyModel_->active())
271 this->updateCellOccupancy();
274 this->forces().setCalcNonCoupled(
true);
279template<
class CloudType>
288 Log_ <<
" Min cell volume fraction = " <<
limits.min() <<
nl
315 Log_<<
" Min dense number of parcels = " << nMin <<
endl;
const word cloudName(propsDict.get< word >("cloud"))
const List< DynamicList< molecule * > > & cellOccupancy
const uniformDimensionedVectorField & g
void deleteLostParticles()
Remove lost particles from cloud and delete.
void move(TrackCloudType &cloud, typename ParticleType::trackingData &td, const scalar trackTime)
Move the particles.
void cloudReset(const Cloud< ParticleType > &c)
Reset the particles.
const word & cloudName() const
const fvMesh & mesh() const
particle::trackingData trackingData
static void readFields(Cloud< DSMCParcel< particle > > &c)
Base class for collisional damping models.
const objectRegistry & db() const noexcept
Return the local objectRegistry.
Base class for collisional return-to-isotropy models.
Adds MPPIC modelling to kinematic clouds.
void setModels()
Set cloud sub-models.
void motion(TrackCloudType &cloud, typename parcelType::trackingData &td)
Particle motion.
void storeState()
Store the current cloud state.
autoPtr< IsotropyModel< MPPICCloud< CloudType > > > isotropyModel_
Exchange model.
virtual ~MPPICCloud()
Destructor.
virtual autoPtr< Cloud< parcelType > > clone(const word &name)
Construct and return clone based on (this) with new name.
void evolve()
Evolve the cloud.
autoPtr< PackingModel< MPPICCloud< CloudType > > > packingModel_
Packing model.
void restoreState()
Reset the current cloud to the previously stored state.
autoPtr< DampingModel< MPPICCloud< CloudType > > > dampingModel_
Damping model.
Base class for packing models.
A cloud is a registry collection of lagrangian particles.
Mesh data needed to do the Finite Volume discretisation.
const Time & time() const noexcept
Return time registry.
Selector class for relaxation factors, solver type and solution.
A class for managing temporary objects.
A class for handling words, derived from Foam::string.
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
wallPoints::trackData td(isBlockedFace, regionToBlockSize)
#define Log_
Report write to Foam::Info if the class log switch is true.
const dimensionedScalar c
Speed of light in a vacuum.
tmp< DimensionedField< TypeR, GeoMesh > > New(const tmp< DimensionedField< TypeR, GeoMesh > > &tf1, const word &name, const dimensionSet &dimensions, const bool initCopy=false)
Global function forwards to reuseTmpDimensionedField::New.
DSMCCloud< dsmcParcel > CloudType
GeometricField< vector, fvPatchField, volMesh > volVectorField
void readFields(const typename GeoFieldType::Mesh &mesh, const IOobjectList &objects, const NameMatchPredicate &selectedFields, DynamicList< regIOobject * > &storedObjects)
Read the selected GeometricFields of the templated type and store on the objectRegistry.
GeometricField< scalar, fvPatchField, volMesh > volScalarField
Ostream & endl(Ostream &os)
Add newline and flush stream.
void reduce(T &value, BinaryOp bop, const int tag=UPstream::msgType(), const int communicator=UPstream::worldComm)
Reduce inplace (cf. MPI Allreduce).
MinMax< Type > gMinMax(const FieldField< Field, Type > &f)
error FatalError
Error stream (stdout output on all processes), with additional 'FOAM FATAL ERROR' header text and sta...
word name(const expressions::valueTypeCode typeCode)
A word representation of a valueTypeCode. Empty for expressions::valueTypeCode::INVALID.
errorManipArg< error, int > exit(error &err, const int errNo=1)
dimensioned< vector > dimensionedVector
Dimensioned vector obtained from generic dimensioned type.
constexpr char nl
The newline '\n' character (0x0a).
#define forAll(list, i)
Loop across all elements in list.