48 SUBROUTINE bndlyr(PBND,TBND,QBND,RHBND,UBND,VBND, &
49 wbnd,omgbnd,pwtbnd,qcnvbnd,lvlbnd)
53 use vrbls3d, only: pint, q, uh, vh, pmid, t, omga, wh, cwm
56 use ctlblk_mod
, only: jsta_2l, jend_2u, lm, jsta, jend, modelname, &
57 jsta_m, jend_m, im, nbnd, spval, ista_2l, iend_2u, ista_m, iend_m, ista, iend
59 use gridspec_mod
, only: gridtype
66 real,
PARAMETER :: dpbnd=30.e2
67 integer,
dimension(ista:iend,jsta:jend,NBND),
intent(inout) :: lvlbnd
68 real,
dimension(ista:iend,jsta:jend,NBND),
intent(inout) :: pbnd,tbnd, &
69 qbnd,rhbnd,ubnd,vbnd,wbnd,omgbnd,pwtbnd,qcnvbnd
71 REAL q1d(ista_2l:iend_2u,jsta_2l:jend_2u),v1d(ista_2l:iend_2u,jsta_2l:jend_2u), &
72 u1d(ista_2l:iend_2u,jsta_2l:jend_2u),qcnv1d(ista_2l:iend_2u,jsta_2l:jend_2u)
74 REAL,
ALLOCATABLE :: pbint(:,:,:),qsbnd(:,:,:)
75 REAL,
ALLOCATABLE :: psum(:,:,:), qcnvg(:,:,:)
76 REAL,
ALLOCATABLE :: pvsum(:,:,:),nsum(:,:,:)
78 integer i,j,l,ie,iw,ll,lv,lbnd
79 real dp,qsat,pv1,pv2,pmv,rpsum,rpvsum,pmin,pm,delp,pminv,delpv
85 ALLOCATE (pbint(ista_2l:iend_2u,jsta_2l:jend_2u,nbnd+1))
86 ALLOCATE (qsbnd(ista_2l:iend_2u,jsta_2l:jend_2u,nbnd))
87 ALLOCATE (psum(ista_2l:iend_2u,jsta_2l:jend_2u,nbnd))
88 ALLOCATE (qcnvg(ista_2l:iend_2u,jsta_2l:jend_2u,lm))
89 ALLOCATE (pvsum(ista_2l:iend_2u,jsta_2l:jend_2u,nbnd))
90 ALLOCATE (nsum(ista_2l:iend_2u,jsta_2l:jend_2u,nbnd))
98 pbint(i,j,1) = pint(i,j,nint(lmh(i,j))+1)
106 pbint(i,j,lbnd) = pbint(i,j,lbnd-1) - dpbnd
121 CALL calmcvg(q1d,u1d,v1d,qcnv1d)
125 qcnvg(i,j,l)=qcnv1d(i,j)
144 qsbnd(i,j,lbnd) = d00
145 rhbnd(i,j,lbnd) = d00
149 omgbnd(i,j,lbnd) = d00
153 pvsum(i,j,lbnd) = d00
154 pwtbnd(i,j,lbnd) = d00
155 qcnvbnd(i,j,lbnd)= d00
167 IF((pbint(i,j,lbnd) >= pm).AND. &
168 (pbint(i,j,lbnd+1) <= pm))
THEN
169 dp = pint(i,j,l+1) - pint(i,j,l)
170 psum(i,j,lbnd) = psum(i,j,lbnd) + dp
171 nsum(i,j,lbnd) = nsum(i,j,lbnd) + 1
172 lvlbnd(i,j,lbnd) = lvlbnd(i,j,lbnd) + l
173 tbnd(i,j,lbnd) = tbnd(i,j,lbnd) + t(i,j,l)*dp
174 qbnd(i,j,lbnd) = qbnd(i,j,lbnd) + q(i,j,l)*dp
175 omgbnd(i,j,lbnd) = omgbnd(i,j,lbnd) + omga(i,j,l)*dp
176 IF(gridtype ==
'A')
THEN
177 ubnd(i,j,lbnd) = ubnd(i,j,lbnd) + uh(i,j,l)*dp
178 vbnd(i,j,lbnd) = vbnd(i,j,lbnd) + vh(i,j,l)*dp
180 wbnd(i,j,lbnd) = wbnd(i,j,lbnd) + wh(i,j,l)*dp
181 qcnvbnd(i,j,lbnd) = qcnvbnd(i,j,lbnd) + qcnvg(i,j,l)*dp
182 pwtbnd(i,j,lbnd) = pwtbnd(i,j,lbnd) &
183 + ( q(i,j,l)+cwm(i,j,l))*dp*gi
184 IF(modelname ==
'GFS')
THEN
186 qsat = con_eps*es/(pm+con_epsm1*es)
188 qsat = pq0/pm*exp(a2*(t(i,j,l)-a3)/(t(i,j,l)-a4))
190 qsbnd(i,j,lbnd) = qsbnd(i,j,lbnd) + qsat*dp
198 omgbnd(i,j,lbnd)=spval
199 qcnvbnd(i,j,lbnd)=spval
200 pwtbnd(i,j,lbnd)=spval
202 qsbnd(i,j,lbnd)=spval
203 rhbnd(i,j,lbnd)=spval
210 IF(gridtype==
'E')
THEN
211 CALL exch(pint(ista_2l:iend_2u,jsta_2l:jend_2u,1))
213 CALL exch(pint(ista_2l:iend_2u,jsta_2l:jend_2u,l+1))
219 pv1 = 0.25*(pint(iw,j,l) + pint(ie,j,l) &
220 +pint(i,j+1,l) + pint(i,j-1,l))
221 pv2 = 0.25*(pint(iw,j,l+1) + pint(ie,j,l+1) &
222 +pint(i,j+1,l+1) + pint(i,j-1,l+1))
225 IF((pbint(iw,j,lbnd)>=pmv).AND. &
226 (pbint(iw,j,lbnd+1)<=pmv))
THEN
227 pvsum(i,j,lbnd) = pvsum(i,j,lbnd) + dp
228 ubnd(i,j,lbnd) = ubnd(i,j,lbnd) + dp* uh(i,j,l)
229 vbnd(i,j,lbnd) = vbnd(i,j,lbnd) + dp*vh(i,j,l)
235 ELSE IF (gridtype==
'B')
THEN
236 CALL exch(pint(ista_2l:iend_2u,jsta_2l:jend_2u,1))
238 CALL exch(pint(ista_2l:iend_2u,jsta_2l:jend_2u,l+1))
244 pv1 = 0.25*(pint(iw,j,l) + pint(ie,j,l) &
245 +pint(iw,j+1,l) + pint(ie,j+1,l))
246 pv2 = 0.25*(pint(iw,j,l+1) + pint(ie,j,l+1) &
247 +pint(iw,j+1,l+1) + pint(ie,j+1,l+1))
250 IF((pbint(iw,j,lbnd)>=pmv).AND. &
251 (pbint(iw,j,lbnd+1)<=pmv))
THEN
252 pvsum(i,j,lbnd) = pvsum(i,j,lbnd)+dp
253 ubnd(i,j,lbnd) = ubnd(i,j,lbnd)+uh(i,j,l)*dp
254 vbnd(i,j,lbnd) = vbnd(i,j,lbnd)+vh(i,j,l)*dp
269 IF(psum(i,j,lbnd)/=0..AND.tbnd(i,j,lbnd)<spval)
THEN
270 rpsum = 1./psum(i,j,lbnd)
271 lvlbnd(i,j,lbnd)= lvlbnd(i,j,lbnd)/nsum(i,j,lbnd)
272 pbnd(i,j,lbnd) = (pbint(i,j,lbnd)+pbint(i,j,lbnd+1))*0.5
273 tbnd(i,j,lbnd) = tbnd(i,j,lbnd)*rpsum
274 qbnd(i,j,lbnd) = qbnd(i,j,lbnd)*rpsum
275 qsbnd(i,j,lbnd) = qsbnd(i,j,lbnd)*rpsum
276 omgbnd(i,j,lbnd)= omgbnd(i,j,lbnd)*rpsum
277 IF(gridtype==
'A')
THEN
278 ubnd(i,j,lbnd) = ubnd(i,j,lbnd)*rpsum
279 vbnd(i,j,lbnd) = vbnd(i,j,lbnd)*rpsum
281 wbnd(i,j,lbnd) = wbnd(i,j,lbnd)*rpsum
282 IF(qcnvbnd(i,j,lbnd)<spval) &
283 qcnvbnd(i,j,lbnd) = qcnvbnd(i,j,lbnd)*rpsum
288 IF(gridtype==
'E' .or. gridtype==
'B')
THEN
291 IF(pvsum(i,j,lbnd)/=0.)
THEN
292 rpvsum = 1./pvsum(i,j,lbnd)
293 ubnd(i,j,lbnd) = ubnd(i,j,lbnd)*rpvsum
294 vbnd(i,j,lbnd) = vbnd(i,j,lbnd)*rpvsum
310 IF(psum(i,j,lbnd)==0..AND.pbnd(i,j,lbnd)<spval)
THEN
313 pbnd(i,j,lbnd) = (pbint(i,j,lbnd)+pbint(i,j,lbnd+1))*0.5
317 delp = abs(pm-pbnd(i,j,lbnd))
324 dp = pint(i,j,l+1)-pint(i,j,l)
327 tbnd(i,j,lbnd) = t(i,j,l)
328 qbnd(i,j,lbnd) = q(i,j,l)
329 IF(gridtype ==
'A')
THEN
330 ubnd(i,j,lbnd) = uh(i,j,l)
331 vbnd(i,j,lbnd) = vh(i,j,l)
333 wbnd(i,j,lbnd) = wh(i,j,l)
334 qcnvbnd(i,j,lbnd) = qcnvg(i,j,l)
335 IF(modelname ==
'GFS' .OR. modelname ==
'FV3R')
THEN
338 qsat = con_eps*es/(pm+con_epsm1*es)
340 qsat=pq0/pm*exp(a2*(t(i,j,l)-a3)/(t(i,j,l)-a4))
342 qsbnd(i,j,lbnd) = qsat
343 omgbnd(i,j,lbnd) = omga(i,j,l)
344 pwtbnd(i,j,lbnd) = (q(i,j,l)+cwm(i,j,l))*dp*gi
349 IF(qsbnd(i,j,lbnd)/=0..AND.qbnd(i,j,lbnd)<spval)
THEN
350 rhbnd(i,j,lbnd) = qbnd(i,j,lbnd)/qsbnd(i,j,lbnd)
351 IF (rhbnd(i,j,lbnd)>1.0)
THEN
352 rhbnd(i,j,lbnd) = 1.0
353 qbnd(i,j,lbnd) = rhbnd(i,j,lbnd)*qsbnd(i,j,lbnd)
355 IF (rhbnd(i,j,lbnd)<0.01)
THEN
356 rhbnd(i,j,lbnd) = 0.01
357 qbnd(i,j,lbnd) = rhbnd(i,j,lbnd)*qsbnd(i,j,lbnd)
363 IF(gridtype ==
'E')
THEN
366 IF(pvsum(i,j,lbnd)==0.)
THEN
375 pmv = 0.125*(pint(iw,j,ll) + pint(ie,j,ll) + &
376 pint(i,j+1,ll) + pint(i,j-1,ll) + &
377 pint(iw,j,ll+1) + pint(ie,j,ll+1) + &
378 pint(i,j+1,ll+1) + pint(i,j-1,ll+1))
379 delpv = abs(pmv-pbnd(i,j,lbnd))
386 ubnd(i,j,lbnd) = uh(i,j,lv)
387 vbnd(i,j,lbnd) = vh(i,j,lv)
393 ELSE IF(gridtype==
'B')
THEN
396 IF(pvsum(i,j,lbnd)==0.)
THEN
405 pmv=0.125*(pint(iw,j,ll)+pint(ie,j,ll)+ &
406 pint(iw,j+1,ll)+pint(ie,j+1,ll)+ &
407 pint(iw,j,ll+1)+pint(ie,j,ll+1)+ &
408 pint(iw,j+1,ll+1)+pint(ie,j+1,ll+1))
409 delpv=abs(pmv-pbnd(i,j,lbnd))
416 ubnd(i,j,lbnd) = uh(i,j,lv)
417 vbnd(i,j,lbnd) = vh(i,j,lv)
424 DEALLOCATE (pbint, qsbnd, psum, pvsum, qcnvg, nsum)
elemental real function, public fpvsnew(t)
calcape() computes CAPE/CINS and other storm related variables.