When you switch from an on-lattice boundary condition, such as Zou/He, to a half-way-between-lattice boundary condition, such as full-way bounce-back (see http://www.lbmethod.org/models:bc for more information), you need to be careful as to how to relate lattice indices to physical coordinates.
Consider, for the sake of illustration, a channel with a resolution of 2 grid cells from one wall to another. Using an on-lattice boundary condition, this requires three grid nodes, as shown on the following sketch:
0-----1----2
|-----*-----|
The lines | label the nodes on which the boundary condition is implemented, and which correspond to the physical location of the boundary. There is an additional bulk node * between the two. If you call x the physical coordinate ranging from 0 to 1 between the two walls, you find the following relation between the lattice index iX and the physical location:
x = iX * 1/N
Here, N=2 is the lattice resolution.
With full-way bounce-back, four grid nodes are needed, as shown on the following sketch:
0-----1----2-----3
–|-------–|--
The four grid nodes are labelled by a star *, and full-way bounce-back is implemented on node 0 and on node 3. The physical wall location is indicated by a line | . Here, the relation between lattice index and physical location is
x = (iX-1/2) * 1/N
The OpenLB class LBunits does only part of the job for you: computing the total number of grid nodes. This is, if you instantiate a LBunits object with resolution N=2 and geometry lx=1, the method getNx(), or getNx(false) stands for on-lattice and yields 3, whereas the method call getNx(true) stands for half-way-between-nodes and yields 4.
You need however to take into account yourself the shift factor 1/2 in the bounce-back case, for example when initializing the boundary condition, or cross-checking the numerical result with an analytical profile. In practice, this probably amounts to something like calling computePoiseuilleProfile(iX-0.5) instead of computePoiseuilleProfile(iX) (and making sure that the parameter of computePoiseuilleProfile is real-valued instead of integer-valued).
By the way, if your question is about how to implement full-way bounce-back in OpenLB, you should have a look at the example cylinder2d. Because of the simplicity of this boundary condition, the formalism of the “OnLatticeBoundaryCondition” class is not required in this case: full-way bounce-back dynamics can directly be assigned to lattice nodes, in a single command.