diff --git a/src/lagrangian/spray/submodels/StochasticCollision/ORourkeCollision/ORourkeCollision.C b/src/lagrangian/spray/submodels/StochasticCollision/ORourkeCollision/ORourkeCollision.C index f06cdea830..2014d3257d 100644 --- a/src/lagrangian/spray/submodels/StochasticCollision/ORourkeCollision/ORourkeCollision.C +++ b/src/lagrangian/spray/submodels/StochasticCollision/ORourkeCollision/ORourkeCollision.C @@ -24,8 +24,9 @@ License \*---------------------------------------------------------------------------*/ #include "ORourkeCollision.H" -#include "mathematicalConstants.H" #include "SLGThermo.H" +#include "CompactListList.H" +#include "mathematicalConstants.H" using namespace Foam::constant::mathematical; @@ -34,12 +35,23 @@ using namespace Foam::constant::mathematical; template void Foam::ORourkeCollision::collide(const scalar dt) { - // Create a list of parcels in each cell - List> pInCell(this->owner().mesh().nCells()); - + // Create the occupancy list for the cells + labelList occupancy(this->owner().mesh().nCells(), 0); forAllIter(typename CloudType, this->owner(), iter) { - pInCell[iter().cell()].append(&iter()); + occupancy[iter().cell()]++; + } + + // Initialize the sizes of the lists of parcels in each cell + CompactListList pInCell(occupancy); + + // Reset the occupancy to use as a counter + occupancy = 0; + + // Set the parcel pointer lists for each cell + forAllIter(typename CloudType, this->owner(), iter) + { + pInCell(iter().cell(), occupancy[iter().cell()]++) = &iter(); } for (label celli=0; celliowner().mesh().nCells(); celli++)