half-way or full-way bounce-back

Dear friends,

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?

% Initialization
bbRegion = find(obst);

% LB loop
while (t<tmax)

% Compute macroscopic variables
rho = sum(f);

% Collision step (fpost is the post-collision distribution)
if obst(x,y) == 0;
fpost = f-1/tau*(f-feq);

% Bounce-back
fpost(i, bbRegion) = f(opp(i), bbRegion);

% Streaming step



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)

Hope this helps.


Dear Elrohir,

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)

Full-way bounce-back half-way bounce-back
step k_error step k_error
500 6.634422e-002 500 6.596014e-002
1000 3.193718e-003 1000 2.742995e-003
1500 1.327403e-003 1500 1.785436e-003
2000 1.651082e-003 2000 2.109818e-003
… 2500 2.133054e-003
… 3000 2.134719e-003

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?