Given a square grid that operates with a Von Neumann neighborhood.
Each grid cell has a value. That value can be anything, but let's go with air pressure.
We want each complete logic frame to have every cell "spread out" with its neighbor. All higher pressure cells flow into lower pressure cells as long as there are no obstructing cells.
The algorithm being used right now, computes for every cell, sum the pressure of all adjacent cells and itself, divided by the number of applicable cells (obstructions are excluded). Cells that have previously been computed for, are noted, and ignored, to prevent overlap. It's all just being averaged.
That all works reasonable enough, eh? But here's the problem, as you might notice from the second image after I explain it:
Say you have a source cell with a value of 256 flowing into an empty hallway. The next one becomes 128. The next, 64, 32, 16, and so on. My math might be off, but you should notice that periodically averaging the pressures each step doesn't "flow" down hallways very well. It stagnants.
I'll end up with a large room with 124, and then a hallway with 110, 95, 80, 66, 52, 39, ... 25. Even after say, 100 iterations, those far away tiles are never going to change much.