#! /usr/bin/env python
[docs]def parallelrange(rank,numprocs,globalsize):
	"""
	PARALLELRANGE - from a rank, and a number of processors, figure out a range, for parallel tasks.
 
	   Usage: 
	      i1,i2=parallelrange(rank,numprocs,globalsize)
	"""
	#We use floor. we under distribute rows. The rows left are then redistributed, therefore resulting in a more even distribution.
	num_local_rows=[int(globalsize/numprocs) for i in xrange(numprocs)]
	#There may be some rows left. Distribute evenly.
	row_rest=globalsize - numprocs*int(globalsize/numprocs)
	for i in xrange(row_rest):
		num_local_rows[i]=num_local_rows[i]+1
	i1=0
	for i in xrange(rank-1):
		i1+=num_local_rows[i]
	i2=i1+num_local_rows[rank-1]-1
	return i1,i2