34template<
class CloudType>
41 this->subModelProperties(),
48template<
class CloudType>
49template<
class TrackCloudType>
52 TrackCloudType&
cloud,
57 td.part() = parcelType::trackingData::tpVelocityHalfStep;
58 CloudType::move(
cloud, td, deltaT);
60 td.part() = parcelType::trackingData::tpLinearTrack;
61 CloudType::move(
cloud, td, deltaT);
66 this->updateCellOccupancy();
68 this->collision().collide();
70 td.part() = parcelType::trackingData::tpVelocityHalfStep;
71 CloudType::move(
cloud, td, deltaT);
76template<
class CloudType>
79 CloudType::cloudReset(c);
81 collisionModel_.reset(c.collisionModel_.ptr());
87template<
class CloudType>
99 constProps_(this->particleProperties()),
100 collisionModel_(nullptr)
119 <<
"Collision modelling not currently available "
126template<
class CloudType>
134 collisionModel_(c.collisionModel_->clone())
138template<
class CloudType>
147 collisionModel_(nullptr)
153template<
class CloudType>
160template<
class CloudType>
167 clone(this->
name() +
"Copy").ptr()
173template<
class CloudType>
176 cloudReset(cloudCopyPtr_());
177 cloudCopyPtr_.clear();
181template<
class CloudType>
188 this->
solve(*
this, td);
193template<
class CloudType>
194template<
class TrackCloudType>
197 TrackCloudType&
cloud,
207 label nSubCycles = collision().nSubCycles();
211 Info<<
" " << nSubCycles <<
" move-collide subCycles" <<
endl;
215 const_cast<Time&
>(this->db().time()),
219 while(!(++moveCollideSubCycle).end())
221 moveCollide(
cloud, td, this->db().time().deltaTValue());
228 moveCollide(
cloud, td, this->db().time().deltaTValue());
233template<
class CloudType>
238 scalar rotationalKineticEnergy = rotationalKineticEnergyOfSystem();
241 Info<<
" Rotational kinetic energy = "
242 << rotationalKineticEnergy <<
nl;
reduce(hasMovingMesh, orOp< bool >())
const uniformDimensionedVectorField & g
void deleteLostParticles()
Remove lost particles from cloud and delete.
Adds coolisions to kinematic clouds.
void setModels()
Set cloud sub-models.
void storeState()
Store the current cloud state.
autoPtr< CollisionModel< CollidingCloud< CloudType > > > collisionModel_
Collision model.
void cloudReset(CollidingCloud< CloudType > &c)
Reset state of cloud.
void moveCollide(TrackCloudType &cloud, typename parcelType::trackingData &td, const scalar deltaT)
Move-collide particles.
void evolve()
Evolve the cloud.
void info()
Print cloud information.
void restoreState()
Reset the current cloud to the previously stored state.
virtual ~CollidingCloud()
Destructor.
Templated collision model class.
Templated base class for dsmc cloud.
Place holder for 'none' option.
Class to control time during OpenFOAM simulations that is also the top-level objectRegistry.
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 sub-cycling times.
void endSubCycle()
End the sub-cycling and reset the time-state.
A class for handling words, derived from Foam::string.
const volScalarField & mu
#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.
bool isType(const Type &t)
Check is typeid is identical to the TargetType.
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)
constexpr char nl
The newline '\n' character (0x0a)
const word cloudName(propsDict.get< word >("cloud"))