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 http://http.developer.nvidia.com/GPUGems2/elementLinks/47_flow_02.jpgBasically 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?
Regarding streaming operator in Lattice Gas Automata
fluid dynamics
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.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$.