subroutine push

      implicit double precision(a-h,o-z)
#include "divcon.dim"
#include "divcon.h"

C     pushes the residues, as defined in the push groups, apart
      character line*80


C-RDC       write(iout,'(/" PUSH THE CLUSTER GROUPS APART BY ",E12.5," A")')
C-RDC      &     push0

C     displace the groups, building a cube in order to avoid possible
C     overflow problems

      ndim = (ncores-1)**(0.3333334) + 1
      ndim2 = ndim*ndim
      do i=2,ncores
         ix = mod(i-1,ndim)
         iy = mod(i-1,ndim2)/ndim
         iz = (i-1)/ndim2
         disx = dble(ix)*push0
         disy = dble(iy)*push0
         disz = dble(iz)*push0
         j1 = icorel1(i)
         j2 = icorel1(i+1)-1
         do j=j1,j2
            k1 = irpnt(j)
            k2 = irpnt(j+1)-1
            do k=k1,k2
               xyz(1,k) = xyz(1,k) + disx
               xyz(2,k) = xyz(2,k) + disy
               xyz(3,k) = xyz(3,k) + disz
            enddo
         enddo
      enddo

      end