From 4229214ad3bd4fd28a6004c639e8953e6f0625cb Mon Sep 17 00:00:00 2001 From: Inno Gatin Date: Wed, 5 Jun 2019 11:09:10 +0200 Subject: [PATCH] Optimised the position() function in particle.C --- src/lagrangian/basic/particle/particle.C | 45 ++++++++++++++++--- src/lagrangian/basic/particle/particle.H | 8 ++++ src/lagrangian/basic/particle/particleI.H | 6 +++ src/lagrangian/basic/particle/particleIO.C | 2 + .../PairSpringSliderDashpot.C | 2 +- 5 files changed, 56 insertions(+), 7 deletions(-) diff --git a/src/lagrangian/basic/particle/particle.C b/src/lagrangian/basic/particle/particle.C index 2cef6b8f8..21b296f30 100644 --- a/src/lagrangian/basic/particle/particle.C +++ b/src/lagrangian/basic/particle/particle.C @@ -51,13 +51,11 @@ void Foam::particle::stationaryTetGeometry ) const { const triFace triIs(currentTetIndices().faceTriIs(mesh_)); - const vectorField& ccs = mesh_.cellCentres(); - const pointField& pts = mesh_.points(); - centre = ccs[celli_]; - base = pts[triIs[0]]; - vertex1 = pts[triIs[1]]; - vertex2 = pts[triIs[2]]; + centre = cellCentres_[celli_]; + base = meshPoints_[triIs[0]]; + vertex1 = meshPoints_[triIs[1]]; + vertex2 = meshPoints_[triIs[2]]; } @@ -305,6 +303,9 @@ void Foam::particle::changeTet(const label tetTriI) << "track is on triangle 1, 2 or 3." << exit(FatalError); } + + // Update the position + position_ = position(); } @@ -419,6 +420,9 @@ void Foam::particle::changeFace(const label tetTriI) { rotate(false); } + + // Update the position + position_ = position(); } @@ -431,6 +435,9 @@ void Foam::particle::changeCell() // Reflect to account for the change of triangle orientation in the new cell reflect(); + + // Update the position + position_ = position(); } @@ -515,6 +522,9 @@ void Foam::particle::locate ++ nWarnings; } } + + // Update the position + position_ = this->position(); } @@ -530,10 +540,13 @@ Foam::particle::particle ) : mesh_(mesh), + cellCentres_(mesh_.cellCentres()), + meshPoints_(mesh_.points()), coordinates_(coordinates), celli_(celli), tetFacei_(tetFacei), tetPti_(tetPti), + position_(position()), facei_(-1), stepFraction_(0.0), origProc_(Pstream::myProcNo()), @@ -549,10 +562,13 @@ Foam::particle::particle ) : mesh_(mesh), + cellCentres_(mesh_.cellCentres()), + meshPoints_(mesh_.points()), coordinates_(- VGREAT, - VGREAT, - VGREAT, - VGREAT), celli_(celli), tetFacei_(-1), tetPti_(-1), + position_(vector::zero), facei_(-1), stepFraction_(0.0), origProc_(Pstream::myProcNo()), @@ -572,10 +588,13 @@ Foam::particle::particle Foam::particle::particle(const particle& p) : mesh_(p.mesh_), + cellCentres_(p.cellCentres_), + meshPoints_(p.meshPoints_), coordinates_(p.coordinates_), celli_(p.celli_), tetFacei_(p.tetFacei_), tetPti_(p.tetPti_), + position_(p.position_), facei_(p.facei_), stepFraction_(p.stepFraction_), origProc_(p.origProc_), @@ -586,10 +605,13 @@ Foam::particle::particle(const particle& p) Foam::particle::particle(const particle& p, const polyMesh& mesh) : mesh_(mesh), + cellCentres_(p.cellCentres_), + meshPoints_(p.meshPoints_), coordinates_(p.coordinates_), celli_(p.celli_), tetFacei_(p.tetFacei_), tetPti_(p.tetPti_), + position_(p.position_), facei_(p.facei_), stepFraction_(p.stepFraction_), origProc_(p.origProc_), @@ -637,12 +659,20 @@ Foam::scalar Foam::particle::trackToFace if (tetTriI == -1) { // The track has completed within the current tet + + // Update the position + position_ = this->position(); + return 0; } else if (tetTriI == 0) { // The track has hit a face, so set the current face and return facei_ = tetFacei_; + + // Update the position + position_ = this->position(); + return f; } else @@ -889,6 +919,9 @@ Foam::scalar Foam::particle::trackToMovingTri << "End global coordinates = " << position() << endl; } + // Update position + position_ = position(); + return iH != -1 ? 1 - muH*detA[0] : 0; } diff --git a/src/lagrangian/basic/particle/particle.H b/src/lagrangian/basic/particle/particle.H index ba06092cf..c7bc25372 100644 --- a/src/lagrangian/basic/particle/particle.H +++ b/src/lagrangian/basic/particle/particle.H @@ -149,6 +149,8 @@ private: //- Reference to the polyMesh database const polyMesh& mesh_; + const vectorField& cellCentres_; + const pointField& meshPoints_; //- Coordinates of particle barycentric coordinates_; @@ -165,6 +167,9 @@ private: // point. label tetPti_; + //- Position of the particle + vector position_; + //- Face index if the particle is on a face otherwise -1 label facei_; @@ -530,6 +535,9 @@ public: //- Return current particle position inline vector position() const; + //- Return current particle position + inline vector& stationaryPosition(); + // Track diff --git a/src/lagrangian/basic/particle/particleI.H b/src/lagrangian/basic/particle/particleI.H index 7249fcc27..2fdeaa392 100644 --- a/src/lagrangian/basic/particle/particleI.H +++ b/src/lagrangian/basic/particle/particleI.H @@ -207,4 +207,10 @@ inline Foam::vector Foam::particle::position() const } +inline Foam::vector& Foam::particle::stationaryPosition() +{ + return position_; +} + + // ************************************************************************* // diff --git a/src/lagrangian/basic/particle/particleIO.C b/src/lagrangian/basic/particle/particleIO.C index 30d98e162..35716c6bd 100644 --- a/src/lagrangian/basic/particle/particleIO.C +++ b/src/lagrangian/basic/particle/particleIO.C @@ -46,6 +46,8 @@ const std::size_t Foam::particle::sizeofFields_ Foam::particle::particle(const polyMesh& mesh, Istream& is, bool readFields) : mesh_(mesh), + cellCentres_(mesh_.cellCentres()), + meshPoints_(mesh_.points()), coordinates_(), celli_(-1), tetFacei_(-1), diff --git a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/PairModel/PairSpringSliderDashpot/PairSpringSliderDashpot.C b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/PairModel/PairSpringSliderDashpot/PairSpringSliderDashpot.C index 21064f7b8..99ebc5344 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/PairModel/PairSpringSliderDashpot/PairSpringSliderDashpot.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/CollisionModel/PairCollision/PairModel/PairSpringSliderDashpot/PairSpringSliderDashpot.C @@ -171,7 +171,7 @@ void Foam::PairSpringSliderDashpot::evaluatePair typename CloudType::parcelType& pB ) const { - vector r_AB = (pA.position() - pB.position()); + vector r_AB = (pA.stationaryPosition() - pB.stationaryPosition()); scalar dAEff = pA.d();