28 #include "dimensions.h"
36 REAL,
INTENT(inout) :: ucov( iip1,
jjp1,llm )
37 REAL,
INTENT(inout) :: vcov( iip1,jjm,llm )
38 REAL,
INTENT(in) :: pdt
41 REAL modv(iip1,
jjp1),zco,zsi
42 REAL vpn,vps,upoln,upols,vpols,vpoln
43 REAL u2(iip1,
jjp1),v2(iip1,jjm)
45 REAL,
PARAMETER :: cfric=1.e-5
46 LOGICAL,
SAVE :: firstcall=.true.
47 INTEGER,
SAVE :: friction_type=1
48 CHARACTER(len=20) :: modname=
"friction_p"
49 CHARACTER(len=80) :: abort_message
56 call
getin(
"friction_type",friction_type)
57 if ((friction_type.lt.0).or.(friction_type.gt.1))
then
58 abort_message=
"wrong friction type"
59 write(
lunout,*)
'Friction: wrong friction type',friction_type
66 if (friction_type.eq.0)
then
71 if (pole_sud) jje=jj_end
81 if (pole_nord) jjb=jj_begin
82 if (pole_sud) jje=jj_end-1
93 if (pole_nord) jjb=jj_begin+1
94 if (pole_sud) jje=jj_end-1
98 modv(
i,
j)=sqrt(0.5*(u2(
i-1,
j)+u2(
i,
j)+v2(
i,
j-1)+v2(
i,
j)))
100 modv(1,
j)=modv(iip1,
j)
113 vpn=vcov(
i,1,1)/
cv(
i,1)
117 vpn=sqrt(upoln*upoln+vpoln*vpoln)/
pi
132 vps=vcov(
i,jjm,1)/
cv(
i,jjm)
136 vps=sqrt(upols*upols+vpols*vpols)/
pi
148 if (pole_nord) jjb=jj_begin+1
149 if (pole_sud) jje=jj_end-1
153 ucov(
i,
j,1)=ucov(
i,
j,1)
154 s -cfric*pdt*0.5*(modv(
i+1,
j)+modv(
i,
j))*ucov(
i,
j,1)
156 ucov(iip1,
j,1)=ucov(1,
j,1)
161 if (pole_sud) jje=jj_end-1
165 vcov(
i,
j,1)=vcov(
i,
j,1)
166 s -cfric*pdt*0.5*(modv(
i,
j+1)+modv(
i,
j))*vcov(
i,
j,1)
168 vcov(iip1,
j,1)=vcov(1,
j,1)
173 if (friction_type.eq.1)
then
177 if (pole_nord) jjb=jj_begin+1
178 if (pole_sud) jje=jj_end-1
182 ucov(1:iip1,jjb:jje,
l)=ucov(1:iip1,jjb:jje,
l)*
190 if (pole_sud) jje=jj_end-1
194 vcov(1:iip1,jjb:jje,
l)=vcov(1:iip1,jjb:jje,
l)*