C ------------------------------------------------------------------------
C dboard.f
C see pi_send.f and pi_reduce.f
C ------------------------------------------------------------------------
C Explanation of constants and variables used in this function:
C darts = number of throws at dartboard
C score = number of darts that hit circle
C n = index variable
C r = random number between 0 and 1
C x_coord = x coordinate, between -1 and 1
C x_sqr = square of x coordinate
C y_coord = y coordinate, between -1 and 1
C y_sqr = square of y coordinate
C pi = computed value of pi
C ------------------------------------------------------------------------
real*8 function dboard(darts)
integer darts, score, n
real*4 r
real*8 x_coord, x_sqr, y_coord, y_sqr, pi
score = 0
C Throw darts at board. Done by generating random numbers
C between 0 and 1 and converting them to values for x and y
C coordinates and then testing to see if they "land" in
C the circle." If so, score is incremented. After throwing the
C specified number of darts, pi is calculated. The computed value
C of pi is returned as the value of this function, dboard.
C Note: the seed value for rand() is set in pi_send.f or pi_reduce.f.
do 10 n = 1, darts
r = rand()
x_coord = (2.0 * r) - 1.0
x_sqr = x_coord * x_coord
r = rand()
y_coord = (2.0 * r) - 1.0
y_sqr = y_coord * y_coord
if ((x_sqr + y_sqr) .le. 1.0) then
score = score + 1
endif
10 continue
pi = 4.0 * score / darts
dboard = pi
end