I found many friends here also confused about the half-way and full-way bounce-back boundary condtion (BB). In my implementation, the BB is set up as following (taking D2Q9 for example). It seems consistent with the half-way BB presented in the C. Pan et al / computers&Fluids 35(2006) 898-909 where q=1/2. However, at present I’m still a little confused whether it is so-called half-way BB. Is my understanding correct? If not, how to implement it correctly. Could anybody explain it?

From my understanding of the difference between half-way and full-way bounceback, the algorithm in your post is a full-way bounceback, because it reverses the direction of the incoming populations at the bounceback nodes themselves.

Half-way bounceback would be achieved when you already set the reversed populations on the bounceback nodes before they have streamed there, i.e.
fpost(i,x,y) = f(opp(i), x - ei_x dt, y - ei_y dt)

Thanks for your reply. According to you suggestion, I changed the bounce-back condition as follows:
% Bounce-back
if obst (x,y) ~=0
fpost(i, x, y) = fpost(opp(i), x+eidt, y+eidt);

I used this to simulate the poiseuille flow in a cube and compared the result with that of the full-way bounce-back. In the simulation, the resolution is N=25. The pressure gradient is 1/3*e-4. The simulated results of water permeability using MRT-D3Q19 model with full-way bounce-back and half-way bounce-back boundary condition is listed as follows: (k_error means the error between simulated permeability and analytical solution)

As seen above, we can’t find a higher accuracy with half-way bounce-back boundary condition compared to full-way bounce-back. Is there anyone have the similar finding?