remap takes an argument of the same shape as
the array (which does not, however, conform with the array) and
copies its value into the array.
void ArrayInt :: remap(ArrayInt) ;
void ArrayFloat :: remap(ArrayFloat) ;
void ArrayDouble :: remap(ArrayDouble) ;
...
Eg
c.remap(d) ; // c = d
This operation clearly does require communication.
shift is similar to remap, except that the argument does
conform with the array, but the copy is a shifted copy.
Again, communication is required.