12 SUBROUTINE sbot (ABRBOT ,DEP2 ,ECOS ,ESIN ,KWAVE , &
13 SPCSIG ,UBOT ,UX2 ,UY2 ,IDCMIN , &
14 IDCMAX ,ISSTOP ,VARFR ,FRCOEF ,IG , &
118 INTEGER ID,IS,ISSTOP,J,IDDUM,IG
119 REAL :: XDUM,KD,SBOTEO,CFBOT,FACB,CFW,FW,CURR,UC,ABRBOT,ADUM,CDUM,DDUM
121 REAL :: DEP2(MT),ECOS(MDC),ESIN(MDC),IMATDA(MDC,MSC),IMATRA(MDC,MSC), &
122 KWAVE(MSC,ICMAX),PLBTFR(MDC,MSC,NPTST),UBOT(MT), &
123 UX2(MT),UY2(MT),DISSC1(MDC,MSC),FRCOEF(MT)
124 INTEGER :: IDCMIN(MSC),IDCMAX(MSC)
127 IF(
ibot >= 1 .AND. dep2(ig) > 0.)
THEN 137 ELSE IF (
ibot == 2)
THEN 148 cfbot = cfw * ubot(ig) /
grav_w 149 ELSE IF(
ibot == 3)
THEN 162 IF((abrbot/akn) > 1.57)
THEN 163 xdum =
pbot(4) + log10( abrbot / akn )
173 ddum = ( adum + log10(adum) - xdum ) / ( 1.+ ( 1. / adum) )
175 IF(
abs(cdum - adum) < 1.e-4)
GOTO 29
177 WRITE(*,*)
' error in iteration fw: Madsen formulation' 182 fw = 1. / (16. * adum**2)
186 cfbot = ubot(ig) * fw / (sqrt(2.) *
grav_w)
190 kd = kwave(is,1) * dep2(ig)
192 facb = cfbot * (spcsig(is) / sinh(kd)) **2
194 DO iddum = idcmin(is) , idcmax(is)
195 id =
mod( iddum - 1 + mdc , mdc ) + 1
200 curr = ux2(ig)*ecos(id) + uy2(ig)*esin(id)
203 sboteo = facb +
pbot(1) * uc * (spcsig(is) / sinh(kd)) **2
208 imatra(id,is) = imatra(id,is) - sboteo*
ac2(id,is,ig)
209 imatda(id,is) = imatda(id,is) + sboteo
224 SUBROUTINE frabre ( HM, ETOT, QBLOC )
277 REAL :: ETOT, HM, QBLOC
281 IF((hm > 0.) .AND. (etot >= 0.))
THEN 282 b = sqrt(8. * etot / (hm*hm) )
289 ELSE IF(b <= 1.0)
THEN 301 qbloc = qo - b2 * (qo-z)/(b2-z)
311 SUBROUTINE ssurf (ETOT ,HM ,QB ,SMEBRK , &
312 IMATRA ,IMATDA ,IDCMIN ,IDCMAX , &
426 INTEGER :: ISSTOP,IDCMIN(MSC),IDCMAX(MSC)
427 REAL :: DISSC0(MDC,MSC),DISSC1(MDC,MSC), &
428 IMATDA(MDC,MSC),IMATRA(MDC,MSC),PLWBRK(MDC,MSC,NPTST)
429 REAL :: ETOT,HM,QB,SMEBRK
430 INTEGER :: ID,IDDUM,IENT,IS,IG
431 DOUBLE PRECISION BB,DIS0,SbrD,SURFA0,SURFA1,WS
435 bb = 8. * dble(etot) / ( dble(hm)**2 )
452 IF(real(bb) > 0. .AND. real(
abs(bb - dble(qb))) > 0.)
THEN 453 ws = ( dble(
psurf(1)) / dble(
pi_w)) * dble(qb) * dble(smebrk) / bb
463 DO iddum = idcmin(is), idcmax(is)
464 id =
mod( iddum - 1 + mdc , mdc ) + 1
465 imatda(id,is) = imatda(id,is) + real(ws)
466 dis0 = ws * dble(
ac2(id,is,ig))
467 imatra(id,is) = imatra(id,is) - real(dis0)
478 SUBROUTINE swcap (SPCDIR ,SPCSIG ,KWAVE ,IDCMIN , &
479 IDCMAX ,ISSTOP ,ETOT ,IMATDA , &
480 IMATRA ,PLWCAP ,CGO ,UFRIC , &
481 DEP2 ,DISSIP ,DISIMP ,IG )
618 INTEGER,
INTENT(IN) :: ISSTOP, IDCMIN(MSC), IDCMAX(MSC)
619 REAL,
INTENT(IN) :: DEP2(MT)
620 REAL,
INTENT(IN) :: ETOT
621 REAL,
INTENT(IN) :: KWAVE(MSC,MICMAX)
622 REAL,
INTENT(IN) :: SPCDIR(MDC,6), SPCSIG(MSC)
623 REAL,
INTENT(OUT) :: PLWCAP(MDC,MSC,NPTST)
624 REAL,
INTENT(IN OUT) :: IMATDA(MDC,MSC), IMATRA(MDC,MSC)
625 REAL,
INTENT(IN OUT) :: DISSIP(MDC,MSC), DISIMP(MDC,MSC)
626 REAL,
INTENT(IN) :: UFRIC
627 REAL,
INTENT(IN) :: CGO(MSC,MICMAX)
629 INTEGER,
SAVE :: IENT = 0
630 INTEGER :: ID, IDDUM, IS, ID1, ID2, IF, IL, MXWCP,IG
631 REAL :: A, C_BJ, HM, HRMS, N1, N2
632 REAL :: QB_WC, SIG0, STP_OV, STP_PM
633 REAL :: DDIF, DELTA, DSTEEP, EBIN, XFAC
634 REAL :: CPOW, CTOT, GAMMA
636 REAL,
ALLOCATABLE :: C_K(:), C_LH(:), WCAP(:), WCIMPL(:)
637 REAL,
ALLOCATABLE :: CUMSTP(:,:), DSIGMA(:)
638 REAL,
ALLOCATABLE :: FCOS(:)
641 CHARACTER*20 NUMSTR, CHARS
645 IF(
iwcap > mxwcp)
THEN 649 chars = numstr(mxwcp+1,
rnan,
'(I1)')
651 msgstr =
'Value for IWCAP should be less than '// chars(if:il)
658 IF(etot <= 0.)
RETURN 659 IF(
etot2 <= 0.)
RETURN 660 IF(
etot4 <= 0.)
RETURN 661 IF(
actot <= 0.)
RETURN 664 ALLOCATE (c_k(msc), c_lh(msc), wcap(msc), wcimpl(msc))
665 ALLOCATE (cumstp(0:msc,mdc), dsigma(1:msc))
666 ALLOCATE (fcos(1:mdc))
675 stp_ov =
km_wam * sqrt(etot)
676 stp_pm = sqrt(
pwcap(2))
681 (stp_ov / stp_pm)**n2
689 hrms = sqrt(8. * etot)
692 CALL frabre(hm, etot, qb_wc)
698 ELSE IF(hrms > 0.)
THEN 699 c_bj = (
pwcap(7) * hm**2 * qb_wc) / (
pi_w * hrms**2)
709 sig0 = sqrt(
etot2 / etot)
727 xfac = (spcsig(3)-spcsig(1))/(2.*spcsig(2))
728 dsigma(:) = xfac*spcsig(:)
729 delta = spcdir(2,1)-spcdir(1,1)
734 ddif = real(id1-1)*delta
735 fcos(id1) = (
abs(cos(ddif)))**
pwcap(13)
742 ctot = sqrt(cpow/(2.*
pi_w))*(1.+0.25/cpow)
744 ctot = 1./sqrt(
pi_w)*gamma(0.5*cpow+1.)/gamma(0.5*cpow+0.5)
749 binsize = spcsig(is)*delta*dsigma(is)
751 cumstp(is,id1) = cumstp(is-1,id1)
753 ebin=
ac2(id2,is,ig)*binsize
755 dsteep = kwave(is,1)**2*ebin*fcos(
abs(id1-id2)+1)
756 cumstp(is,id1) = cumstp(is,id1) + dsteep
760 cumstp =
pwcap(12)*cumstp
781 b = (1./
pi2_w) * cgo(is,1) * kwave(is,1)**3 * ef(is)
785 pwcap(10)= 3. + tanh(25.76*(ufric*kwave(is,1)/spcsig(is)-0.1))
786 p = 0.5*
pwcap(10)*(1. + tanh( 10.*( (b/
pwcap(12))**0.5 - 1.)))
790 stp_ov =
km_wam * sqrt(etot)
793 (
grav_w**(0.5)*kwave(is,1)**(0.5)/spcsig(is))**(
pwcap(10)/2-1) * &
794 grav_w**(0.5)*kwave(is,1)**(0.5)
804 ((
iwcap == 5) .AND. (c_bj <= c_k(is))))
THEN 806 ELSE IF(
iwcap == 3)
THEN 808 ELSE IF((
iwcap == 4) .OR. ((
iwcap == 5) .AND. (c_bj >= c_k(is))))
THEN 816 wcimpl(is)=wcap(is) * ((1.-qb_wc)/((hrms**2/hm**2)-qb_wc))
817 wcap(is) =wcap(is) + wcimpl(is)
820 CALL msgerr(2,
'Whitecapping is inactive')
821 WRITE (
printf,*)
'Occurs in gridpoint: ', ig
835 DO iddum = idcmin(is), idcmax(is)
836 id =
mod(iddum - 1 + mdc, mdc) + 1
837 imatda(id,is) = imatda(id,is) + wcap(is)
838 imatra(id,is) = imatra(id,is) - wcap(is) *
ac2(id,is,ig)
840 dissip(id,is) = dissip(id,is) + wcap(is)
841 IF (
testfl) plwcap(id,is,
iptst) = -1.*(wcap(is)-wcimpl(is))
851 DO iddum = idcmin(is), idcmax(is)
852 id =
mod(iddum - 1 + mdc, mdc) + 1
853 imatda(id,is) = imatda(id,is) + cumstp(is,id)
854 dissip(id,is) = dissip(id,is) + cumstp(is,id)
855 IF (
testfl) plwcap(id,is,
iptst) = -1.*cumstp(is,id)
868 DO iddum = idcmin(is), idcmax(is)
869 id =
mod(iddum - 1 + mdc, mdc) + 1
870 imatra(id,is) = imatra(id,is) + wcimpl(is) *
ac2(id,is,ig)
871 disimp(id,is) = disimp(id,is) + wcimpl(is) *
ac2(id,is,ig)
876 DEALLOCATE (c_k, c_lh, wcap, wcimpl)
877 DEALLOCATE (cumstp, dsigma, fcos)
885 SUBROUTINE brkpar(BRCOEF,ECOS,ESIN,AC2,SPCSIG,DEP2,IG)
925 REAL,
INTENT(OUT) :: BRCOEF
927 REAL,
INTENT(IN) :: SPCSIG(MSC)
928 REAL,
INTENT(IN) :: AC2(MDC,MSC,0:MT)
929 REAL,
INTENT(IN) :: ECOS(MDC), ESIN(MDC)
930 REAL,
INTENT(IN) :: DEP2(MT)
933 INTEGER,
INTENT(IN) :: IG
956 REAL :: ETOTS,EEX,EEY,EAD,SIGMA1,COSDIR,SINDIR,DDDX,DDDY,DDDS,DETOT
967 detot = sigma1**2 * ac2(id,is,
kcgrd(1))
971 eex = eex + ead * ecos(id)
972 eey = eey + ead * esin(id)
995 f1 = 0.50_sp*(dep2(i1)+dep2(i2))
996 dddx = dddx + f1*(
vy(i1)-
vy(i2))
997 dddy = dddy + f1*(
vx(i2)-
vx(i1))
1000 dddy = dddy/
art2(ig)
1003 ddds = -1. * ( dddx * cosdir + dddy * sindir )
1008 ddds = max( 1.e-6 , ddds)
1010 brcoef = min(
psurf(5) , brcoef )
integer, dimension(:), allocatable, target ntsn
subroutine ssurf(ETOT, HM, QB, SMEBRK, IMATRA, IMATDA, IDCMIN, IDCMAX, PLWBRK, ISSTOP, IG)
real, dimension(msurf) psurf
real, dimension(mwcap) pwcap
real, dimension(:,:,:), allocatable ac2
real(sp), dimension(:), allocatable, target art2
real(sp), dimension(:), allocatable, target vx
subroutine frabre(HM, ETOT, QBLOC)
real(sp), dimension(:), allocatable, target vy
subroutine msgerr(LEV, STRING)
integer, dimension(micmax) kcgrd
subroutine sbot(ABRBOT, DEP2, ECOS, ESIN, KWAVE, SPCSIG, UBOT, UX2, UY2, IDCMIN, IDCMAX, ISSTOP, VARFR, FRCOEF, IG, IMATRA)
subroutine txpbla(TEXT, IF, IL)
subroutine brkpar(BRCOEF, ECOS, ESIN, AC2, SPCSIG, DEP2, IG)
real, dimension(mbot) pbot
integer, dimension(:,:), allocatable, target nbsn
subroutine swcap(SPCDIR, SPCSIG, KWAVE, IDCMIN, IDCMAX, ISSTOP, ETOT, IMATDA, IMATRA, PLWCAP, CGO, UFRIC, DEP2, DISSIP, DISIMP, IG)