20 SUBROUTINE calgust(LPBL,ZPBL,GUST)
24 use vrbls3d, only: uh, vh, zint, zmid
25 use vrbls2d , only: u10h, v10h, u10,v10, fis
27 use ctlblk_mod
, only: jsta, jend, spval, jsta_m, jend_m, num_procs, mpi_comm_comp, lm,&
28 modelname, im, jm, jsta_2l, jend_2u, ista, iend, ista_m, iend_m, ista_2l, iend_2u
29 use gridspec_mod
, only: gridtype
39 INTEGER,
intent(in) :: lpbl(ista_2l:iend_2u,jsta_2l:jend_2u)
40 REAL,
intent(in) :: zpbl(ista_2l:iend_2u,jsta_2l:jend_2u)
41 REAL,
intent(inout) :: gust(ista_2l:iend_2u,jsta_2l:jend_2u)
43 integer i,j,ie,iw, l, k, istart, istop, jstart, jstop
44 integer lmin,lxxx,ierr
45 real zsfc,delwind,usfc,vsfc,sfcwind,wind,u0,v0,dz
60 IF(gridtype ==
'A')
THEN
70 if ( num_procs > 1 )
then
73 lmin = max(1, minval(lpbl(ista:iend,jsta:jend)))
74 CALL mpi_allreduce(lmin,lxxx,1,mpi_integer,mpi_min,mpi_comm_comp,ierr)
76 CALL exch(uh(1,jsta_2l,l))
77 CALL exch(vh(1,jsta_2l,l))
88 IF(gridtype ==
'E')
THEN
92 if(u10h(i,j)<spval.and.uh(i,j+1,l)<spval.and.uh(ie,j,l)<spval.and.uh(iw,j,l)<spval.and.uh(i,j-1,l)<spval)
then
98 sfcwind = sqrt(usfc*usfc + vsfc*vsfc)
99 u0 = d25*(uh(i,j-1,l)+uh(iw,j,l)+uh(ie,j,l)+uh(i,j+1,l))
100 v0 = d25*(vh(i,j-1,l)+vh(iw,j,l)+vh(ie,j,l)+vh(i,j+1,l))
101 wind = sqrt(u0*u0 + v0*v0)
107 ELSE IF(gridtype ==
'B')
THEN
114 if(u10h(i,j)<spval.and.uh(iw,j-1,l)<spval)
then
118 sfcwind = sqrt(usfc*usfc + vsfc*vsfc)
119 u0 = d25*(uh(i,j-1,l)+uh(iw,j,l)+uh(ie,j,l)+uh(iw,j-1,l))
120 v0 = d25*(vh(i,j-1,l)+vh(iw,j,l)+vh(ie,j,l)+vh(iw,j-1,l))
121 wind = sqrt(u0*u0 + v0*v0)
125 ELSE IF(gridtype ==
'A')
THEN
129 if (usfc < spval .and. vsfc < spval)
then
130 sfcwind = sqrt(usfc*usfc + vsfc*vsfc)
134 if(modelname ==
'RAPR')
then
135 zsfc = zint(i,j,lm+1)
141 if(uh(i,j,l)<spval)
then
144 wind = sqrt(u0*u0 + v0*v0)
145 delwind = wind - sfcwind
146 dz = zmid(i,j,k)-zsfc
147 delwind = delwind*(1.0-min(0.5,dz/2000.))
148 gust(i,j) = max(gust(i,j),sfcwind+delwind)
154 if(uh(i,j,l)<spval)
then
157 wind = sqrt(u0*u0 + v0*v0 )
168 if(modelname /=
'RAPR')
then
169 if (sfcwind < spval)
then
170 delwind = wind - sfcwind
172 delwind = delwind*(1.0-min(0.5,zpbl(i,j)/2000.))
173 gust(i,j) = sfcwind + delwind