74 const scalar trackTime
77 td.switchProcessor =
false;
78 td.keepParticle =
true;
80 const constantProperties& constProps(
cloud.constProps(id_));
87 v_ += 0.5*trackTime*a_;
89 pi_ += 0.5*trackTime*tau_;
91 else if (
td.part() == 1)
95 while (
td.keepParticle && !
td.switchProcessor && stepFraction() < 1)
97 const scalar
f = 1 - stepFraction();
98 trackToAndHitFace(
f*trackTime*v_,
f, cloud,
td);
101 else if (
td.part() == 2)
107 if (!constProps.pointMolecule())
113 if (!constProps.linearMolecule())
132 if (!constProps.linearMolecule())
140 setSitePositions(constProps);
142 else if (
td.part() == 3)
147 scalar m = constProps.mass();
159 tau_ += (constProps.siteReferencePositions()[
s] ^ (Q_.T() &
f));
162 v_ += 0.5*trackTime*a_;
164 pi_ += 0.5*trackTime*tau_;
166 if (constProps.pointMolecule())
173 if (constProps.linearMolecule())
183 <<
td.part() <<
" is an invalid part of the integration method."
187 return td.keepParticle;
209 siteForces_ =
T & siteForces_;
217 if (special_ == SPECIAL_TETHERED)
219 specialPosition_ += separation;
222 sitePositions_ = sitePositions_ + separation;
234 sitePositions_.setSize(size);
236 siteForces_.setSize(size);
248 td.switchProcessor =
true;
254 const vector nw = normal();
256 const scalar vn = v_ & nw;
#define R(A, B, C, D, E, F, K, M)
A cloud is a registry collection of lagrangian particles.
Class to hold molecule constant properties.
const diagTensor & momentOfInertia() const
bool pointMolecule() const
const Field< vector > & siteReferencePositions() const
bool linearMolecule() const
Class used to pass tracking data to the trackToFace function.
virtual void transformProperties(const tensor &T)
Transform the physical properties of the particle.
bool move(moleculeCloud &, trackingData &, const scalar trackTime)
void setSiteSizes(label size)
void setSitePositions(const constantProperties &constProps)
bool hitPatch(moleculeCloud &cloud, trackingData &td)
Overridable function to handle the particle hitting a patch.
void hitWallPatch(moleculeCloud &cloud, trackingData &td)
Overridable function to handle the particle hitting a wallPatch.
void hitProcessorPatch(moleculeCloud &cloud, trackingData &td)
Overridable function to handle the particle hitting a processorPatch.
Calculates the inertia tensor and principal axes and moments of a polyhedra/cells/triSurfaces....
virtual void transformProperties(const tensor &T)
Transform the physical properties of the particle.
vector position() const
Return current particle position.
scalar stepFraction() const noexcept
Return the fraction of time-step completed.
void trackToAndHitFace(const vector &direction, const scalar fraction, TrackCloudType &cloud, trackingData &td)
Convenience function. Combines trackToFace and hitFace.
vector normal() const
The (unit) normal of the tri on tetFacei_ for the current tet.
Tensor of scalars, i.e. Tensor<scalar>.
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
gmvFile<< "tracers "<< particles.size()<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().x()<< " ";}gmvFile<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().y()<< " ";}gmvFile<< nl;for(const passiveParticle &p :particles){ gmvFile<< p.position().z()<< " ";}gmvFile<< nl;forAll(lagrangianScalarNames, i){ word name=lagrangianScalarNames[i];IOField< scalar > s(IOobject(name, runTime.timeName(), cloud::prefix, mesh, IOobject::MUST_READ, IOobject::NO_WRITE))
wallPoints::trackData td(isBlockedFace, regionToBlockSize)
DiagTensor< scalar > diagTensor
DiagTensor of scalars, i.e. DiagTensor<scalar>.
dimensionedScalar sin(const dimensionedScalar &ds)
refinementData transform(const tensor &, const refinementData val)
No-op rotational transform for base types.
errorManip< error > abort(error &err)
static constexpr const zero Zero
Global zero (0).
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)
dimensionedScalar cos(const dimensionedScalar &ds)
#define forAll(list, i)
Loop across all elements in list.