32template<
class ParcelType>
35 const CollidingParcel<ParcelType>&
p
40 angularMomentum_(
p.angularMomentum_),
42 collisionRecords_(
p.collisionRecords_)
46template<
class ParcelType>
55 angularMomentum_(
p.angularMomentum_),
57 collisionRecords_(
p.collisionRecords_)
63template<
class ParcelType>
64template<
class TrackCloudType>
67 TrackCloudType&
cloud,
69 const scalar trackTime
72 typename TrackCloudType::parcelType&
p =
73 static_cast<typename TrackCloudType::parcelType&
>(*this);
75 td.keepParticle =
true;
76 td.switchProcessor =
false;
80 case trackingData::tpVelocityHalfStep:
85 p.U() += 0.5*trackTime*
p.f()/
p.mass();
87 p.angularMomentum() += 0.5*trackTime*
p.torque();
89 td.keepParticle =
true;
90 td.switchProcessor =
false;
95 case trackingData::tpLinearTrack:
97 ParcelType::move(cloud,
td, trackTime);
102 case trackingData::tpRotationalTrack:
112 <<
td.part() <<
" is an invalid part of the tracking method."
117 return td.keepParticle;
121template<
class ParcelType>
124 ParcelType::transformProperties(
T);
134template<
class ParcelType>
140 ParcelType::transformProperties(separation);
Wrapper around kinematic parcel types to add collision modelling.
virtual void transformProperties(const tensor &T)
Transform the physical properties of the particle.
vector f_
Force on particle due to collisions [N].
ParcelType::trackingData trackingData
Use base tracking data.
bool move(TrackCloudType &cloud, trackingData &td, const scalar trackTime)
Move the parcel.
vector angularMomentum_
Angular momentum of Parcel in global reference frame [kg m2/s].
vector torque_
Torque on particle due to collisions in global.
CollidingParcel(const polyMesh &mesh, const barycentric &coordinates, const label celli, const label tetFacei, const label tetPti)
Construct from mesh, coordinates and topology.
A cloud is a registry collection of lagrangian particles.
Mesh consisting of general polyhedral cells.
Tensor of scalars, i.e. Tensor<scalar>.
#define NotImplemented
Issue a FatalErrorIn for a function not currently implemented.
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
wallPoints::trackData td(isBlockedFace, regionToBlockSize)
refinementData transform(const tensor &, const refinementData val)
No-op rotational transform for base types.
errorManip< error > abort(error &err)
error FatalError
Error stream (stdout output on all processes), with additional 'FOAM FATAL ERROR' header text and sta...
void T(FieldField< Field, Type > &f1, const FieldField< Field, Type > &f2)