PROGRAM ch1607 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 ! 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 ENDIF 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 ch1607