Source code for issm.parallelrange

#! /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