27 use vrbls3d, only: uh, vh, zint, zmid
28 use vrbls2d , only: u10h, v10h, u10,v10, fis
30 use ctlblk_mod, only: jsta, jend, spval, jsta_m, jend_m, num_procs, mpi_comm_comp, lm,&
31 modelname, im, jm, jsta_2l, jend_2u, ista, iend, ista_m, iend_m, ista_2l, iend_2u
32 use gridspec_mod
, only: gridtype
42 INTEGER,
intent(in) :: lpbl(ista_2l:iend_2u,jsta_2l:jend_2u)
43 REAL,
intent(in) :: zpbl(ista_2l:iend_2u,jsta_2l:jend_2u)
44 REAL,
intent(inout) :: gust(ista_2l:iend_2u,jsta_2l:jend_2u)
46 integer i,j,ie,iw, l, k, istart, istop, jstart, jstop
47 integer lmin,lxxx,ierr
48 real zsfc,delwind,usfc,vsfc,sfcwind,wind,u0,v0,dz
63 IF(gridtype ==
'A')
THEN
73 if ( num_procs > 1 )
then
76 lmin = max(1, minval(lpbl(ista:iend,jsta:jend)))
77 CALL mpi_allreduce(lmin,lxxx,1,mpi_integer,mpi_min,mpi_comm_comp,ierr)
79 CALL exch(uh(ista_2l,jsta_2l,l))
80 CALL exch(vh(ista_2l,jsta_2l,l))
91 IF(gridtype ==
'E')
THEN
95 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
101 sfcwind = sqrt(usfc*usfc + vsfc*vsfc)
102 u0 = d25*(uh(i,j-1,l)+uh(iw,j,l)+uh(ie,j,l)+uh(i,j+1,l))
103 v0 = d25*(vh(i,j-1,l)+vh(iw,j,l)+vh(ie,j,l)+vh(i,j+1,l))
104 wind = sqrt(u0*u0 + v0*v0)
110 ELSE IF(gridtype ==
'B')
THEN
117 if(u10h(i,j)<spval.and.uh(iw,j-1,l)<spval)
then
121 sfcwind = sqrt(usfc*usfc + vsfc*vsfc)
122 u0 = d25*(uh(i,j-1,l)+uh(iw,j,l)+uh(ie,j,l)+uh(iw,j-1,l))
123 v0 = d25*(vh(i,j-1,l)+vh(iw,j,l)+vh(ie,j,l)+vh(iw,j-1,l))
124 wind = sqrt(u0*u0 + v0*v0)
128 ELSE IF(gridtype ==
'A')
THEN
132 if (usfc < spval .and. vsfc < spval)
then
133 sfcwind = sqrt(usfc*usfc + vsfc*vsfc)
137 if(modelname ==
'RAPR' .OR. modelname ==
'GFS' .OR. modelname ==
'FV3R')
then
138 zsfc = zint(i,j,lm+1)
144 if(uh(i,j,l)<spval)
then
147 wind = sqrt(u0*u0 + v0*v0)
148 delwind = wind - sfcwind
149 dz = zmid(i,j,k)-zsfc
150 delwind = delwind*(1.0-min(0.5,dz/2000.))
151 gust(i,j) = max(gust(i,j),sfcwind+delwind)
157 if(uh(i,j,l)<spval)
then
160 wind = sqrt(u0*u0 + v0*v0 )
171 if(modelname /=
'RAPR' .AND. modelname /=
'GFS' .AND. modelname /=
'FV3R')
then
172 if (sfcwind < spval)
then
173 delwind = wind - sfcwind
175 delwind = delwind*(1.0-min(0.5,zpbl(i,j)/2000.))
176 gust(i,j) = sfcwind + delwind
subroutine calgust(LPBL, ZPBL, GUST)
This routine computes surface wind gust by mixing down momentum from the level at the height of the P...