50#ifndef KinematicParcel_H
51#define KinematicParcel_H
65template<
class ParcelType>
73template<
class ParcelType>
84template<
class ParcelType>
92 static label maxTrackAttempts;
102 class constantProperties
153 inline scalar
rhoMin()
const;
156 inline scalar
rho0()
const;
165 public ParcelType::trackingData
242 template <
class TrackCloudType>
245 const TrackCloudType&
cloud,
265 inline scalar
rhoc()
const;
268 inline scalar&
rhoc();
277 inline scalar
muc()
const;
280 inline scalar&
muc();
283 inline const vector&
g()
const;
292 template<
class TrackCloudType>
342 template<
class TrackCloudType>
345 TrackCloudType&
cloud,
377 +
" (UTurbx UTurby UTurbz)"
378 +
" (UCorrectx UCorrecty UCorrectz)"
391 const label tetFacei,
410 const label tetFacei,
413 const scalar nParticle0,
415 const scalar dTarget0,
417 const constantProperties& constProps
426 bool newFormat =
true
474 inline bool active()
const;
483 inline scalar
d()
const;
489 inline const vector&
U()
const;
492 inline scalar
rho()
const;
495 inline scalar
age()
const;
498 inline scalar
tTurb()
const;
510 inline void active(
const bool state);
528 inline scalar&
rho();
531 inline scalar&
age();
534 inline scalar&
tTurb();
546 inline scalar
massCell(
const trackingData&
td)
const;
549 inline scalar
mass()
const;
555 inline scalar
volume()
const;
558 inline static scalar
volume(
const scalar
d);
561 inline scalar
areaP()
const;
564 inline static scalar
areaP(
const scalar
d);
567 inline scalar
areaS()
const;
570 inline static scalar
areaS(
const scalar
d);
573 inline scalar
Re(
const trackingData&
td)
const;
576 inline static scalar
Re
593 inline static scalar
We
610 inline static scalar
Eo
624 template<
class TrackCloudType>
629 template<
class TrackCloudType>
632 TrackCloudType&
cloud,
638 template<
class TrackCloudType>
641 TrackCloudType&
cloud,
647 template<
class TrackCloudType>
650 TrackCloudType&
cloud,
656 template<
class TrackCloudType>
659 TrackCloudType&
cloud,
668 template<
class TrackCloudType>
673 const scalar trackTime
681 template<
class TrackCloudType>
686 template<
class TrackCloudType>
690 template<
class TrackCloudType>
705 template<
class TrackCloudType>
709 template<
class TrackCloudType>
718 const bool namesOnly =
false
722 template<
class CloudType>
726 template<
class CloudType>
732 friend Ostream& operator<< <ParcelType>
const uniformDimensionedVectorField & g
Base class for lagrangian averaging methods.
An Istream is an abstract base class for all input systems (streams, files, token lists etc)....
constantProperties()
Default construct.
scalar minParcelMass() const
Return const access to the minimum parcel mass.
scalar rho0() const
Return const access to the particle density.
label parcelTypeId() const
Return const access to the parcel type id.
const dictionary dict_
Constant properties dictionary.
const dictionary & dict() const
Return const access to the constant properties dictionary.
scalar rhoMin() const
Return const access to the minimum density.
iNew(const polyMesh &mesh)
autoPtr< KinematicParcel< ParcelType > > operator()(Istream &is) const
const vector & Uc() const
Return the continuous phase velocity.
scalar muc() const
Return the continuous phase viscosity.
const interpolation< vector > & UInterp() const
Return const access to the interpolator for continuous phase velocity field.
scalar rhoc() const
Return the continuous phase density.
trackingData(const TrackCloudType &cloud, trackPart part=tpLinearTrack)
Construct from components.
const interpolation< scalar > & muInterp() const
Return const access to the interpolator for continuous phase dynamic viscosity field.
const interpolation< scalar > & rhoInterp() const
Return const access to the interpolator for continuous phase density field.
trackPart part() const
Return the part of the tracking operation taking place.
void updateAverages(const TrackCloudType &cloud)
Update the MPPIC averages.
Kinematic parcel class with rotational motion (as spherical particles only) and one/two-way coupling ...
const vector & UCorrect() const
Return const access to correction velocity.
virtual void transformProperties(const tensor &T)
Transform the physical properties of the particle.
static scalar volume(const scalar d)
Particle volume for a given diameter.
void calcUCorrection(TrackCloudType &cloud, trackingData &td, const scalar dt)
Correct U following MP-PIC sub-models.
scalar momentOfInertia() const
Particle moment of inertia around diameter axis.
static scalar areaS(const scalar d)
Surface area for given diameter.
void calcDispersion(TrackCloudType &cloud, trackingData &td, const scalar dt)
Apply dispersion to the carrier phase velocity and update.
scalar tTurb() const
Return const access to time spent in turbulent eddy.
virtual autoPtr< particle > clone(const polyMesh &mesh) const
Return a (basic particle) clone.
vector & UCorrect()
Return access to correction velocity.
const vector & U() const
Return const access to velocity.
void active(const bool state)
Set active flag to the specified state.
static void writeObjects(const CloudType &c, objectRegistry &obr)
Write particle fields as objects into the obr registry.
static scalar areaP(const scalar d)
Projected area for given diameter.
KinematicParcel(const KinematicParcel &p)
Construct as a copy.
static void readFields(TrackCloudType &c)
scalar d() const
Return const access to diameter.
void cellValueSourceCorrection(TrackCloudType &cloud, trackingData &td, const scalar dt)
Correct cell values using latest transfer information.
static scalar Eo(const vector &g, const scalar rho, const scalar rhoc, const vector &U, const scalar d, const scalar sigma)
Eotvos number for given conditions.
virtual void transformProperties(const vector &separation)
Transform the physical properties of the particle.
scalar & age()
Return access to the age.
scalar Re(const trackingData &td) const
virtual autoPtr< particle > clone() const
Return a (basic particle) clone.
scalar volume() const
Particle volume.
const vector calcVelocity(TrackCloudType &cloud, trackingData &td, const scalar dt, const scalar Re, const scalar mu, const scalar mass, const vector &Su, vector &dUTrans, scalar &Spu) const
Calculate new particle velocity.
static const std::size_t sizeofFields
scalar nParticle() const
Return const access to number of particles.
KinematicParcel(const polyMesh &mesh, Istream &is, bool readFields=true, bool newFormat=true)
Construct from Istream.
scalar massCell(const trackingData &td) const
Cell owner mass.
vector & UTurb()
Return access to turbulent velocity fluctuation.
static scalar Re(const scalar rhoc, const vector &U, const vector &Uc, const scalar d, const scalar muc)
Reynolds number for given conditions.
scalar & d()
Return access to diameter.
scalar dTarget() const
Return const access to target diameter.
static void readObjects(CloudType &c, const objectRegistry &obr)
Read particle fields as objects from the obr registry.
scalar We(const trackingData &td, const scalar sigma) const
Weber number.
scalar areaP() const
Particle projected area.
scalar rho() const
Return const access to density.
static scalar We(const scalar rhoc, const vector &U, const vector &Uc, const scalar d, const scalar sigma)
Weber number for given conditions.
scalar & rho()
Return access to density.
scalar & nParticle()
Return access to number of particles.
AddToPropertyList(ParcelType, " active"+" typeId"+" nParticle"+" d"+" dTarget"+" (Ux Uy Uz)"+" rho"+" age"+" tTurb"+" (UTurbx UTurby UTurbz)"+" (UCorrectx UCorrecty UCorrectz)")
String representation of properties.
static void writeFields(const TrackCloudType &c)
Write.
KinematicParcel(const polyMesh &mesh, const barycentric &coordinates, const label celli, const label tetFacei, const label tetPti)
Construct from mesh, coordinates and topology.
void hitProcessorPatch(TrackCloudType &cloud, trackingData &td)
Overridable function to handle the particle hitting a.
bool hitPatch(TrackCloudType &cloud, trackingData &td)
Overridable function to handle the particle hitting a patch.
scalar & dTarget()
Return access to target diameter.
label & typeId()
Return access to type id.
void setCellValues(TrackCloudType &cloud, trackingData &td)
Set cell values.
scalar areaS() const
Particle surface area.
bool move(TrackCloudType &cloud, trackingData &td, const scalar trackTime)
Move the parcel.
vector & U()
Return access to velocity.
void hitWallPatch(TrackCloudType &cloud, trackingData &td)
Overridable function to handle the particle hitting a wallPatch.
scalar Eo(const trackingData &td, const scalar sigma) const
Eotvos number.
void writeProperties(Ostream &os, const wordRes &filters, const word &delim, const bool namesOnly=false) const
Write individual parcel properties to stream.
TypeName("KinematicParcel")
Runtime type information.
KinematicParcel(const polyMesh &mesh, const vector &position, const label celli)
Construct from a position and a cell, searching for the rest of the.
bool active() const
Return const access to active flag.
KinematicParcel(const polyMesh &mesh, const barycentric &coordinates, const label celli, const label tetFacei, const label tetPti, const label typeId, const scalar nParticle0, const scalar d0, const scalar dTarget0, const vector &U0, const constantProperties &constProps)
Construct from components.
KinematicParcel(const KinematicParcel &p, const polyMesh &mesh)
Construct as a copy.
scalar age() const
Return const access to the age.
const vector & UTurb() const
Return const access to turbulent velocity fluctuation.
scalar & tTurb()
Return access to time spent in turbulent eddy.
void calc(TrackCloudType &cloud, trackingData &td, const scalar dt)
Update parcel properties over the time interval.
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
Pointer management similar to std::unique_ptr, with some additional methods and type checking.
A cloud is a registry collection of lagrangian particles.
Class for demand-driven dictionary entries.
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
Abstract base class for volume field interpolation.
Registry of regIOobjects.
vector position() const
Return current particle position.
static autoPtr< particle > Clone(const Derived &p)
Clone a particle.
const polyMesh & mesh() const noexcept
Return the mesh database.
const barycentric & coordinates() const noexcept
Return current particle coordinates.
Mesh consisting of general polyhedral cells.
A List of wordRe with additional matching capabilities.
A class for handling words, derived from Foam::string.
PtrList< coordinateSystem > coordinates(solidRegions.size())
OBJstream os(runTime.globalPath()/outputName)
wallPoints::trackData td(isBlockedFace, regionToBlockSize)
DSMCCloud< dsmcParcel > CloudType
bool cp(const fileName &src, const fileName &dst, const bool followLink=true)
Copy the source to the destination (recursively if necessary).
Barycentric< scalar > barycentric
A scalar version of the templated Barycentric.
void T(FieldField< Field, Type > &f1, const FieldField< Field, Type > &f2)
void Su(fvMatrix< typename Expr::value_type > &m, const Expr &expression)
#define AddToPropertyList(ParcelType, str)
Add to existing static 'propertyList' for particle properties.
dimensionedScalar sigma("sigma", dimMass/sqr(dimTime), transportProperties)
#define TypeName(TypeNameString)
Declare a ClassName() with extra virtual type info.