
module fold { # fold the ends inside
#% _lop (x, y)
    integer                             :: nu, nr, np, nt
    nu = size (y) 
    nt = size (x)
    np = (nt + nu) /2
    nr = (nt - nu) /2 + 1
    if (adj) {
       x (nt:np+1:-1)      = y (nu-nt+np+1:nu  ) + x (nt:np+1:-1)
       x (nr-1: 1:-1)      = y (         1:nr-1) + x (nr-1: 1:-1) 
       x (nr:np)           = y                   + x (nr:np)
    } else {
       y                   = y                   + x (nr:np)
       y (         1:nr-1) = y (         1:nr-1) + x (nr-1: 1:-1) 
       y (nu-nt+np+1:nu  ) = y (nu-nt+np+1:nu  ) + x (nt:np+1:-1)
    }
}

