32 template<
class CloudType>
39 this->subModelProperties(),
46 template<
class CloudType>
47 template<
class TrackData>
54 td.part() = TrackData::tpVelocityHalfStep;
55 CloudType::move(td, deltaT);
57 td.part() = TrackData::tpLinearTrack;
58 CloudType::move(td, deltaT);
63 this->updateCellOccupancy();
65 this->collision().collide();
67 td.part() = TrackData::tpVelocityHalfStep;
68 CloudType::move(td, deltaT);
73 template<
class CloudType>
76 CloudType::cloudReset(c);
84 template<
class CloudType>
87 const word& cloudName,
95 CloudType(cloudName, rho, U, mu, g,
false),
96 constProps_(this->particleProperties()),
97 collisionModel_(
nullptr)
106 this->deleteLostParticles();
116 <<
"Collision modelling not currently available " 123 template<
class CloudType>
135 template<
class CloudType>
144 collisionModel_(
nullptr)
150 template<
class CloudType>
157 template<
class CloudType>
160 return !collision().controlsWallInteraction();
164 template<
class CloudType>
171 clone(this->
name() +
"Copy").ptr()
177 template<
class CloudType>
180 cloudReset(cloudCopyPtr_());
181 cloudCopyPtr_.clear();
185 template<
class CloudType>
190 typename parcelType::template
191 TrackingData<CollidingCloud<CloudType>> td(*
this);
198 template<
class CloudType>
199 template<
class TrackData>
208 label nSubCycles = collision().nSubCycles();
212 Info<<
" " << nSubCycles <<
" move-collide subCycles" <<
endl;
216 const_cast<Time&>(this->db().time()),
220 while(!(++moveCollideSubCycle).end())
222 moveCollide(td, this->db().time().deltaTValue());
229 moveCollide(td, this->db().time().deltaTValue());
234 template<
class CloudType>
239 scalar rotationalKineticEnergy = rotationalKineticEnergyOfSystem();
242 Info<<
" Rotational kinetic energy = " 243 << rotationalKineticEnergy <<
nl;
void cloudReset(CollidingCloud< CloudType > &c)
Reset state of cloud.
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
DSMCCloud< dsmcParcel > CloudType
errorManipArg< error, int > exit(error &err, const int errNo=1)
void readFields(const typename GeoFieldType::Mesh &mesh, const IOobjectList &objects, const HashSet< word > &selectedFields, LIFOStack< regIOobject *> &storedObjects)
Read the selected GeometricFields of the specified type.
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
bool hasWallImpactDistance() const
If the collision model controls the wall interaction,.
void evolve()
Evolve the cloud.
Ostream & endl(Ostream &os)
Add newline and flush stream.
void moveCollide(TrackData &td, const scalar deltaT)
Move-collide particles.
tmp< DimensionedField< TypeR, GeoMesh > > New(const tmp< DimensionedField< TypeR, GeoMesh >> &tdf1, const word &name, const dimensionSet &dimensions)
A class for handling words, derived from string.
bool isType(const Type &t)
Check the typeid.
Templated collision model class.
void endSubCycle()
End the sub-cycling and reset the time-state.
Adds coolisions to kinematic clouds.
void motion(TrackData &td)
Particle motion.
void reduce(const List< UPstream::commsStruct > &comms, T &Value, const BinaryOp &bop, const int tag, const label comm)
word name(const complex &)
Return a string representation of a complex.
Place holder for 'none' option.
void restoreState()
Reset the current cloud to the previously stored state.
void info()
Print cloud information.
Mesh data needed to do the Finite Volume discretisation.
Selector class for relaxation factors, solver type and solution.
void setModels()
Set cloud sub-models.
virtual ~CollidingCloud()
Destructor.
A class for managing sub-cycling times.
autoPtr< CollisionModel< CollidingCloud< CloudType > > > collisionModel_
Collision model.
void storeState()
Store the current cloud state.