I believe there is a bug in the use of separation() in calcPatchToPatch().
I already posted a note on an another bug report but got no reply (0000151: cyclicGgi boundary condition does not work in OpenFoam-1.6-ext).
In calcPatchToPatch() the translation vector is calculated calling for the master patch the shadow().separation() method that "unfortunately" returns 0() because it has not already been constructed and thus the ggiZoneInterpolation constructor have a null separation vector. As a consequence the two cyclic ggi patches are not seen as overlapping even though the separation vector is correctly specified (same set up works in 1.5-dev).
A possible bug fix (it worked in my tests: shadow().separation() = 0()
but separation() = 1((0.0073 0 0))) is to specify the separation vector as the opposite of the master to slave separation in such a manner:
patchToPatchPtr_ =
new ggiZoneInterpolation
(
zone()(), // This zone reference
shadow().zone()(), // This shadow zone reference
forwardT(),
reverseT(),
-separation(), // Slave-to-master separation. Bug fix
0, // Non-overlapping face tolerances
0, // HJ, 24/Oct/2008
true, // Rescale weighting factors. Bug fix, MB.
// ggiInterpolation::AABB
ggiInterpolation::BB_OCTREE // Octree search, MB.
);