From a64dfb526c01922c67b05ec431c080ef44dd435b Mon Sep 17 00:00:00 2001 From: mattijs <mattijs@hunt.opencfd.co.uk> Date: Fri, 19 Jun 2009 12:01:29 +0100 Subject: [PATCH] findFaces without allocation --- src/lagrangian/basic/Cloud/Cloud.H | 3 +++ src/lagrangian/basic/Particle/Particle.C | 25 +++++++++-------------- src/lagrangian/basic/Particle/Particle.H | 14 +++++++------ src/lagrangian/basic/Particle/ParticleI.H | 6 ++++-- 4 files changed, 25 insertions(+), 23 deletions(-) diff --git a/src/lagrangian/basic/Cloud/Cloud.H b/src/lagrangian/basic/Cloud/Cloud.H index f0ca222d910..e298affe7d2 100644 --- a/src/lagrangian/basic/Cloud/Cloud.H +++ b/src/lagrangian/basic/Cloud/Cloud.H @@ -78,6 +78,9 @@ class Cloud const unallocLabelList& owner_; const unallocLabelList& neighbour_; + //- Temporary storage for addressing. Used in findFaces. + mutable DynamicList<label> labels_; + // Private member functions diff --git a/src/lagrangian/basic/Particle/Particle.C b/src/lagrangian/basic/Particle/Particle.C index ea53ec3ee4d..ee85abda689 100644 --- a/src/lagrangian/basic/Particle/Particle.C +++ b/src/lagrangian/basic/Particle/Particle.C @@ -36,16 +36,17 @@ License // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // template<class ParticleType> -Foam::labelList Foam::Particle<ParticleType>::findFaces +void Foam::Particle<ParticleType>::findFaces ( - const vector& position + const vector& position, + DynamicList<label>& faceList ) const { const polyMesh& mesh = cloud_.polyMesh_; const labelList& faces = mesh.cells()[celli_]; const vector& C = mesh.cellCentres()[celli_]; - DynamicList<label> faceList(10); + faceList.clear(); forAll(faces, i) { label facei = faces[i]; @@ -56,26 +57,23 @@ Foam::labelList Foam::Particle<ParticleType>::findFaces faceList.append(facei); } } - - faceList.shrink(); - - return faceList; } template<class ParticleType> -Foam::labelList Foam::Particle<ParticleType>::findFaces +void Foam::Particle<ParticleType>::findFaces ( const vector& position, const label celli, - const scalar stepFraction + const scalar stepFraction, + DynamicList<label>& faceList ) const { const polyMesh& mesh = cloud_.polyMesh_; const labelList& faces = mesh.cells()[celli]; const vector& C = mesh.cellCentres()[celli]; - DynamicList<label> faceList(10); + faceList.clear(); forAll(faces, i) { label facei = faces[i]; @@ -86,10 +84,6 @@ Foam::labelList Foam::Particle<ParticleType>::findFaces faceList.append(facei); } } - - faceList.shrink(); - - return faceList; } @@ -237,7 +231,8 @@ Foam::scalar Foam::Particle<ParticleType>::trackToFace { const polyMesh& mesh = cloud_.polyMesh_; - labelList faces = findFaces(endPosition); + DynamicList<label>& faces = cloud_.labels_; + findFaces(endPosition, faces); facei_ = -1; scalar trackFraction = 0.0; diff --git a/src/lagrangian/basic/Particle/Particle.H b/src/lagrangian/basic/Particle/Particle.H index 4d1a8b9be83..f061c06b68b 100644 --- a/src/lagrangian/basic/Particle/Particle.H +++ b/src/lagrangian/basic/Particle/Particle.H @@ -151,18 +151,20 @@ protected: const label facei ) const; - //- Return the faces between position and cell centre - labelList findFaces + //- Find the faces between position and cell centre + void findFaces ( - const vector& position + const vector& position, + DynamicList<label>& faceList ) const; - //- Return the faces between position and cell centre - labelList findFaces + //- Find the faces between position and cell centre + void findFaces ( const vector& position, const label celli, - const scalar stepFraction + const scalar stepFraction, + DynamicList<label>& faceList ) const; diff --git a/src/lagrangian/basic/Particle/ParticleI.H b/src/lagrangian/basic/Particle/ParticleI.H index ce790d67c11..0eb89127173 100644 --- a/src/lagrangian/basic/Particle/ParticleI.H +++ b/src/lagrangian/basic/Particle/ParticleI.H @@ -236,7 +236,8 @@ inline scalar Particle<ParticleType>::lambda template<class ParticleType> inline bool Particle<ParticleType>::inCell() const { - labelList faces = findFaces(position_); + DynamicList<label>& faces = cloud_.labels_; + findFaces(position_, faces); return (!faces.size()); } @@ -250,7 +251,8 @@ inline bool Particle<ParticleType>::inCell const scalar stepFraction ) const { - labelList faces = findFaces(position, celli, stepFraction); + DynamicList<label>& faces = cloud_.labels_; + findFaces(position, celli, stepFraction, faces); return (!faces.size()); } -- GitLab