"""
This example computes PI to certain precision using 
4 processors and a monte carlo simulation.
"""

import random
import mpi

def computePi(nsamples):
	rank, size = mpi.rank, mpi.size
	oldpi, pi, mypi = 0.0,0.0,0.0
	
	done = False
	while(not done):
		inside = 0
		for i in xrange(nsamples):
			x = random.random()
			y = random.random()
			if ((x*x)+(y*y)<1):
				inside+=1
		
		oldpi = pi
		mypi = (inside * 1.0)/nsamples
		pi =  (4.0 / mpi.size) * mpi.allreduce(mypi, mpi.SUM) 
		
		delta = abs(pi - oldpi)
		if(mpi.rank==0):
			print "pi:",pi," - delta:",delta
		if(delta < 0.00001):
			done = True
	return pi

if __name__=="__main__":
	pi = computePi(10000)
	if(mpi.rank==0):
		print "Computed value of pi on",mpi.size,"processors is",pi
	

