program ch1307 implicit none real :: hi, hr, hlow, high, half, xl real :: xh, xm, d real, parameter :: tol = 1.0e-6 ! problem - find hi from expression given ! in function f ! F=A*(1.0-0.8*EXP(-0.6*C/A))-B ! The above is a Fortran 77 ! statement function. ! hi is incident wave height (c) ! hr is reformed wave height (b) ! d is water depth at terrace edge (a) print *, ' Give reformed wave height, and water depth' read *, hr, d ! for hlow - let hlow=hr ! for high - let high=hlow*2.0 ! check that signs of function ! results are different hlow = hr high = hlow*2.0 xl = f(hlow, hr, d) xh = f(high, hr, d) do while ((xl*xh)>=0.0) high = high*2.0 xh = f(high, hr, d) end do do half = (hlow+high)*0.5 xm = f(half, hr, d) if ((xl*xm)<0.0) then xh = xm high = half else xl = xm hlow = half end if if (abs(high-hlow)<=tol) exit end do print *, ' Incident Wave Height Lies Between' print *, hlow, ' and ', high, ' metres' contains real function f(a, b, c) implicit none real, intent (in) :: a real, intent (in) :: b real, intent (in) :: c f = a*(1.0-0.8*exp(-0.6*c/a)) - b end function f end program ch1307