Next: I/O utilities, Previous: Subsets, Up: QDP Functions
Shifts are general communication operations specified by any
permutation of sites.  Nearest neighbor shifts are a special case and
are preinitialized by QDP_initialize. Arbitrary displacement
shifts are an intermediate generalization and are created with
QDP_create_shift.  Arbitrary permutations are created with
QDP_create_map.  However they are created, all shifts are
specified by a direction label dir of type QDP_Shift
and a sign sign of type QDP_ShiftDir that takes one of two
predefined values QDP_forward and QDP_backward.
   
Shifts are treated syntactically as a modification of a QDP argument and are specified with a prefix s before the type abbreviation for the shifted field. Thus, for example,
QDP_H_eq_sH(r, a, dir, sign, s);
shifts the half fermion field a along direction dir, forward or
backward according to sign, placing the result in the field r. 
Nearest neighbor shifts are specified by values of the global shift
QDP_neighbor[mu] with mu in the range [0, Ndim-1]. 
The sign is QDP_forward for shifts from the positive direction, and
QDP_backward for shifts from the negative direction.  That is,
for QDP_forward and dir = QDP_neighbor[mu], r(x) = a(x+mu). 
For more general shifts, the direction dir is specified by the object
returned by QDP_create_shift or QDP_create_map and sign
must be either QDP_forward or QDP_backward to specify the
permutation or its inverse, respectively.
   
The subset restriction applies to the destination field r. Thus a nearest neighbor shift operation specifying the even subset shifts odd site values from the source a and places them on even site values on the destination field r.