--- /dev/null
+#ifdef MPI
+ subroutine work_partition(lprint,ncon_work)
+c Split the conformations between processors
+ implicit none
+ include "DIMENSIONS"
+ include "sizesclu.dat"
+ include "mpif.h"
+ include "COMMON.IOUNITS"
+ include "COMMON.CLUSTER"
+ include "COMMON.MPI"
+ integer n,chunk,i,j,ii,remainder
+ integer kolor,key,ierror,errcode,ncon_work
+ logical lprint
+C
+C Divide conformations between processors; the first and
+C the last conformation to handle by ith processor is stored in
+C indstart(i) and indend(i), respectively.
+C
+C First try to assign equal number of conformations to each processor.
+C
+ n=ncon_work
+ write (iout,*) "n=",n," nprocs=",nprocs
+ indstart(0)=1
+ chunk = N/nprocs
+ scount(0) = chunk
+c print *,"i",0," indstart",indstart(0)," scount",
+c & scount(0)
+ do i=1,nprocs-1
+ indstart(i)=chunk+indstart(i-1)
+ scount(i)=scount(i-1)
+c print *,"i",i," indstart",indstart(i)," scount",
+c & scount(i)
+ enddo
+C
+C Determine how many conformations remained yet unassigned.
+C
+ remainder=N-(indstart(nprocs-1)
+ & +scount(nprocs-1)-1)
+c print *,"remainder",remainder
+C
+C Assign the remainder conformations to consecutive processors, starting
+C from the lowest rank; this continues until the list is exhausted.
+C
+ if (remainder .gt. 0) then
+ do i=1,remainder
+ scount(i-1) = scount(i-1) + 1
+ indstart(i) = indstart(i) + i
+ enddo
+ do i=remainder+1,nprocs-1
+ indstart(i) = indstart(i) + remainder
+ enddo
+ endif
+
+ indstart(nprocs)=N+1
+ scount(nprocs)=0
+
+ do i=0,NProcs
+ indend(i)=indstart(i)+scount(i)-1
+ idispl(i)=indstart(i)-1
+ enddo
+
+ N=0
+ do i=0,Nprocs-1
+ N=N+indend(i)-indstart(i)+1
+ enddo
+
+c print *,"N",n," NCON_WORK",ncon_work
+ if (N.ne.ncon_work) then
+ write (iout,*) "!!! Checksum error on processor",me,
+ & n,ncon_work
+ call flush(iout)
+ call MPI_Abort( MPI_COMM_WORLD, Ierror, Errcode )
+ endif
+
+ if (lprint) then
+ write (iout,*) "Partition of work between processors"
+ do i=0,nprocs-1
+ write (iout,'(a,i5,a,i7,a,i7,a,i7)')
+ & "Processor",i," indstart",indstart(i),
+ & " indend",indend(i)," count",scount(i)
+ enddo
+ endif
+ return
+ end
+#endif