29 #include "dimensions.h"
37 REAL,
INTENT(out) :: ucov( iip1,
jjp1,llm )
38 REAL,
INTENT(out) :: vcov( iip1,jjm,llm )
39 REAL,
INTENT(in) :: pdt
43 REAL modv(iip1,
jjp1),zco,zsi
44 REAL vpn,vps,upoln,upols,vpols,vpoln
45 REAL u2(iip1,
jjp1),v2(iip1,jjm)
47 REAL,
PARAMETER :: cfric=1.e-5
48 LOGICAL,
SAVE :: firstcall=.true.
49 INTEGER,
SAVE :: friction_type=1
50 CHARACTER(len=20) :: modname=
"friction"
51 CHARACTER(len=80) :: abort_message
55 call
getin(
"friction_type",friction_type)
56 if ((friction_type.lt.0).or.(friction_type.gt.1))
then
57 abort_message=
"wrong friction type"
58 write(
lunout,*)
'Friction: wrong friction type',friction_type
64 if (friction_type.eq.0)
then
80 modv(
i,
j)=sqrt(0.5*(u2(
i-1,
j)+u2(
i,
j)+v2(
i,
j-1)+v2(
i,
j)))
82 modv(1,
j)=modv(iip1,
j)
94 vpn=vcov(
i,1,1)/
cv(
i,1)
95 vps=vcov(
i,jjm,1)/
cv(
i,jjm)
101 vpn=sqrt(upoln*upoln+vpoln*vpoln)/
pi
102 vps=sqrt(upols*upols+vpols*vpols)/
pi
113 ucov(
i,
j,1)=ucov(
i,
j,1)
114 s -cfric*pdt*0.5*(modv(
i+1,
j)+modv(
i,
j))*ucov(
i,
j,1)
116 ucov(iip1,
j,1)=ucov(1,
j,1)
120 vcov(
i,
j,1)=vcov(
i,
j,1)
121 s -cfric*pdt*0.5*(modv(
i,
j+1)+modv(
i,
j))*vcov(
i,
j,1)
123 vcov(iip1,
j,1)=vcov(1,
j,1)
127 if (friction_type.eq.1)
then
129 ucov(:,:,
l)=ucov(:,:,
l)*(1.-pdt*
kfrict(
l))
130 vcov(:,:,
l)=vcov(:,:,
l)*(1.-pdt*
kfrict(
l))