The classical streaming operator used in FHP lattice gas automata is this: $$n_i(r - c_i, t + 1) = n_i(r, t)$$ However if you think in terms of the streaming itself, it should be something like $$n_j(r + c_i, t + 1) = n_i(r, t)\qquad\text{where}\,j=(i+3)\,mod\,6$$

This image illustrates my point :

D2Q9-LBM illustration

Basically what I am saying is if you consider an occupied cell, say i, it should stream to the next corresponding cell (the next black vector) instead of the same cell in the next node namely j as mentioned above. However this is not so, it streams to the same location (shown by the blue arrow). Can anyone explain what is the reason of such a choice?


1 Answer 1


There are some issues of notation here. First off, the index $i$ is over velocity, not "cell". $n_i(r,t)$ defines occupancy of velocity direction $i$ at position $r$ at time $t$. Define $c_i$ as the sound velocity in direction $i$. Particles moving in direction $i$ with constant velocity $c_i$ will move from $r$ to $r + c_i$ over the course of one time step. Your statement neglects collision, so the particle will continue to have velocity $c_i$, and therefore be represented as occupying $n_i(r + c_i,t+1)$.

If we take $c_i$ to be lattice offsets, the sign will be reversed. In any case, the velocity direction $i$ of the particle stays the same unless changed by a collision operator or boundary condition.

Your diagram shows the correct behavior. Now, for the sake of argument, let's assume that it goes to the "next vector" like you seem to be so intent on claiming. The "next vector over" is in the opposite direction from the one it's coming from, meaning that at $t+1$ the direction would be $-c_i$ and position would be $r + c_i$ and at $t+2$ one would have position $r$ again with direction $c_i$. It would wildly ping-pong between these two states. This is obviously not the intended behavior. You're visualizing this incorrectly.

An image of streaming Lattice Automata in three timesteps

Consider the above image as a demonstration of what it means to stream. We use names instead of indices to make this more clear. The $c_i$ are defined as the next steps in the named direction $i$. Note that there is $i=still$, which means that the velocity of the particle is nil. Red dots indicate occupancy of a velocity state $i$, e.g. $n_i(r,t)$ is marked in red. We start at $t=0$ with:

\begin{align} n_{downwardright}(upperleft,0) &= true\\ n_{downward}(uppercenter,0) &= true\\ n_{still}(upperright,0) &= true \end{align}

and all others false. From there, we stream and update to $t=1$. This gives us \begin{align} n_{downwardright}(center,1) &= n_{downwardright}(upperleft,0) &= true\\ n_{downward}(center,1) &= n_{downward}(uppercenter,0) &= true\\ n_{still}(upperright,1) &= n_{still}(upperright,0) &= true \end{align}

with all others false. If we stream again, we get

\begin{align} n_{downwardright}(lowerright,2) &= n_{downwardright}(center,1) &= true\\ n_{downward}(lowercenter,2) &= n_{downward}(center,1) &= true\\ n_{still}(upperright,2) &= n_{still}(upperright,1) &= true \end{align}

So in conclusion, the particles are going in the same direction the entire time, and transmit across the grid one cell at a time in the directions $i$ defined by $c_i$.

  • $\begingroup$ Thanks for the reply! I agree with your statement, however usually the streaming operator is preceded by the collision factor, not followed if we are talking about the same cycle. Now what I am asking is if you consider only the streaming operator only and the particle in the direction i (after collision), say i = 1 or the horizontal particle, will it stream to i = 1 of the next node or i=(1+3)%6 = 4? Second option seems more likely as it is nearest to the initial node as compared to i = 1 which lies on the other side.Our particle has to cross this i = 4 particle first to reach there. $\endgroup$ May 30, 2014 at 17:27
  • $\begingroup$ If it starts out in direction i=1, it will stream to direction i=1 of the node pointed to by c_i, as it's still travelling in the same direction. "Sides" are not a concept here, only velocities. $\endgroup$ May 31, 2014 at 2:55
  • $\begingroup$ Also note that you can state the streaming and collision parts together as: $n_i(r+c_i,t+1) - n_i(r,t) = \Omega_i(n(r,t))$ $\endgroup$ May 31, 2014 at 3:14

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.