28 #include "dimensions.h"
36 REAL,
INTENT(inout) :: ucov( iip1,jjb_u:jje_u,llm )
37 REAL,
INTENT(inout) :: vcov( iip1,jjb_v:jje_v,llm )
38 REAL,
INTENT(in) :: pdt
42 REAL modv(iip1,jjb_u:jje_u),zco,zsi
43 REAL vpn,vps,upoln,upols,vpols,vpoln
44 REAL u2(iip1,jjb_u:jje_u),v2(iip1,jjb_v:jje_v)
46 REAL,
PARAMETER :: cfric=1.e-5
47 LOGICAL,
SAVE :: firstcall=.true.
48 INTEGER,
SAVE :: friction_type=1
49 CHARACTER(len=20) :: modname=
"friction_p"
50 CHARACTER(len=80) :: abort_message
57 call
getin(
"friction_type",friction_type)
58 if ((friction_type.lt.0).or.(friction_type.gt.1))
then
59 abort_message=
"wrong friction type"
60 write(
lunout,*)
'Friction: wrong friction type',friction_type
67 if (friction_type.eq.0)
then
72 if (pole_sud) jje=jj_end
82 if (pole_nord) jjb=jj_begin
83 if (pole_sud) jje=jj_end-1
94 if (pole_nord) jjb=jj_begin+1
95 if (pole_sud) jje=jj_end-1
99 modv(
i,
j)=sqrt(0.5*(u2(
i-1,
j)+u2(
i,
j)+v2(
i,
j-1)+v2(
i,
j)))
101 modv(1,
j)=modv(iip1,
j)
114 vpn=vcov(
i,1,1)/
cv(
i,1)
118 vpn=sqrt(upoln*upoln+vpoln*vpoln)/
pi
133 vps=vcov(
i,jjm,1)/
cv(
i,jjm)
137 vps=sqrt(upols*upols+vpols*vpols)/
pi
149 if (pole_nord) jjb=jj_begin+1
150 if (pole_sud) jje=jj_end-1
154 ucov(
i,
j,1)=ucov(
i,
j,1)
155 s -cfric*pdt*0.5*(modv(
i+1,
j)+modv(
i,
j))*ucov(
i,
j,1)
157 ucov(iip1,
j,1)=ucov(1,
j,1)
162 if (pole_sud) jje=jj_end-1
166 vcov(
i,
j,1)=vcov(
i,
j,1)
167 s -cfric*pdt*0.5*(modv(
i,
j+1)+modv(
i,
j))*vcov(
i,
j,1)
169 vcov(iip1,
j,1)=vcov(1,
j,1)
174 if (friction_type.eq.1)
then
178 if (pole_nord) jjb=jj_begin+1
179 if (pole_sud) jje=jj_end-1
183 ucov(1:iip1,jjb:jje,
l)=ucov(1:iip1,jjb:jje,
l)*
191 if (pole_sud) jje=jj_end-1
195 vcov(1:iip1,jjb:jje,
l)=vcov(1:iip1,jjb:jje,
l)*