22 SUBROUTINE mdl2thandpv(kth,kpv,th,pv)
26 use vrbls3d, only: pmid, t, uh, q, vh, zmid, omga, pint
28 use masks, only: gdlat, gdlon, dx, dy
30 use params_mod, only: dtr, small, erad, d608, rhmin
31 use ctlblk_mod
, only: spval, lm, jsta_2l, jend_2u, grib, cfld, datapd, fld_info,&
32 im, jm, jsta, jend, jsta_m, jend_m, modelname, global,gdsdegr,me,&
33 ista, iend, ista_m, iend_m, ista_2l, iend_2u
34 use rqstfld_mod
, only: iget, lvls, id, iavblfld, lvlsxml
35 use gridspec_mod
, only: gridtype,dyval
37 use upp_math, only: dvdxdudy, ddvdx, ddudy, uuavg, h2u
43 integer,
intent(in) :: kth, kpv
44 real,
intent(in) :: th(kth), pv(kpv)
45 real,
dimension(ista:iend,jsta:jend) :: grid1, grid2
46 real,
dimension(kpv) :: pvpt, pvpb
49 LOGICAL lth(kth), lpv(kpv)
51 REAL,
allocatable:: dum1d1(:), dum1d2(:), dum1d3(:),dum1d4(:) &
52 , dum1d5(:), dum1d6(:), dum1d7(:),dum1d8(:) &
53 , dum1d9(:), dum1d10(:),dum1d11(:) &
54 , dum1d12(:),dum1d13(:),dum1d14(:)
56 real,
dimension(ISTA:IEND,JSTA:JEND,KTH) :: uth, vth, hmth, tth, pvth, &
58 real,
dimension(ISTA:IEND,JSTA:JEND,KPV) :: upv, vpv, hpv, tpv, ppv, spv
59 real,
dimension(IM,2) :: glatpoles, coslpoles, pvpoles
60 real,
dimension(IM,2,LM) :: upoles, tpoles, ppoles
61 real,
dimension(IM,JSTA:JEND) :: cosltemp, pvtemp
63 real,
allocatable :: wrk1(:,:), wrk2(:,:), wrk3(:,:), wrk4(:,:), cosl(:,:), dum2d(:,:)
64 real,
allocatable :: tuv(:,:,:),pmiduv(:,:,:)
66 integer,
dimension(im) :: iw, ie
67 integer i,j,l,k,lp,imb2,ip1,im1,ii,jj,jmt2,ihw,ihe
68 real dvdx,dudy,uavg,tphi, es, qstl, eradi, tem
69 real,
allocatable :: dvdxl(:,:,:), dudyl(:,:,:), uavgl(:,:,:)
76 if(me==0)
write(0,*)
'MDL2THANDPV starts'
87 IF((iget(332) > 0).OR.(iget(333) > 0).OR. &
88 (iget(334) > 0).OR.(iget(335) > 0).OR. &
89 (iget(336) > 0).OR.(iget(337) > 0).OR. &
90 (iget(338) > 0).OR.(iget(339) > 0).OR. &
91 (iget(340) > 0).OR.(iget(341) > 0).OR. &
92 (iget(351) > 0).OR.(iget(352) > 0).OR. &
93 (iget(353) > 0).OR.(iget(378) > 0) )
THEN
114 sigmath(i,j,k) = spval
133 ALLOCATE(dum1d1(lm), dum1d2(lm), dum1d3(lm),dum1d4(lm))
134 ALLOCATE(dum1d5(lm), dum1d6(lm))
135 ALLOCATE(dum1d7(lm), dum1d8(lm), dum1d9(lm),dum1d10(lm))
136 ALLOCATE(dum1d11(lm),dum1d12(lm),dum1d13(lm))
137 ALLOCATE(dum1d14(lm))
140 CALL exch(pmid(ista_2l:iend_2u,jsta_2l:jend_2u,l))
141 CALL exch(t(ista_2l:iend_2u,jsta_2l:jend_2u,l))
142 CALL exch(uh(ista_2l:iend_2u,jsta_2l:jend_2u,l))
143 CALL exch(vh(ista_2l:iend_2u,jsta_2l:jend_2u,l))
145 CALL exch(gdlat(ista_2l,jsta_2l))
146 CALL exch(gdlon(ista_2l,jsta_2l))
153 allocate (wrk1(ista:iend,jsta:jend), wrk2(ista:iend,jsta:jend), &
154 & wrk3(ista:iend,jsta:jend), cosl(ista_2l:iend_2u,jsta_2l:jend_2u))
155 allocate (dum2d(ista_2l:iend_2u,jsta_2l:jend_2u))
156 allocate (wrk4(ista:iend,jsta:jend))
162 IF(gridtype ==
'A')
THEN
176 cosl(i,j) = cos(gdlat(i,j)*dtr)
177 IF(cosl(i,j) >= small)
then
178 wrk1(i,j) = eradi / cosl(i,j)
182 if(i == im .or. i == 1)
then
183 wrk2(i,j) = 1.0 / ((360.+gdlon(ip1,j)-gdlon(im1,j))*dtr)
185 wrk2(i,j) = 1.0 / ((gdlon(ip1,j)-gdlon(im1,j))*dtr)
187 wrk4(i,j) = wrk1(i,j) * wrk2(i,j)
192 call fullpole(cosl,coslpoles)
193 call fullpole(gdlat(ista_2l:iend_2u,jsta_2l:jend_2u),glatpoles)
200 if (ii > im) ii = ii - im
202 wrk3(i,j) = 1.0 / ((180.-gdlat(i,j+1)-glatpoles(ii,1))*dtr)
204 elseif (j == jm)
then
207 if (ii > im) ii = ii - im
209 wrk3(i,j) = 1.0 / ((180.+gdlat(i,j-1)+glatpoles(ii,2))*dtr)
212 !print *,
' j=',j,
' GDLATJm1=',gdlat(:,j-1)
213 !print *,
' j=',j,
' GDLATJp1=',gdlat(:,j+1)
215 tem = gdlat(i,j-1) - gdlat(i,j+1)
216 if (abs(tem) > small)
then
217 wrk3(i,j) = 1.0 / (tem*dtr)
230 wrk2(i,j) = 0.5 / dx(i,j)
231 wrk3(i,j) = 0.5 / dy(i,j)
237 IF(gridtype ==
'E')
THEN
238 allocate(tuv(ista_2l:iend_2u,jsta_2l:jend_2u,lm))
239 allocate(pmiduv(ista_2l:iend_2u,jsta_2l:jend_2u,lm))
241 call h2u(t(ista_2l:iend_2u,jsta_2l:jend_2u,l),tuv(ista_2l:iend_2u,jsta_2l:jend_2u,l))
242 call h2u(pmid(ista_2l:iend_2u,jsta_2l:jend_2u,l),pmiduv(ista_2l:iend_2u,jsta_2l:jend_2u,l))
247 IF(gridtype ==
'A')
THEN
248 IF(modelname ==
'GFS' .or. global)
THEN
251 CALL fullpole(pmid(ista_2l:iend_2u,jsta_2l:jend_2u,l),ppoles(:,:,l))
252 CALL fullpole( t(ista_2l:iend_2u,jsta_2l:jend_2u,l),tpoles(:,:,l))
253 CALL fullpole( uh(ista_2l:iend_2u,jsta_2l:jend_2u,l),upoles(:,:,l))
261 if (ii > im) ii = ii - im
264 IF(cosl(i,j) >= small)
THEN
265 tem = wrk3(i,j) * eradi
268 dum1d5(l) = t(i,j,l)*(1.+d608*q(i,j,l))
269 es = min(
fpvsnew(t(i,j,l)),pmid(i,j,l))
270 dum1d14(l) = q(i,j,l) * (pmid(i,j,l)+con_epsm1*es)/(con_eps*es)
271 dum1d1(l) = (pmid(ip1,j,l)- pmid(im1,j,l)) * wrk4(i,j)
272 dum1d3(l) = (t(ip1,j,l) - t(im1,j,l)) * wrk4(i,j)
274 dum1d2(l) = (ppoles(ii,1,l) - pmid(i,j+1,l)) * tem
276 dum1d4(l) = (tpoles(ii,1,l) - t(i,j+1,l)) * tem
277 dum1d6(l) = ((vh(ip1,j,l)-vh(im1,j,l))*wrk2(i,j) &
279 & + (upoles(ii,1,l)*coslpoles(ii,1) &
280 & + uh(i,j+1,l)*cosl(i,j+1))*wrk3(i,j))*wrk1(i,j) &
285 tem = wrk3(i,jj) * eradi
288 dum1d5(l) = t(i,j,l)*(1.+d608*q(i,j,l))
289 es = min(
fpvsnew(t(i,j,l)),pmid(i,j,l))
290 dum1d14(l) = q(i,j,l) * (pmid(i,j,l)+con_epsm1*es)/(con_eps*es)
291 dum1d1(l) = (pmid(ip1,jj,l)- pmid(im1,jj,l)) * wrk4(i,jj)
292 dum1d3(l) = (t(ip1,jj,l) - t(im1,jj,l)) * wrk4(i,jj)
293 dum1d2(l) = (pmid(i,j,l)-pmid(i,jj+1,l)) * tem
294 dum1d4(l) = (t(i,j,l) - t(i,jj+1,l)) * tem
295 dum1d6(l) = ((vh(ip1,jj,l)-vh(im1,jj,l))*wrk2(i,jj) &
296 & + (uh(i,j,l)*cosl(i,j) &
297 + uh(i,jj+1,l)*cosl(i,jj+1))*wrk3(i,jj))*wrk1(i,jj) &
301 ELSE IF(j == jm)
THEN
302 IF(cosl(i,j) >= small)
THEN
303 tem = wrk3(i,j) * eradi
306 dum1d5(l) = t(i,j,l)*(1.+d608*q(i,j,l))
307 es = min(
fpvsnew(t(i,j,l)),pmid(i,j,l))
308 dum1d14(l) = q(i,j,l) * (pmid(i,j,l)+con_epsm1*es)/(con_eps*es)
309 dum1d1(l) = (pmid(ip1,j,l)- pmid(im1,j,l)) * wrk4(i,j)
310 dum1d3(l) = (t(ip1,j,l) - t(im1,j,l)) * wrk4(i,j)
312 dum1d2(l) = (pmid(i,j-1,l)-ppoles(ii,2,l)) * tem
314 dum1d4(l) = (t(i,j-1,l)-tpoles(ii,2,l)) * tem
315 dum1d6(l) = ((vh(ip1,j,l)-vh(im1,j,l))* wrk2(i,j) &
316 & + (uh(i,j-1,l)*cosl(i,j-1) &
318 & + upoles(ii,2,l)*coslpoles(ii,2))*wrk3(i,j))*wrk1(i,j) &
323 tem = wrk3(i,jj) * eradi
326 dum1d5(l) = t(i,j,l)*(1.+d608*q(i,j,l))
327 es = min(
fpvsnew(t(i,j,l)),pmid(i,j,l))
328 dum1d14(l) = q(i,j,l) * (pmid(i,j,l)+con_epsm1*es)/(con_eps*es)
329 dum1d1(l) = (pmid(ip1,jj,l)- pmid(im1,jj,l)) * wrk4(i,jj)
330 dum1d3(l) = (t(ip1,jj,l) - t(im1,jj,l)) * wrk4(i,jj)
331 dum1d2(l) = (pmid(i,jj-1,l)-pmid(i,j,l)) * tem
332 dum1d4(l) = (t(i,jj-1,l)-t(i,j,l)) * tem
333 dum1d6(l) = ((vh(ip1,jj,l)-vh(im1,jj,l))*wrk2(i,jj) &
334 & + (uh(i,jj-1,l)*cosl(i,jj-1) &
335 & + uh(i,j,l)*cosl(i,j))*wrk3(i,jj))*wrk1(i,jj) &
340 tem = wrk3(i,j) * eradi
343 dum1d5(l) = t(i,j,l)*(1.+d608*q(i,j,l))
344 es = min(
fpvsnew(t(i,j,l)),pmid(i,j,l))
345 dum1d14(l) = q(i,j,l) * (pmid(i,j,l)+con_epsm1*es)/(con_eps*es)
346 dum1d1(l) = (pmid(ip1,j,l)- pmid(im1,j,l)) * wrk4(i,j)
347 dum1d3(l) = (t(ip1,j,l) - t(im1,j,l)) * wrk4(i,j)
350 dum1d2(l) = (pmid(i,j-1,l)-pmid(i,j+1,l)) * tem
351 dum1d4(l) = (t(i,j-1,l)-t(i,j+1,l)) * tem
352 dum1d6(l) = ((vh(ip1,j,l)-vh(im1,j,l))* wrk2(i,j) &
353 & - (uh(i,j-1,l)*cosl(i,j-1) &
354 & - uh(i,j+1,l)*cosl(i,j+1))*wrk3(i,j))*wrk1(i,j) &
360 IF(i==im/2 .AND. j==jm/2)
then
361 print*,
'SAMPLE PVETC INPUT ', &
362 'p,dpdx,dpdy,tv,dtdx,dtdy,h,u,v,vort= '
364 print*,pmid(i,j,l),dum1d1(l),dum1d2(l),dum1d5(l) &
365 ,dum1d3(l),dum1d4(l),zmid(i,j,l),uh(i,j,l),vh(i,j,l) &
370 CALL pvetc(lm,pmid(i,j,1:lm),dum1d1,dum1d2 &
371 ,dum1d5,dum1d3,dum1d4,zmid(i,j,1:lm),uh(i,j,1:lm) &
372 ,vh(i,j,1:lm),dum1d6 &
373 ,dum1d7,dum1d8,dum1d9,dum1d10,dum1d11,dum1d12,dum1d13)
375 IF(i==im/2 .AND. j==jm/2)
then
376 print*,
'SAMPLE PVETC OUTPUT ' &
377 ,
'hm,s,bvf2,pvn,theta,sigma,pvu= '
379 print*,dum1d7(l),dum1d8(l),dum1d9(l),dum1d10(l),dum1d11(l) &
380 ,dum1d12(l),dum1d13(l),l
384 IF((iget(332) > 0).OR.(iget(333) > 0).OR. &
385 (iget(334) > 0).OR.(iget(335) > 0).OR. &
386 (iget(351) > 0).OR.(iget(352) > 0).OR. &
387 (iget(353) > 0).OR.(iget(378) > 0))
THEN
389 CALL
p2th(lm,dum1d11,uh(i,j,1:lm),vh(i,j,1:lm) &
390 ,dum1d7,t(i,j,1:lm),dum1d13,dum1d12,dum1d14 &
391 ,omga(i,j,1:lm),kth,th &
392 ,lth,uth(i,j,1:kth),vth(i,j,1:kth) &
395 ,tth(i,j,1:kth),pvth(i,j,1:kth) &
396 ,sigmath(i,j,1:kth),rhth(i,j,1:kth) &
400 IF((iget(336) > 0).OR.(iget(337) > 0).OR. &
401 (iget(338) > 0).OR.(iget(339) > 0).OR. &
402 (iget(340) > 0).OR.(iget(341) > 0))
THEN
403 CALL
p2pv(lm,dum1d13,zmid(i,j,1:lm),t(i,j,1:lm),pmid(i,j,1:lm) &
404 ,uh(i,j,1:lm),vh(i,j,1:lm),kpv,pv,pvpt,pvpb*pint(i,j,lm+1)&
405 ,lpv,upv(i,j,1:kpv),vpv(i,j,1:kpv),hpv(i,j,1:kpv) &
407 ,tpv(i,j,1:kpv),ppv(i,j,1:kpv),spv(i,j,1:kpv) )
418 tphi=(j-jmt2)*(dyval/gdsdegr)*dtr
422 tem = wrk3(i,j) * eradi
425 dum1d5(l) = t(i,j,l)*(1.+d608*q(i,j,l))
426 es = min(
fpvsnew(t(i,j,l)),pmid(i,j,l))
427 dum1d14(l) = q(i,j,l) * (pmid(i,j,l)+con_epsm1*es)/(con_eps*es)
428 dum1d1(l) = (pmid(ip1,j,l)- pmid(im1,j,l)) * wrk4(i,j)
429 dum1d3(l) = (t(ip1,j,l) - t(im1,j,l)) * wrk4(i,j)
430 dum1d2(l) = (pmid(i,j+1,l)-pmid(i,j-1,l)) * tem
431 dum1d4(l) = (t(i,j+1,l)-t(i,j-1,l)) * tem
432 dum1d6(l) = ((vh(ip1,j,l)-vh(im1,j,l))* wrk2(i,j) &
433 & - (uh(i,j+1,l)*cosl(i,j+1) &
434 & - uh(i,j-1,l)*cosl(i,j-1))*wrk3(i,j))*wrk1(i,j) &
438 IF(i==im/2 .AND. j==jm/2)
then
439 print*,
'SAMPLE PVETC INPUT for regional ', &
440 'p,dpdx,dpdy,tv,dtdx,dtdy,h,u,v,vort ', &
443 print*,pmid(i,j,l),dum1d1(l),dum1d2(l),dum1d5(l) &
444 ,dum1d3(l),dum1d4(l),zmid(i,j,l),uh(i,j,l),vh(i,j,l) &
445 ,dum1d6(l),jsta_m,jend_m,l
449 CALL pvetc(lm,pmid(i,j,1:lm),dum1d1,dum1d2 &
450 ,dum1d5,dum1d3,dum1d4,zmid(i,j,1:lm),uh(i,j,1:lm) &
451 ,vh(i,j,1:lm),dum1d6 &
452 ,dum1d7,dum1d8,dum1d9,dum1d10,dum1d11,dum1d12,dum1d13)
454 IF(i==im/2 .AND. j==jm/2)
then
455 print*,
'SAMPLE PVETC OUTPUT ' &
456 ,
'hm,s,bvf2,pvn,theta,sigma,pvu,pvort= '
458 print*,dum1d7(l),dum1d8(l),dum1d9(l),dum1d10(l),dum1d11(l) &
459 ,dum1d12(l),dum1d13(l),dum1d6(l),l
463 IF((iget(332) > 0).OR.(iget(333) > 0).OR. &
464 (iget(334) > 0).OR.(iget(335) > 0).OR. &
465 (iget(351) > 0).OR.(iget(352) > 0).OR. &
466 (iget(353) > 0).OR.(iget(378) > 0))
THEN
468 CALL
p2th(lm,dum1d11,uh(i,j,1:lm),vh(i,j,1:lm) &
469 ,dum1d7,t(i,j,1:lm),dum1d13,dum1d12,dum1d14 &
470 ,omga(i,j,1:lm),kth,th &
471 ,lth,uth(i,j,1:kth),vth(i,j,1:kth) &
474 ,tth(i,j,1:kth),pvth(i,j,1:kth) &
475 ,sigmath(i,j,1:kth),rhth(i,j,1:kth) &
479 IF((iget(336) > 0).OR.(iget(337) > 0).OR. &
480 (iget(338) > 0).OR.(iget(339) > 0).OR. &
481 (iget(340) > 0).OR.(iget(341) > 0))
THEN
482 CALL
p2pv(lm,dum1d13,zmid(i,j,1:lm),t(i,j,1:lm),pmid(i,j,1:lm) &
483 ,uh(i,j,1:lm),vh(i,j,1:lm),kpv,pv,pvpt,pvpb*pint(i,j,lm+1)&
484 ,lpv,upv(i,j,1:kpv),vpv(i,j,1:kpv),hpv(i,j,1:kpv) &
486 ,tpv(i,j,1:kpv),ppv(i,j,1:kpv),spv(i,j,1:kpv) )
494 ELSE IF (gridtype ==
'B')
THEN
495 allocate(dvdxl(ista_m:iend_m,jsta_m:jend_m,lm))
496 allocate(dudyl(ista_m:iend_m,jsta_m:jend_m,lm))
497 allocate(uavgl(ista_m:iend_m,jsta_m:jend_m,lm))
499 CALL exch(vh(ista_2l:iend_2u,jsta_2l:jend_2u,l))
500 CALL exch(uh(ista_2l:iend_2u,jsta_2l:jend_2u,l))
501 CALL dvdxdudy(uh(:,:,l),vh(:,:,l))
504 dvdxl(i,j,l) = ddvdx(i,j)
505 dudyl(i,j,l) = ddudy(i,j)
506 uavgl(i,j,l) = uuavg(i,j)
512 tphi=(j-jmt2)*(dyval/gdsdegr)*dtr
517 dum1d5(l) = t(i,j,l)*(1.+d608*q(i,j,l))
518 es = min(
fpvsnew(t(i,j,l)),pmid(i,j,l))
519 qstl = con_eps*es/(pmid(i,j,l)+con_epsm1*es)
520 dum1d14(l) = q(i,j,l)/qstl
521 dum1d1(l) = (pmid(ip1,j,l)- pmid(im1,j,l)) * wrk2(i,j)
522 dum1d3(l) = (t(ip1,j,l) - t(im1,j,l)) * wrk2(i,j)
523 dum1d2(l) = (pmid(i,j+1,l)-pmid(i,j-1,l)) * wrk3(i,j)
524 dum1d4(l) = (t(i,j+1,l)-t(i,j-1,l)) * wrk3(i,j)
529 dum1d6(l) = dvdx - dudy + f(i,j) + uavg*tan(tphi)/erad
543 CALL pvetc(lm,pmid(i,j,1:lm),dum1d1,dum1d2 &
544 ,dum1d5,dum1d3,dum1d4,zmid(i,j,1:lm),uh(i,j,1:lm) &
545 ,vh(i,j,1:lm),dum1d6 &
546 ,dum1d7,dum1d8,dum1d9,dum1d10,dum1d11,dum1d12,dum1d13)
556 IF((iget(332)>0).OR.(iget(333)>0).OR. &
557 (iget(334)>0).OR.(iget(335)>0).OR. &
558 (iget(351)>0).OR.(iget(352)>0).OR. &
559 (iget(353)>0).OR.(iget(378)>0))
THEN
561 CALL
p2th(lm,dum1d11,uh(i,j,1:lm),vh(i,j,1:lm) &
562 ,dum1d7,t(i,j,1:lm),dum1d13,dum1d12,dum1d14 &
563 ,omga(i,j,1:lm),kth,th &
564 ,lth,uth(i,j,1:kth),vth(i,j,1:kth) &
567 ,tth(i,j,1:kth),pvth(i,j,1:kth) &
568 ,sigmath(i,j,1:kth),rhth(i,j,1:kth) &
572 IF((iget(336)>0).OR.(iget(337)>0).OR. &
573 (iget(338)>0).OR.(iget(339)>0).OR. &
574 (iget(340)>0).OR.(iget(341)>0))
THEN
575 CALL
p2pv(lm,dum1d13,zmid(i,j,1:lm),t(i,j,1:lm),pmid(i,j,1:lm) &
576 ,uh(i,j,1:lm),vh(i,j,1:lm),kpv,pv,pvpt,pvpb*pint(i,j,lm+1) &
577 ,lpv,upv(i,j,1:kpv),vpv(i,j,1:kpv),hpv(i,j,1:kpv) &
579 ,tpv(i,j,1:kpv),ppv(i,j,1:kpv),spv(i,j,1:kpv) )
583 deallocate(dvdxl,dudyl,uavgl)
584 ELSE IF (gridtype ==
'E')
THEN
587 tphi = (j-jmt2)*(dyval/gdsdegr)*dtr
594 dum1d5(l)=t(i,j,l)*(1.+d608*q(i,j,l))
596 es=min(es,pmid(i,j,l))
597 qstl=con_eps*es/(pmid(i,j,l)+con_epsm1*es)
598 dum1d14(l)=q(i,j,l)/qstl
599 dum1d1(l) = (pmiduv(i+ihe,j,l)- pmiduv(i+ihw,j,l))*wrk2(i,j)
600 dum1d3(l) = (tuv(i+ihe,j,l) - tuv(i+ihw,j,l)) * wrk2(i,j)
601 dum1d2(l) = (pmiduv(i,j+1,l)- pmiduv(i,j-1,l))*wrk3(i,j)
602 dum1d4(l)= (tuv(i,j+1,l)- tuv(i,j-1,l))*wrk3(i,j)
603 dvdx=(vh(i+ihe,j,l)-vh(i+ihw,j,l))* wrk2(i,j)
604 dudy=(uh(i,j+1,l)-uh(i,j-1,l))* wrk3(i,j)
605 uavg=0.25*(uh(i+ihe,j,l)+uh(i+ihw,j,l)+uh(i,j-1,l)+uh(i,j+1,l))
607 dum1d6(l)=dvdx-dudy+f(i,j)+uavg*tan(tphi)/erad
610 IF(i==im/2 .AND. j==jm/2)
then
611 print*,
'SAMPLE PVETC INPUT ' &
612 ,
'p,dpdx,dpdy,tv,dtdx,dtdy,h,u,v,vort= '
614 print*,pmid(i,j,l),dum1d1(l),dum1d2(l),dum1d5(l) &
615 ,dum1d3(l),dum1d4(l),zmid(i,j,l),uh(i,j,l),vh(i,j,l) &
620 CALL pvetc(lm,pmid(i,j,1:lm),dum1d1,dum1d2 &
621 ,dum1d5,dum1d3,dum1d4,zmid(i,j,1:lm),uh(i,j,1:lm) &
622 ,vh(i,j,1:lm),dum1d6 &
623 ,dum1d7,dum1d8,dum1d9,dum1d10,dum1d11,dum1d12,dum1d13)
625 IF(i==im/2 .AND. j==jm/2)
then
626 print*,
'SAMPLE PVETC OUTPUT ' &
627 ,
'hm,s,bvf2,pvn,theta,sigma,pvu= '
629 print*,dum1d7(l),dum1d8(l),dum1d9(l),dum1d10(l),dum1d11(l) &
630 ,dum1d12(l),dum1d13(l)
633 IF((iget(332) > 0).OR.(iget(333) > 0).OR. &
634 (iget(334) > 0).OR.(iget(335) > 0).OR. &
635 (iget(351) > 0).OR.(iget(352) > 0).OR. &
636 (iget(353) > 0).OR.(iget(378) > 0))
THEN
638 CALL
p2th(lm,dum1d11,uh(i,j,1:lm),vh(i,j,1:lm) &
639 ,dum1d7,t(i,j,1:lm),dum1d13,dum1d12,dum1d14 &
640 ,omga(i,j,1:lm),kth,th &
641 ,lth,uth(i,j,1:kth),vth(i,j,1:kth) &
644 ,tth(i,j,1:kth),pvth(i,j,1:kth) &
645 ,sigmath(i,j,1:kth),rhth(i,j,1:kth) &
649 IF((iget(336) > 0) .OR. (iget(337) > 0).OR. &
650 (iget(338) > 0) .OR. (iget(339) > 0).OR. &
651 (iget(340) > 0) .OR. (iget(341) > 0))
THEN
652 CALL
p2pv(lm,dum1d13,zmid(i,j,1:lm),t(i,j,1:lm),pmid(i,j,1:lm) &
653 ,uh(i,j,1:lm),vh(i,j,1:lm),kpv,pv,pvpt,pvpb*pint(i,j,lm+1) &
654 ,lpv,upv(i,j,1:kpv),vpv(i,j,1:kpv),hpv(i,j,1:kpv) &
656 ,tpv(i,j,1:kpv),ppv(i,j,1:kpv),spv(i,j,1:kpv) )
679 IF(iget(332) > 0 .OR. iget(333) > 0)
THEN
680 IF(lvls(lp,iget(332)) > 0 .OR. lvls(lp,iget(333)) > 0)
THEN
684 grid1(i,j) = uth(i,j,lp)
685 grid2(i,j) = vth(i,j,lp)
688 if(grib==
'grib2')
then
690 fld_info(cfld)%ifld = iavblfld(iget(332))
691 fld_info(cfld)%lvl = lvlsxml(lp,iget(332))
697 datapd(i,j,cfld) = grid1(ii,jj)
701 fld_info(cfld)%ifld = iavblfld(iget(333))
702 fld_info(cfld)%lvl = lvlsxml(lp,iget(333))
708 datapd(i,j,cfld) = grid2(ii,jj)
717 IF(iget(334) > 0)
THEN
718 IF(lvls(lp,iget(334)) > 0)
THEN
744 grid1(i,j) = tth(i,j,lp)
747 if(grib==
'grib2')
then
749 fld_info(cfld)%ifld=iavblfld(iget(334))
750 fld_info(cfld)%lvl=lvlsxml(lp,iget(334))
756 datapd(i,j,cfld) = grid1(ii,jj)
765 IF(iget(335) > 0)
THEN
766 IF(lvls(lp,iget(335)) > 0)
THEN
772 dum2d(ista:iend,jsta:jend)=pvth(ista:iend,jsta:jend,lp)
774 CALL fullpole(dum2d,pvpoles)
776 IF(jsta== 1) cosltemp(1:im, 1)=coslpoles(1:im,1)
777 IF(jend==jm) cosltemp(1:im,jm)=coslpoles(1:im,2)
779 IF(jsta== 1) pvtemp(1:im, 1)=pvpoles(1:im,1)
780 IF(jend==jm) pvtemp(1:im,jm)=pvpoles(1:im,2)
782 call poleavg(im,jm,jsta,jend,small,cosltemp(1:im,jsta:jend) &
783 ,spval,pvtemp(1:im,jsta:jend))
785 IF(jsta== 1) pvth(ista:iend, 1,lp)=pvtemp(ista:iend, 1)
786 IF(jend==jm) pvth(ista:iend,jm,lp)=pvtemp(ista:iend,jm)
791 IF(pvth(i,j,lp) /= spval)
THEN
792 grid1(i,j) = pvth(i,j,lp)*1.0e-6
794 grid1(i,j) = pvth(i,j,lp)
798 if(grib==
'grib2')
then
800 fld_info(cfld)%ifld=iavblfld(iget(335))
801 fld_info(cfld)%lvl=lvlsxml(lp,iget(335))
807 datapd(i,j,cfld) = grid1(ii,jj)
816 IF(iget(353) > 0)
THEN
817 IF(lvls(lp,iget(353)) > 0)
THEN
821 grid1(i,j) = hmth(i,j,lp)
824 if(grib==
'grib2')
then
826 fld_info(cfld)%ifld=iavblfld(iget(353))
827 fld_info(cfld)%lvl=lvlsxml(lp,iget(353))
833 datapd(i,j,cfld) = grid1(ii,jj)
842 IF(iget(351) > 0)
THEN
843 IF(lvls(lp,iget(351)) > 0)
THEN
847 grid1(i,j) = sigmath(i,j,lp)
850 if(grib==
'grib2')
then
852 fld_info(cfld)%ifld=iavblfld(iget(351))
853 fld_info(cfld)%lvl=lvlsxml(lp,iget(351))
859 datapd(i,j,cfld) = grid1(ii,jj)
868 IF(iget(352) > 0)
THEN
869 IF(lvls(lp,iget(352)) > 0)
THEN
873 IF(rhth(i,j,lp) /= spval)
THEN
874 grid1(i,j) = 100.0 * min(1.,max(rhmin,rhth(i,j,lp)))
880 if(grib==
'grib2')
then
882 fld_info(cfld)%ifld=iavblfld(iget(352))
883 fld_info(cfld)%lvl=lvlsxml(lp,iget(352))
889 datapd(i,j,cfld) = grid1(ii,jj)
898 IF(iget(378) > 0)
THEN
899 IF(lvls(lp,iget(378)) > 0)
THEN
903 grid1(i,j) = oth(i,j,lp)
906 if(grib==
'grib2')
then
908 fld_info(cfld)%ifld=iavblfld(iget(378))
909 fld_info(cfld)%lvl=lvlsxml(lp,iget(378))
915 datapd(i,j,cfld) = grid1(ii,jj)
926 IF(iget(336) > 0.OR.iget(337) > 0)
THEN
927 IF(lvls(lp,iget(336)) > 0.OR.lvls(lp,iget(337)) > 0)
THEN
931 dum2d(ista:iend,jsta:jend)=vpv(ista:iend,jsta:jend,lp)
933 CALL fullpole(dum2d,pvpoles)
935 IF(jsta== 1) cosltemp(1:im, 1)=coslpoles(1:im,1)
936 IF(jend==jm) cosltemp(1:im,jm)=coslpoles(1:im,2)
938 IF(jsta== 1) pvtemp(1:im, 1)=pvpoles(1:im,1)
939 IF(jend==jm) pvtemp(1:im,jm)=pvpoles(1:im,2)
941 call poleavg(im,jm,jsta,jend,small,cosltemp(1:im,jsta:jend) &
942 ,spval,pvtemp(1:im,jsta:jend))
944 IF(jsta== 1) vpv(ista:iend, 1,lp)=pvtemp(ista:iend, 1)
945 IF(jend==jm) vpv(ista:iend,jm,lp)=pvtemp(ista:iend,jm)
950 grid1(i,j) = upv(i,j,lp)
951 grid2(i,j) = vpv(i,j,lp)
954 if(grib==
'grib2')
then
956 fld_info(cfld)%ifld=iavblfld(iget(336))
957 fld_info(cfld)%lvl=lvlsxml(lp,iget(336))
963 datapd(i,j,cfld) = grid1(ii,jj)
967 fld_info(cfld)%ifld=iavblfld(iget(337))
968 fld_info(cfld)%lvl=lvlsxml(lp,iget(337))
974 datapd(i,j,cfld) = grid2(ii,jj)
984 IF(iget(338) > 0)
THEN
985 IF(lvls(lp,iget(338)) > 0)
THEN
989 dum2d(ista:iend,jsta:jend)=tpv(ista:iend,jsta:jend,lp)
991 CALL fullpole(dum2d,pvpoles)
993 IF(jsta== 1) cosltemp(1:im, 1)=coslpoles(1:im,1)
994 IF(jend==jm) cosltemp(1:im,jm)=coslpoles(1:im,2)
996 IF(jsta== 1) pvtemp(1:im, 1)=pvpoles(1:im,1)
997 IF(jend==jm) pvtemp(1:im,jm)=pvpoles(1:im,2)
999 call poleavg(im,jm,jsta,jend,small,cosltemp(1:im,jsta:jend) &
1000 ,spval,pvtemp(1:im,jsta:jend))
1002 IF(jsta== 1) tpv(ista:iend, 1,lp)=pvtemp(ista:iend, 1)
1003 IF(jend==jm) tpv(ista:iend,jm,lp)=pvtemp(ista:iend,jm)
1008 grid1(i,j) = tpv(i,j,lp)
1011 if(grib==
'grib2')
then
1013 fld_info(cfld)%ifld=iavblfld(iget(338))
1014 fld_info(cfld)%lvl=lvlsxml(lp,iget(338))
1020 datapd(i,j,cfld) = grid1(ii,jj)
1029 IF(iget(339) > 0)
THEN
1030 IF(lvls(lp,iget(339)) > 0)
THEN
1034 dum2d(ista:iend,jsta:jend)=hpv(ista:iend,jsta:jend,lp)
1036 CALL fullpole(dum2d,pvpoles)
1038 IF(jsta== 1) cosltemp(1:im, 1)=coslpoles(1:im,1)
1039 IF(jend==jm) cosltemp(1:im,jm)=coslpoles(1:im,2)
1041 IF(jsta== 1) pvtemp(1:im, 1)=pvpoles(1:im,1)
1042 IF(jend==jm) pvtemp(1:im,jm)=pvpoles(1:im,2)
1044 call poleavg(im,jm,jsta,jend,small,cosltemp(1:im,jsta:jend) &
1045 ,spval,pvtemp(1:im,jsta:jend))
1047 IF(jsta== 1) hpv(ista:iend, 1,lp)=pvtemp(ista:iend, 1)
1048 IF(jend==jm) hpv(ista:iend,jm,lp)=pvtemp(ista:iend,jm)
1053 grid1(i,j) = hpv(i,j,lp)
1056 if(grib==
'grib2')
then
1058 fld_info(cfld)%ifld=iavblfld(iget(339))
1059 fld_info(cfld)%lvl=lvlsxml(lp,iget(339))
1065 datapd(i,j,cfld) = grid1(ii,jj)
1074 IF(iget(340) > 0)
THEN
1075 IF(lvls(lp,iget(340)) > 0)
THEN
1079 dum2d(ista:iend,jsta:jend)=ppv(ista:iend,jsta:jend,lp)
1081 CALL fullpole(dum2d,pvpoles)
1083 IF(jsta== 1) cosltemp(1:im, 1)=coslpoles(1:im,1)
1084 IF(jend==jm) cosltemp(1:im,jm)=coslpoles(1:im,2)
1086 IF(jsta== 1) pvtemp(1:im, 1)=pvpoles(1:im,1)
1087 IF(jend==jm) pvtemp(1:im,jm)=pvpoles(1:im,2)
1089 call poleavg(im,jm,jsta,jend,small,cosltemp(1:im,jsta:jend) &
1090 ,spval,pvtemp(1:im,jsta:jend))
1092 IF(jsta== 1) ppv(ista:iend, 1,lp)=pvtemp(ista:iend, 1)
1093 IF(jend==jm) ppv(ista:iend,jm,lp)=pvtemp(ista:iend,jm)
1098 grid1(i,j) = ppv(i,j,lp)
1101 if(grib==
'grib2')
then
1103 fld_info(cfld)%ifld=iavblfld(iget(340))
1104 fld_info(cfld)%lvl=lvlsxml(lp,iget(340))
1110 datapd(i,j,cfld) = grid1(ii,jj)
1119 IF(iget(341) > 0)
THEN
1120 IF(lvls(lp,iget(341)) > 0)
THEN
1124 dum2d(ista:iend,jsta:jend)=spv(ista:iend,jsta:jend,lp)
1126 CALL fullpole(dum2d,pvpoles)
1128 IF(jsta== 1) cosltemp(1:im, 1)=coslpoles(1:im,1)
1129 IF(jend==jm) cosltemp(1:im,jm)=coslpoles(1:im,2)
1131 IF(jsta== 1) pvtemp(1:im, 1)=pvpoles(1:im,1)
1132 IF(jend==jm) pvtemp(1:im,jm)=pvpoles(1:im,2)
1134 call poleavg(im,jm,jsta,jend,small,cosltemp(1:im,jsta:jend) &
1135 ,spval,pvtemp(1:im,jsta:jend))
1137 IF(jsta== 1) spv(ista:iend, 1,lp)=pvtemp(ista:iend, 1)
1138 IF(jend==jm) spv(ista:iend,jm,lp)=pvtemp(ista:iend,jm)
1143 grid1(i,j) = spv(i,j,lp)
1146 if(grib==
'grib2')
then
1148 fld_info(cfld)%ifld=iavblfld(iget(341))
1149 fld_info(cfld)%lvl=lvlsxml(lp,iget(341))
1155 datapd(i,j,cfld) = grid1(ii,jj)
1164 DEALLOCATE(dum1d1,dum1d2,dum1d3,dum1d4,dum1d5,dum1d6,dum1d7, &
1165 dum1d8,dum1d9,dum1d10,dum1d11,dum1d12,dum1d13, &
1166 dum1d14,wrk1, wrk2, wrk3, wrk4, cosl, dum2d)
1169 if(me==0)
write(0,*)
'MDL2THANDPV ends'
subroutine p2th(km, theta, u, v, h, t, pvu, sigma, rh, omga, kth, th, lth, uth, vth, hth, tth, zth, sigmath, rhth, oth)
p2th() interpolates to isentropic level.
dvdxdudy() computes dudy, dvdx, uwnd
subroutine p2pv(km, pvu, h, t, p, u, v, kpv, pv, pvpt, pvpb, lpv, upv, vpv, hpv, tpv, ppv, spv)
p2pv() interpolates to potential vorticity level.
elemental real function, public fpvsnew(t)
calcape() computes CAPE/CINS and other storm related variables.