4 SUBROUTINE clcdrag(knon, nsrf, paprs, pplay,&
31 INTEGER,
INTENT(IN) :: knon,
nsrf
32 REAL,
DIMENSION(klon,klev+1),
INTENT(IN) :: paprs
33 REAL,
DIMENSION(klon,klev),
INTENT(IN) ::
pplay
34 REAL,
DIMENSION(klon),
INTENT(IN) :: u1, v1, t1, q1
35 REAL,
DIMENSION(klon),
INTENT(IN) ::
tsurf,
qsurf
36 REAL,
DIMENSION(klon),
INTENT(IN) ::
rugos
37 REAL,
DIMENSION(klon),
INTENT(OUT) :: pcfm, pcfh
48 REAL,
PARAMETER :: ckap=0.40, cb=5.0, cc=5.0, cd=5.0, cepdu2=(0.1)**2
56 REAL,
DIMENSION(klon) :: zcfm1, zcfm2
57 REAL,
DIMENSION(klon) :: zcfh1, zcfh2
58 REAL,
DIMENSION(klon) :: zcdn
59 REAL,
DIMENSION(klon) :: zri
60 REAL,
DIMENSION(klon) :: zgeop1
61 LOGICAL,
PARAMETER :: zxli=.
false.
65 fsta(
x) = 1.0 / (1.0+10.0*
x*(1+8.0*
x))
66 fins(
x) = sqrt(1.0-18.0*
x)
73 zgeop1(
i) = rd * t1(
i) / (0.5*(paprs(
i,1)+
pplay(
i,1))) &
81 zdu2 = max(cepdu2,u1(
i)**2+v1(
i)**2)
83 ztvd = (t1(
i)+zgeop1(
i)/rcpd/(1.+rvtmp2*q1(
i))) &
85 zri(
i) = zgeop1(
i)*(ztvd-ztsolv)/(zdu2*ztvd)
86 zcdn(
i) = (ckap/log(1.+zgeop1(
i)/(rg*
rugos(
i))))**2
89 IF (zri(
i) .GT. 0.)
THEN
90 zri(
i) = min(20.,zri(
i))
92 zscf = sqrt(1.+cd*abs(zri(
i)))
93 friv = amax1(1. / (1.+2.*cb*zri(
i)/zscf), 0.1)
94 zcfm1(
i) = zcdn(
i) * friv
95 frih = amax1(1./ (1.+3.*cb*zri(
i)*zscf), 0.1 )
98 zcfh1(
i) = f_cdrag_ter * zcdn(
i) * frih
99 IF(
nsrf.EQ.is_oce) zcfh1(
i) = f_cdrag_oce * zcdn(
i) * frih
104 pcfm(
i) = zcdn(
i)* fsta(zri(
i))
105 pcfh(
i) = zcdn(
i)* fsta(zri(
i))
109 zucf = 1./(1.+3.0*cb*cc*zcdn(
i)*sqrt(abs(zri(
i)) &
110 *(1.0+zgeop1(
i)/(rg*
rugos(
i)))))
111 zcfm2(
i) = zcdn(
i)*amax1((1.-2.0*cb*zri(
i)*zucf),0.1)
113 zcfh2(
i) = f_cdrag_ter*zcdn(
i)*amax1((1.-3.0*cb*zri(
i)*zucf),0.1)
117 pcfm(
i) = zcdn(
i)* fins(zri(
i))
118 pcfh(
i) = zcdn(
i)* fins(zri(
i))
120 zcr = (0.0016/(zcdn(
i)*sqrt(zdu2)))*abs(ztvd-ztsolv)**(1./3.)
121 IF(
nsrf.EQ.is_oce) pcfh(
i) =f_cdrag_oce* zcdn(
i)*(1.0+zcr**1.25)**(1./1.25)
128 IF (
nsrf == is_oce)
THEN
131 pcfh(
i)=min(pcfh(
i),cdhmax)