if (solution_.coupled()) { cloud.relaxSources(cloud.cloudCopy()); } } else { cloud.preEvolve();
evolveCloud(cloud, td);// here
if (solution_.coupled()) { cloud.scaleSources(); } }
cloud.info();
cloud.postEvolve();
if (solution_.steadyState()) { cloud.restoreState(); } }
In this function, the evolveCloud function (still defined in KinematicCloud.C as other class inherit from this class has no such function) will be called:
if (solution_.transient()) { label preInjectionSize = this->size();
this->surfaceFilm().inject(cloud);
// Update the cellOccupancy if the size of the cloud has changed // during the injection. if (preInjectionSize != this->size()) { updateCellOccupancy(); preInjectionSize = this->size(); }
injectors_.inject(cloud, td);
// Assume that motion will update the cellOccupancy as necessary // before it is required. cloud.motion(cloud, td);// here
while (ttd.keepParticle && !ttd.switchProcessor && p.stepFraction() < 1) { // Cache the current position, cell and step-fraction const point start = p.position(); const scalar sfrac = p.stepFraction();
// Total displacement over the time-step constvector s = trackTime*U_;
// Cell length scale const scalar l = cellLengthScale[p.cell()];
// Deviation from the mesh centre for reduced-D cases constvector d = p.deviationFromMeshCentre();
// Fraction of the displacement to track in this loop. This is limited // to ensure that the both the time and distance tracked is less than // maxCo times the total value. scalar f = 1 - p.stepFraction(); f = min(f, maxCo); f = min(f, maxCo*l/max(small*l, mag(s))); if (p.active()) { // Track to the next face p.trackToFace(f*s - d, f); } else { // At present the only thing that sets active_ to false is a stick // wall interaction. We want the position of the particle to remain // the same relative to the face that it is on. The local // coordinates therefore do not change. We still advance in time and // perform the relevant interactions with the fixed particle. p.stepFraction() += f; }
if (p.onFace() && ttd.keepParticle) { p.hitFace(s, cloud, ttd); } }
return ttd.keepParticle; }
The p.calc(cloud, ttd, dt) will then call the calc function defined in the ReactingMultiphaseParcel.C. There, e.g. calcDevolatilisation will be called to update the model.