Confused about the bounce-back. Need help!


I am quite confused about how to correctly apply the bounce-back rule at solid boundaries. After reading Sukop’s book about the bounce-back rules and going through a few sample codes including the one found on the website “cylinder.m”, I thought that the middle-wall bounce-back rule goes like this: 1 ) after streaming (t) -> 2) collision on the fluid nodes (and bounce-back on the solid nodes) (t+) -> 3) streaming again (t+1). However, on a second thought, let’s consider D2Q9 and two fluid nodes (f(2) and f(1)) next to the solid node s(1) (the mid-wall is represented by “|”):
C7 C3 C6
… \ | /
C4- C1-C2 … f(2) f(1) | s(1)
… / |
C8 C5 C9

If it takes 1 time step for the fluid population C2 at f(2) to stream from node f(2) to f(1), then according to the middle-wall bounce-back rule described above it would take 2 time steps for the fluid population C2 at f(1) to bounce back from the mid-wall to become population C4 at f(1). The paradox for me is that since the wall is placed at the middle of the link between fluid node f(1) and solid node s(1), it seems that it should only take 1 time step for the bounce-back given that the populations stream at the same velocity c = 1. To implement it numerically, I would do as follows (for simplicity, only consider populations C2 and C4):

  1. collide at fluid nodes f(1) and f(2).
  2. stream populations at both fluid and solid nodes. (After this step, population C2 on f(1) will be population C2 on s(1) and population C4 on s(1) will be population C4 on f(1).)
  3. make C4 on f(1) equal to C2 on s(1). (i.e. bounce-back at the middle wall)
  4. repeat 1-3.

Could anyone comment on the difference both numerically and physically between the bounce-back rule mentioned in Sukop’s book as well as in the example “cylinder.m” and the one I described above? Please help me understand the bounce-back rule more clearly! :slight_smile:

BTW, the mid-wall bounce-back rule in Succi’s book seems to support my view.



in fact, there are two different implementations for the bounceback.

  1. fullway BB: it takes 2 time steps for the populations to reappear.
  2. halfway BB: it takes 1 time step.
    The difference is as you describe (at least it is similar).
    What does it mean physically? In steady state, both approaches are absolutely identical since the momentum passing the wall from the fluid side is equal to the momentum passing from the obstacle side. In steady state, it could take 100 time steps for the populations to reappear, you would still have the wall located midway between wall and fluid node.
    In unsteady flows, things are different. But here, other people can tell you more since I have never used halfway BB.



Thanks for the reply, Timm. I see what you mean about the steady state case. But could you please elaborate more on why “it could take 100 time steps for the populations to reappear”?

BTW, could anyone please point me to any paper about the comparison of the fullway and halfway BB rules especially for unsteady flow?

Thanks in advance.


In steady state, at each time step, the populations starting at a given point moving in a given direction are the same. This is the definition of steady state. This means that the populations crossing the wall at a given position will be the same as the populations 1, 2, 100, or 100000 time steps later. For this reason, it doesn’t matter how long the populations are on the wall. There wouldn’t be any difference. In unsteady flows, however, the flow field would notice the time lag, and the results would be wrong.

Hi Dear all,
I have written the code for square cylinder( Fortran code). I have used fullway bounceback condition and Momentum exchange method for calculating force coeffients.
I couldn’t gain good result for force coeffients.
I think that I should use halfway bounceback.But, I don’t know to impelment this condition.
Best Regards


Regarding the reappearing of populations:

[quote=Timm]in fact, there are two different implementations for the bounceback.

  1. fullway BB: it takes 2 time steps for the populations to reappear.
  2. halfway BB: it takes 1 time step. [/quote]

I too am a little confused here. What exactly does the domain look like? Is it like in the opening post that there is a node after the wall in both cases, so (f = fluid node, w = node inside wall, | = wall itself)

f f | w

When using fullway bounceback, couldn’t you simply use this layout of nodes:

f f |

and bounce the populations back on the last row of fluid nodes when you say that this row of fluid nodes is located at the wall itself, but just a tiny bit inside the fluid domain? Then the nodes inside the wall are not even required.

Now I do not really understand what you mean…

What I do is this:
F F | W
The populations propagate to the wall node. Then I have an additional sweep over all wall nodes and send the populations back where they came from in the same time step. This means, effectively, the populations do not stay on the wall. The reason why I still use the wall nodes is because I need the post-collision values of the populations for some observables I am interested in. In principle, one can also do it without wall nodes, but I think that coding would be more difficult and less efficient.
For a fluid domain of size LX x LY x LZ I need a computational domain of size LX x LY x (LZ + 2) if I have two walls along the z-axis.


Maybe I’m mixing up the bounceback and wet nodes approach. So is it true then that for bounceback the nodes are always arranged like
… F[sub]n-1[/sub] F[sub]n[/sub] | W
where for on-grid bounceback W is infinitesimally close to the actual wall, meaning that the distance from F[sub]n[/sub] to | is 1 lu and from F[sub]n[/sub] to W as well, whereas for mid-grid bounceback from F[sub]n[/sub] to W is 1 lu with the wall half way in between the two nodes?

But then still I don’t quite get why the reappearance time for the on-grid and mid-grid bounceback are 2 ts and 1 ts respectively. When do the populations leave the domain and when do they reappear?

In my case, the physical wall | is located 0.5 lattice nodes from F[sub]n[/sub] and 0.5 lattice nodes from W. The population propagating at time t from F[sub]n[/sub] to the wall hits the wall at t + 0.5, is bounced back, and lands back on F[sub]n[/sub] at t + 1. At least, this is what I do. This also explains why I do not really need W because the population never gets there. However, I keep W for other reasons. This type of boundary condition is NOT a wet boundary condition since W itself is not in the fluid.

Ok, many thanks Timm, I get it now!