if (packingLimiter) { // Calculating exceeding volume fractions volScalarField alphaEx = max(alpha - alphaMax, scalar(0)); // Finding neighbouring cells of the whole domain labelListList neighbour = mesh.cellCells(); scalarField cellVolumes = mesh.cellVolumes(); forAll (alphaEx, celli) { // Finding the labels of the neighbouring cells labelList neighbourCell = neighbour[celli]; // Initializing neighbouring cells contribution scalar neighboursEx = 0.0; forAll (neighbourCell, cellj) { labelList neighboursNeighbour = neighbour[neighbourCell[cellj]]; scalar neighboursNeighbourCellVolumes = 0.0; forAll (neighboursNeighbour, cellk) { neighboursNeighbourCellVolumes += cellVolumes[neighboursNeighbour[cellk]]; } neighboursEx += alphaEx[neighbourCell[cellj]]*cellVolumes[celli] /neighboursNeighbourCellVolumes; } alpha[celli] += neighboursEx - alphaEx[celli]; } }