74 INTEGER,
PARAMETER ::
nar1d = 121
75 REAL,
PARAMETER ::
dfac = 6.
84 SUBROUTINE wavnu1 (SI,H,K,CG)
164 REAL,
INTENT(IN) :: SI, H
165 REAL,
INTENT(OUT) :: K, CG
172 INTEGER,
SAVE :: IENT = 0
174 REAL :: SQRTH, SIX, R1, R2
179 CALL strace (ient,
'WAVNU1')
186 IF (i1.LE.
n1max.AND.i1.GE.1)
THEN
188 r1 = six/
dsie - real(i1)
190 k = ( r2*
ewn1(i1) + r1*
ewn1(i2) ) / h
191 cg = ( r2*
ecg1(i1) + r1*
ecg1(i2) ) * sqrth
203 SUBROUTINE wavnu2 (W,H,K,CG,EPS,NMAX,ICON)
260 INTEGER,
INTENT(IN) :: NMAX
261 INTEGER,
INTENT(OUT) :: ICON
262 REAL,
INTENT(IN) :: W, H, EPS
263 REAL,
INTENT(OUT) :: CG, K
270 INTEGER,
SAVE :: IENT = 0
272 REAL :: F, W0, FD, DIF, RDIF, KOLD
278 CALL strace (ient,
'WAVNU2')
294 IF (w0.LT.sqrt(
grav/h))
THEN
309 IF (dif .LT. eps .AND. rdif .LT. eps)
THEN
314 f =
grav*kold*tanh(kold*h)-w0**2
315 IF (kold*h.GT.25)
THEN
316 fd =
grav*tanh(kold*h)
318 fd =
grav*tanh(kold*h) +
grav*kold*h/((cosh(kold*h))**2)
326 IF (dif .LT. eps .AND. rdif .LT. eps) icon = 1
328 IF (2*k*h.GT.25)
THEN
331 cg = w0/k * 0.5*(1+(2*k*h/sinh(2*k*h)))
346 PURE SUBROUTINE wavnu3 (SI,H,K,CG)
422 REAL,
INTENT(IN) :: si, h
423 REAL,
INTENT(OUT) :: k, cg
430 REAL :: kh0, kh, tmp, tp, cp, l
431 REAL,
PARAMETER :: beta1 = 1.55
432 REAL,
PARAMETER :: beta2 = 1.3
433 REAL,
PARAMETER :: beta3 = 0.216
434 REAL,
PARAMETER :: zpi = 2 *
pi
435 REAL,
PARAMETER :: kdmax = 20.
443 kh0 = zpi*zpi*h/
grav*tp*tp
444 tmp = 1.55 + 1.3*kh0 + 0.216*kh0*kh0
445 kh = kh0 * (1 + kh0**1.09 * 1./exp(min(kdmax,tmp))) / sqrt(tanh(min(kdmax,kh0)))
447 cg = 0.5*(1+(2*kh/sinh(min(kdmax,2*kh))))*si/k
531 REAL,
INTENT(IN) :: sig, dw
532 REAL,
INTENT(OUT) :: wnl, cgl
542 depth = max(
dmin , dw)
544 CALL wavnu3(sig,depth,wnl,cgl)
639 INTEGER,
SAVE :: IENT = 0
641 REAL :: DEPTH, CG, SIMAX, SI, K
646 CALL strace (ient,
'DISTAB')
665 CALL wavnu2 (si,depth,k,cg,1e-7,15,icon)
674 CALL wavnu2 (si,depth,k,cg,1e-7,15,icon)
687 ,K_SOLUTION,CG,ALPHA)
796 REAL ,
INTENT(IN) :: H_ICE, H_WDEPTH, SIGMA(NK)
797 REAL ,
INTENT(IN) :: VISC
798 REAL ,
INTENT(OUT) :: K_SOLUTION(NK) ,CG(NK) ,ALPHA(NK)
804 INTEGER,
SAVE :: IENT = 0
807 REAL,
PARAMETER :: FERRORMAX=1.0e-5
808 INTEGER,
PARAMETER :: N_ITER=20
830 CALL strace (ient,
'LIU_FORWARD_DISPERSION')
843 fwanted=sigma(ik)/
tpi
846 CALL wavnu1(sigma(ik),h_wdepth,k_open,cg_open)
860 DO WHILE ( abs(df).GE.ferror .AND. iter.LE.n_iter )
864 get_cg,freq(iter),cg(ik),alpha(ik))
870 ELSEIF (iter.EQ.n_iter+1)
THEN
871 WRITE(
ndse,800) n_iter
875 dfdk = (freq(iter)-freq(iter-1)) / (kwn(iter)-kwn(iter-1))
876 df = fwanted - freq(iter)
883 kwn(iter+1) = kwn(iter) + dk
886 IF(kwn(iter+1) < 0.0)
THEN
887 kwn(iter+1) =
tpi / 1000.0
896 k_solution(ik) = kwn(iter)
900 get_cg,fdummy,cg(ik),alpha(ik))
904 WRITE(*,*)
'FORWARD OUT: K_SOLUTION,CG,ALPHA = ', &
907 WRITE(*,*)fwanted,alpha
911 800
FORMAT (/
' *** WAVEWATCH III ERROR IN ' &
912 'W3SIC2_LIU_FORWARD_DISPERSION : ' / &
913 ' NO SOLUTION FOUND AFTER ',i4,
' ITERATIONS.')
921 ,GET_CG,FREQ,CG,ALPHA)
1059 REAL ,
INTENT(IN) :: H_ICE,H_WDEPTH,KWN
1060 REAL ,
INTENT(IN) :: VISC
1061 LOGICAL,
INTENT(IN) :: GET_CG
1062 REAL ,
INTENT(OUT) :: FREQ,CG,ALPHA
1067 INTEGER,
SAVE :: IENT = 0
1069 REAL,
PARAMETER :: E = 6.0e+9
1070 REAL,
PARAMETER :: S = 0.3
1083 CALL strace (ient,
'LIU_REVERSE_DISPERSION')
1093 WRITE(*,*)
'REVERSE IN: H_ICE,VISC,H_WDEPTH,KWN,GET_CG = ', &
1094 h_ice,visc,h_wdepth,kwn,get_cg
1103 b = (e * h_ice**3) / (12. * (1. - s**2) *
dwat)
1104 m = dice * h_ice /
dwat
1108 ELSEIF ( kh<1.0e-4 )
THEN
1111 cothterm = cosh(kh) / sinh(kh)
1113 sigma = sqrt((
grav * kwn + b * kwn**5) / (cothterm + kwn * m))
1119 cg = (
grav + (5.0+4.0 * kwn * m) * (b * kwn**4)) &
1120 / (2.0 * sigma * ((1.0 + kwn * m)**2))
1121 alpha = (sqrt(visc) * kwn * sqrt(sigma)) &
1122 / (cg * sqrt(2.0) * (1 + kwn * m))
1126 WRITE(*,*)
'REVERSE OUT: FREQ,CG,ALPHA = ',freq,cg,alpha