120 SUBROUTINE w3sic4 (A, DEPTH, CG, IX, IY, S, D)
405 USE w3idatmd,
ONLY: icep1, icep2, icep3, icep4, icep5, &
425 REAL,
INTENT(IN) :: cg(
nk), a(
nspec), depth
427 INTEGER,
INTENT(IN) :: ix, iy
433 INTEGER,
SAVE :: ient = 0
439 INTEGER :: ikth, ik, ith, ic4method, ifc
440 REAL :: d1d(
nk), eb(
nk)
441 REAL :: icecoef1, icecoef2, icecoef3, &
442 icecoef4, icecoef5, icecoef6, &
444 REAL :: cice1,cice2,cice3,cice4,cice5
445 REAL :: ki1,ki2,ki3,ki4,fc5,fc6,fc7
446 REAL :: hs, emean, hice
447 REAL :: chf,mpow,npow
448 REAL,
ALLOCATABLE :: wn_i(:)
449 REAL,
ALLOCATABLE :: alpha(:)
450 REAL,
ALLOCATABLE :: freq(:)
451 REAL,
ALLOCATABLE :: marg1(:), marg2(:)
452 REAL,
ALLOCATABLE :: karg1(:), karg2(:), karg3(:)
459 CALL strace (ient,
'W3SIC4')
466 ALLOCATE(wn_i(0:
nk+1))
467 ALLOCATE(alpha(0:
nk+1))
468 ALLOCATE(marg1(0:
nk+1))
469 ALLOCATE(marg2(0:
nk+1))
470 ALLOCATE(karg1(0:
nk+1))
471 ALLOCATE(karg2(0:
nk+1))
472 ALLOCATE(karg3(0:
nk+1))
473 ALLOCATE(freq(0:
nk+1))
503 IF (
inflags2(-7)) icecoef1 = icep1(ix,iy)
504 IF (
inflags2(-6)) icecoef2 = icep2(ix,iy)
505 IF (
inflags2(-5)) icecoef3 = icep3(ix,iy)
506 IF (
inflags2(-4)) icecoef4 = icep4(ix,iy)
507 IF (
inflags2(-3)) icecoef5 = icep5(ix,iy)
511 WRITE (ndse,*)
'DUPLICATE USE OF MUD PARAMETERS'
515 WRITE (ndse,*)
'DUPLICATE USE OF MUD PARAMETERS'
518 IF (
inflags2(-2)) icecoef6 = mudd(ix,iy)
519 IF (
inflags2(-1)) icecoef7 = mudt(ix,iy)
520 IF (
inflags2(0 )) icecoef8 = mudv(ix,iy)
526 WRITE (
ndst,9000) depth,icecoef1,icecoef2,icecoef3,icecoef4
533 SELECT CASE (ic4method)
536 alpha = exp(-icecoef1 *
tpi /
sig - icecoef2)
567 marg1 = cice1 + cice2*freq + cice3*freq**2
568 marg2 = cice4*freq**3 + cice5*freq**4
569 alpha = marg1 + marg2
574 karg1 = -0.3203 + 2.058*hice - 0.9375*(
tpi/
sig)
575 karg2 = -0.4269*hice**2 + 0.1566*hice*(
tpi/
sig)
576 karg3 = 0.0006 * (
tpi/
sig)**2
577 alpha = exp(karg1 + karg2 + karg3)
585 eb(ik) = eb(ik) + a(ith+(ik-1)*
nth)
589 eb(ik) = eb(ik) *
dden(ik) / cg(ik)
590 emean = emean + eb(ik)
592 hs = 4.*sqrt( max(0.,emean) )
596 ELSE IF (hs > 3)
THEN
609 IF((ki1.EQ.0.0).OR.(ki2.EQ.0.0).OR.(ki3.EQ.0.0).OR. &
610 (ki4.EQ.0.0).OR.(fc5.EQ.0.0).OR.(fc6.EQ.0.0).OR. &
612 WRITE (ndse,1001)
'ICE PARAMETERS'
617 IF(freq(ik).LT.fc5)
THEN
619 ELSEIF(freq(ik).LT.fc6)
THEN
621 ELSEIF(freq(ik).LT.fc7)
THEN
634 WRITE (ndse,1001)
'ICE PARAMETERS'
641 IF(freq(ik).LT.
ic4_fc(ifc))
THEN
652 alpha(ik) = 0.2*(freq(ik)**2.13)*hice
675 wn_i(ik) = chf*hice*(freq(ik)**3)
700 wn_i(ik) = chf*(hice**mpow)*(freq(ik)**npow)
716 d1d(ik) = -2. * cg(ik) * wn_i(ik)
724 d(ikth) = d1d(
mapwn(ikth))
736 dout(ik,ith) = d(ith+(ik-1)*
nth)
740 0.0, 0.001,
'Diag Sice',
' ',
'NONAME')
749 1001
FORMAT (/
' *** WAVEWATCH III ERROR IN W3SIC4 : '/ &
750 ' ',a,
' REQUIRED BUT NOT SELECTED'/)
753 9000
FORMAT (
' TEST W3SIC4 : DEPTH,ICECOEF1 : ',2e10.3)