34 use vrbls3d, only: pmid, t, uh, q, vh, zmid, omga, pint
36 use masks, only: gdlat, gdlon, dx, dy
38 use params_mod, only: dtr, small, erad, d608, rhmin
39 use ctlblk_mod, only: spval, lm, jsta_2l, jend_2u, grib, cfld, datapd, fld_info,&
40 im, jm, jsta, jend, jsta_m, jend_m, modelname, global,gdsdegr,me,&
41 ista, iend, ista_m, iend_m, ista_2l, iend_2u
42 use rqstfld_mod, only: iget, lvls, id, iavblfld, lvlsxml
43 use gridspec_mod
, only: gridtype,dyval
51 integer,
intent(in) :: kth, kpv
52 real,
intent(in) :: th(kth), pv(kpv)
53 real,
dimension(ista:iend,jsta:jend) :: grid1, grid2
54 real,
dimension(kpv) :: pvpt, pvpb
57 LOGICAL lth(kth), lpv(kpv)
59 REAL,
allocatable:: dum1d1(:), dum1d2(:), dum1d3(:),dum1d4(:) &
60 , dum1d5(:), dum1d6(:), dum1d7(:),dum1d8(:) &
61 , dum1d9(:), dum1d10(:),dum1d11(:) &
62 , dum1d12(:),dum1d13(:),dum1d14(:)
64 real,
dimension(ISTA:IEND,JSTA:JEND,KTH) :: uth, vth, hmth, tth, pvth, &
66 real,
dimension(ISTA:IEND,JSTA:JEND,KPV) :: upv, vpv, hpv, tpv, ppv, spv
67 real,
dimension(IM,2) :: glatpoles, coslpoles, pvpoles
68 real,
dimension(IM,2,LM) :: upoles, tpoles, ppoles
69 real,
dimension(IM,JSTA:JEND) :: cosltemp, pvtemp
71 real,
allocatable :: wrk1(:,:), wrk2(:,:), wrk3(:,:), wrk4(:,:), cosl(:,:), dum2d(:,:)
72 real,
allocatable :: tuv(:,:,:),pmiduv(:,:,:)
74 integer,
dimension(im) :: iw, ie
75 integer i,j,l,k,lp,imb2,ip1,im1,ii,jj,jmt2,ihw,ihe
76 real dvdx,dudy,uavg,tphi, es, qstl, eradi, tem
77 real,
allocatable :: dvdxl(:,:,:), dudyl(:,:,:), uavgl(:,:,:)
84 if(me==0)
write(*,*)
'MDL2THANDPV starts'
95 IF((iget(332) > 0).OR.(iget(333) > 0).OR. &
96 (iget(334) > 0).OR.(iget(335) > 0).OR. &
97 (iget(336) > 0).OR.(iget(337) > 0).OR. &
98 (iget(338) > 0).OR.(iget(339) > 0).OR. &
99 (iget(340) > 0).OR.(iget(341) > 0).OR. &
100 (iget(351) > 0).OR.(iget(352) > 0).OR. &
101 (iget(353) > 0).OR.(iget(378) > 0) )
THEN
122 sigmath(i,j,k) = spval
141 ALLOCATE(dum1d1(lm), dum1d2(lm), dum1d3(lm),dum1d4(lm))
142 ALLOCATE(dum1d5(lm), dum1d6(lm))
143 ALLOCATE(dum1d7(lm), dum1d8(lm), dum1d9(lm),dum1d10(lm))
144 ALLOCATE(dum1d11(lm),dum1d12(lm),dum1d13(lm))
145 ALLOCATE(dum1d14(lm))
148 CALL exch(pmid(ista_2l:iend_2u,jsta_2l:jend_2u,l))
149 CALL exch(t(ista_2l:iend_2u,jsta_2l:jend_2u,l))
150 CALL exch(uh(ista_2l:iend_2u,jsta_2l:jend_2u,l))
151 CALL exch(vh(ista_2l:iend_2u,jsta_2l:jend_2u,l))
153 CALL exch(gdlat(ista_2l,jsta_2l))
154 CALL exch(gdlon(ista_2l,jsta_2l))
161 allocate (wrk1(ista:iend,jsta:jend), wrk2(ista:iend,jsta:jend), &
162 & wrk3(ista:iend,jsta:jend), cosl(ista_2l:iend_2u,jsta_2l:jend_2u))
163 allocate (dum2d(ista_2l:iend_2u,jsta_2l:jend_2u))
164 allocate (wrk4(ista:iend,jsta:jend))
170 IF(gridtype ==
'A')
THEN
184 cosl(i,j) = cos(gdlat(i,j)*dtr)
185 IF(cosl(i,j) >= small)
then
186 wrk1(i,j) = eradi / cosl(i,j)
190 if(i == im .or. i == 1)
then
191 wrk2(i,j) = 1.0 / ((360.+gdlon(ip1,j)-gdlon(im1,j))*dtr)
193 wrk2(i,j) = 1.0 / ((gdlon(ip1,j)-gdlon(im1,j))*dtr)
195 wrk4(i,j) = wrk1(i,j) * wrk2(i,j)
200 call fullpole(cosl,coslpoles)
201 call fullpole(gdlat(ista_2l:iend_2u,jsta_2l:jend_2u),glatpoles)
208 if (ii > im) ii = ii - im
210 wrk3(i,j) = 1.0 / ((180.-gdlat(i,j+1)-glatpoles(ii,1))*dtr)
212 elseif (j == jm)
then
215 if (ii > im) ii = ii - im
217 wrk3(i,j) = 1.0 / ((180.+gdlat(i,j-1)+glatpoles(ii,2))*dtr)
220 !print *,
' j=',j,
' GDLATJm1=',gdlat(:,j-1)
221 !print *,
' j=',j,
' GDLATJp1=',gdlat(:,j+1)
223 tem = gdlat(i,j-1) - gdlat(i,j+1)
224 if (abs(tem) > small)
then
225 wrk3(i,j) = 1.0 / (tem*dtr)
238 wrk2(i,j) = 0.5 / dx(i,j)
239 wrk3(i,j) = 0.5 / dy(i,j)
245 IF(gridtype ==
'E')
THEN
246 allocate(tuv(ista_2l:iend_2u,jsta_2l:jend_2u,lm))
247 allocate(pmiduv(ista_2l:iend_2u,jsta_2l:jend_2u,lm))
249 call
h2u(t(ista_2l:iend_2u,jsta_2l:jend_2u,l),tuv(ista_2l:iend_2u,jsta_2l:jend_2u,l))
250 call
h2u(pmid(ista_2l:iend_2u,jsta_2l:jend_2u,l),pmiduv(ista_2l:iend_2u,jsta_2l:jend_2u,l))
255 IF(gridtype ==
'A')
THEN
256 IF(modelname ==
'GFS' .or. global)
THEN
259 CALL fullpole(pmid(ista_2l:iend_2u,jsta_2l:jend_2u,l),ppoles(:,:,l))
260 CALL fullpole( t(ista_2l:iend_2u,jsta_2l:jend_2u,l),tpoles(:,:,l))
261 CALL fullpole( uh(ista_2l:iend_2u,jsta_2l:jend_2u,l),upoles(:,:,l))
269 if (ii > im) ii = ii - im
272 IF(cosl(i,j) >= small)
THEN
273 tem = wrk3(i,j) * eradi
276 dum1d5(l) = t(i,j,l)*(1.+d608*q(i,j,l))
277 es = min(
fpvsnew(t(i,j,l)),pmid(i,j,l))
278 dum1d14(l) = q(i,j,l) * (pmid(i,j,l)+con_epsm1*es)/(con_eps*es)
279 dum1d1(l) = (pmid(ip1,j,l)- pmid(im1,j,l)) * wrk4(i,j)
280 dum1d3(l) = (t(ip1,j,l) - t(im1,j,l)) * wrk4(i,j)
282 dum1d2(l) = (ppoles(ii,1,l) - pmid(i,j+1,l)) * tem
284 dum1d4(l) = (tpoles(ii,1,l) - t(i,j+1,l)) * tem
285 dum1d6(l) = ((vh(ip1,j,l)-vh(im1,j,l))*wrk2(i,j) &
287 & + (upoles(ii,1,l)*coslpoles(ii,1) &
288 & + uh(i,j+1,l)*cosl(i,j+1))*wrk3(i,j))*wrk1(i,j) &
293 tem = wrk3(i,jj) * eradi
296 dum1d5(l) = t(i,j,l)*(1.+d608*q(i,j,l))
297 es = min(
fpvsnew(t(i,j,l)),pmid(i,j,l))
298 dum1d14(l) = q(i,j,l) * (pmid(i,j,l)+con_epsm1*es)/(con_eps*es)
299 dum1d1(l) = (pmid(ip1,jj,l)- pmid(im1,jj,l)) * wrk4(i,jj)
300 dum1d3(l) = (t(ip1,jj,l) - t(im1,jj,l)) * wrk4(i,jj)
301 dum1d2(l) = (pmid(i,j,l)-pmid(i,jj+1,l)) * tem
302 dum1d4(l) = (t(i,j,l) - t(i,jj+1,l)) * tem
303 dum1d6(l) = ((vh(ip1,jj,l)-vh(im1,jj,l))*wrk2(i,jj) &
304 & + (uh(i,j,l)*cosl(i,j) &
305 + uh(i,jj+1,l)*cosl(i,jj+1))*wrk3(i,jj))*wrk1(i,jj) &
309 ELSE IF(j == jm)
THEN
310 IF(cosl(i,j) >= small)
THEN
311 tem = wrk3(i,j) * eradi
314 dum1d5(l) = t(i,j,l)*(1.+d608*q(i,j,l))
315 es = min(
fpvsnew(t(i,j,l)),pmid(i,j,l))
316 dum1d14(l) = q(i,j,l) * (pmid(i,j,l)+con_epsm1*es)/(con_eps*es)
317 dum1d1(l) = (pmid(ip1,j,l)- pmid(im1,j,l)) * wrk4(i,j)
318 dum1d3(l) = (t(ip1,j,l) - t(im1,j,l)) * wrk4(i,j)
320 dum1d2(l) = (pmid(i,j-1,l)-ppoles(ii,2,l)) * tem
322 dum1d4(l) = (t(i,j-1,l)-tpoles(ii,2,l)) * tem
323 dum1d6(l) = ((vh(ip1,j,l)-vh(im1,j,l))* wrk2(i,j) &
324 & + (uh(i,j-1,l)*cosl(i,j-1) &
326 & + upoles(ii,2,l)*coslpoles(ii,2))*wrk3(i,j))*wrk1(i,j) &
331 tem = wrk3(i,jj) * eradi
334 dum1d5(l) = t(i,j,l)*(1.+d608*q(i,j,l))
335 es = min(
fpvsnew(t(i,j,l)),pmid(i,j,l))
336 dum1d14(l) = q(i,j,l) * (pmid(i,j,l)+con_epsm1*es)/(con_eps*es)
337 dum1d1(l) = (pmid(ip1,jj,l)- pmid(im1,jj,l)) * wrk4(i,jj)
338 dum1d3(l) = (t(ip1,jj,l) - t(im1,jj,l)) * wrk4(i,jj)
339 dum1d2(l) = (pmid(i,jj-1,l)-pmid(i,j,l)) * tem
340 dum1d4(l) = (t(i,jj-1,l)-t(i,j,l)) * tem
341 dum1d6(l) = ((vh(ip1,jj,l)-vh(im1,jj,l))*wrk2(i,jj) &
342 & + (uh(i,jj-1,l)*cosl(i,jj-1) &
343 & + uh(i,j,l)*cosl(i,j))*wrk3(i,jj))*wrk1(i,jj) &
348 tem = wrk3(i,j) * eradi
351 dum1d5(l) = t(i,j,l)*(1.+d608*q(i,j,l))
352 es = min(
fpvsnew(t(i,j,l)),pmid(i,j,l))
353 dum1d14(l) = q(i,j,l) * (pmid(i,j,l)+con_epsm1*es)/(con_eps*es)
354 dum1d1(l) = (pmid(ip1,j,l)- pmid(im1,j,l)) * wrk4(i,j)
355 dum1d3(l) = (t(ip1,j,l) - t(im1,j,l)) * wrk4(i,j)
358 dum1d2(l) = (pmid(i,j-1,l)-pmid(i,j+1,l)) * tem
359 dum1d4(l) = (t(i,j-1,l)-t(i,j+1,l)) * tem
360 dum1d6(l) = ((vh(ip1,j,l)-vh(im1,j,l))* wrk2(i,j) &
361 & - (uh(i,j-1,l)*cosl(i,j-1) &
362 & - uh(i,j+1,l)*cosl(i,j+1))*wrk3(i,j))*wrk1(i,j) &
368 IF(i==im/2 .AND. j==jm/2)
then
369 print*,
'SAMPLE PVETC INPUT ', &
370 'p,dpdx,dpdy,tv,dtdx,dtdy,h,u,v,vort= '
372 print*,pmid(i,j,l),dum1d1(l),dum1d2(l),dum1d5(l) &
373 ,dum1d3(l),dum1d4(l),zmid(i,j,l),uh(i,j,l),vh(i,j,l) &
378 CALL
pvetc(lm,pmid(i,j,1:lm),dum1d1,dum1d2 &
379 ,dum1d5,dum1d3,dum1d4,zmid(i,j,1:lm),uh(i,j,1:lm) &
380 ,vh(i,j,1:lm),dum1d6 &
381 ,dum1d7,dum1d8,dum1d9,dum1d10,dum1d11,dum1d12,dum1d13)
383 IF(i==im/2 .AND. j==jm/2)
then
384 print*,
'SAMPLE PVETC OUTPUT ' &
385 ,
'hm,s,bvf2,pvn,theta,sigma,pvu= '
387 print*,dum1d7(l),dum1d8(l),dum1d9(l),dum1d10(l),dum1d11(l) &
388 ,dum1d12(l),dum1d13(l),l
392 IF((iget(332) > 0).OR.(iget(333) > 0).OR. &
393 (iget(334) > 0).OR.(iget(335) > 0).OR. &
394 (iget(351) > 0).OR.(iget(352) > 0).OR. &
395 (iget(353) > 0).OR.(iget(378) > 0))
THEN
397 CALL
p2th(lm,dum1d11,uh(i,j,1:lm),vh(i,j,1:lm) &
398 ,dum1d7,t(i,j,1:lm),dum1d13,dum1d12,dum1d14 &
399 ,omga(i,j,1:lm),kth,th &
400 ,lth,uth(i,j,1:kth),vth(i,j,1:kth) &
403 ,tth(i,j,1:kth),pvth(i,j,1:kth) &
404 ,sigmath(i,j,1:kth),rhth(i,j,1:kth) &
408 IF((iget(336) > 0).OR.(iget(337) > 0).OR. &
409 (iget(338) > 0).OR.(iget(339) > 0).OR. &
410 (iget(340) > 0).OR.(iget(341) > 0))
THEN
411 CALL
p2pv(lm,dum1d13,zmid(i,j,1:lm),t(i,j,1:lm),pmid(i,j,1:lm) &
412 ,uh(i,j,1:lm),vh(i,j,1:lm),kpv,pv,pvpt,pvpb*pint(i,j,lm+1)&
413 ,lpv,upv(i,j,1:kpv),vpv(i,j,1:kpv),hpv(i,j,1:kpv) &
415 ,tpv(i,j,1:kpv),ppv(i,j,1:kpv),spv(i,j,1:kpv) )
426 tphi=(j-jmt2)*(dyval/gdsdegr)*dtr
430 tem = wrk3(i,j) * eradi
433 dum1d5(l) = t(i,j,l)*(1.+d608*q(i,j,l))
434 es = min(
fpvsnew(t(i,j,l)),pmid(i,j,l))
435 dum1d14(l) = q(i,j,l) * (pmid(i,j,l)+con_epsm1*es)/(con_eps*es)
436 dum1d1(l) = (pmid(ip1,j,l)- pmid(im1,j,l)) * wrk4(i,j)
437 dum1d3(l) = (t(ip1,j,l) - t(im1,j,l)) * wrk4(i,j)
438 dum1d2(l) = (pmid(i,j+1,l)-pmid(i,j-1,l)) * tem
439 dum1d4(l) = (t(i,j+1,l)-t(i,j-1,l)) * tem
440 dum1d6(l) = ((vh(ip1,j,l)-vh(im1,j,l))* wrk2(i,j) &
441 & - (uh(i,j+1,l)*cosl(i,j+1) &
442 & - uh(i,j-1,l)*cosl(i,j-1))*wrk3(i,j))*wrk1(i,j) &
446 IF(i==im/2 .AND. j==jm/2)
then
447 print*,
'SAMPLE PVETC INPUT for regional ', &
448 'p,dpdx,dpdy,tv,dtdx,dtdy,h,u,v,vort ', &
451 print*,pmid(i,j,l),dum1d1(l),dum1d2(l),dum1d5(l) &
452 ,dum1d3(l),dum1d4(l),zmid(i,j,l),uh(i,j,l),vh(i,j,l) &
453 ,dum1d6(l),jsta_m,jend_m,l
457 CALL
pvetc(lm,pmid(i,j,1:lm),dum1d1,dum1d2 &
458 ,dum1d5,dum1d3,dum1d4,zmid(i,j,1:lm),uh(i,j,1:lm) &
459 ,vh(i,j,1:lm),dum1d6 &
460 ,dum1d7,dum1d8,dum1d9,dum1d10,dum1d11,dum1d12,dum1d13)
462 IF(i==im/2 .AND. j==jm/2)
then
463 print*,
'SAMPLE PVETC OUTPUT ' &
464 ,
'hm,s,bvf2,pvn,theta,sigma,pvu,pvort= '
466 print*,dum1d7(l),dum1d8(l),dum1d9(l),dum1d10(l),dum1d11(l) &
467 ,dum1d12(l),dum1d13(l),dum1d6(l),l
471 IF((iget(332) > 0).OR.(iget(333) > 0).OR. &
472 (iget(334) > 0).OR.(iget(335) > 0).OR. &
473 (iget(351) > 0).OR.(iget(352) > 0).OR. &
474 (iget(353) > 0).OR.(iget(378) > 0))
THEN
476 CALL
p2th(lm,dum1d11,uh(i,j,1:lm),vh(i,j,1:lm) &
477 ,dum1d7,t(i,j,1:lm),dum1d13,dum1d12,dum1d14 &
478 ,omga(i,j,1:lm),kth,th &
479 ,lth,uth(i,j,1:kth),vth(i,j,1:kth) &
482 ,tth(i,j,1:kth),pvth(i,j,1:kth) &
483 ,sigmath(i,j,1:kth),rhth(i,j,1:kth) &
487 IF((iget(336) > 0).OR.(iget(337) > 0).OR. &
488 (iget(338) > 0).OR.(iget(339) > 0).OR. &
489 (iget(340) > 0).OR.(iget(341) > 0))
THEN
490 CALL
p2pv(lm,dum1d13,zmid(i,j,1:lm),t(i,j,1:lm),pmid(i,j,1:lm) &
491 ,uh(i,j,1:lm),vh(i,j,1:lm),kpv,pv,pvpt,pvpb*pint(i,j,lm+1)&
492 ,lpv,upv(i,j,1:kpv),vpv(i,j,1:kpv),hpv(i,j,1:kpv) &
494 ,tpv(i,j,1:kpv),ppv(i,j,1:kpv),spv(i,j,1:kpv) )
502 ELSE IF (gridtype ==
'B')
THEN
503 allocate(dvdxl(ista_m:iend_m,jsta_m:jend_m,lm))
504 allocate(dudyl(ista_m:iend_m,jsta_m:jend_m,lm))
505 allocate(uavgl(ista_m:iend_m,jsta_m:jend_m,lm))
507 CALL exch(vh(ista_2l:iend_2u,jsta_2l:jend_2u,l))
508 CALL exch(uh(ista_2l:iend_2u,jsta_2l:jend_2u,l))
512 dvdxl(i,j,l) = ddvdx(i,j)
513 dudyl(i,j,l) = ddudy(i,j)
514 uavgl(i,j,l) = uuavg(i,j)
520 tphi=(j-jmt2)*(dyval/gdsdegr)*dtr
525 dum1d5(l) = t(i,j,l)*(1.+d608*q(i,j,l))
526 es = min(
fpvsnew(t(i,j,l)),pmid(i,j,l))
527 qstl = con_eps*es/(pmid(i,j,l)+con_epsm1*es)
528 dum1d14(l) = q(i,j,l)/qstl
529 dum1d1(l) = (pmid(ip1,j,l)- pmid(im1,j,l)) * wrk2(i,j)
530 dum1d3(l) = (t(ip1,j,l) - t(im1,j,l)) * wrk2(i,j)
531 dum1d2(l) = (pmid(i,j+1,l)-pmid(i,j-1,l)) * wrk3(i,j)
532 dum1d4(l) = (t(i,j+1,l)-t(i,j-1,l)) * wrk3(i,j)
537 dum1d6(l) = dvdx - dudy + f(i,j) + uavg*tan(tphi)/erad
551 CALL
pvetc(lm,pmid(i,j,1:lm),dum1d1,dum1d2 &
552 ,dum1d5,dum1d3,dum1d4,zmid(i,j,1:lm),uh(i,j,1:lm) &
553 ,vh(i,j,1:lm),dum1d6 &
554 ,dum1d7,dum1d8,dum1d9,dum1d10,dum1d11,dum1d12,dum1d13)
564 IF((iget(332)>0).OR.(iget(333)>0).OR. &
565 (iget(334)>0).OR.(iget(335)>0).OR. &
566 (iget(351)>0).OR.(iget(352)>0).OR. &
567 (iget(353)>0).OR.(iget(378)>0))
THEN
569 CALL
p2th(lm,dum1d11,uh(i,j,1:lm),vh(i,j,1:lm) &
570 ,dum1d7,t(i,j,1:lm),dum1d13,dum1d12,dum1d14 &
571 ,omga(i,j,1:lm),kth,th &
572 ,lth,uth(i,j,1:kth),vth(i,j,1:kth) &
575 ,tth(i,j,1:kth),pvth(i,j,1:kth) &
576 ,sigmath(i,j,1:kth),rhth(i,j,1:kth) &
580 IF((iget(336)>0).OR.(iget(337)>0).OR. &
581 (iget(338)>0).OR.(iget(339)>0).OR. &
582 (iget(340)>0).OR.(iget(341)>0))
THEN
583 CALL
p2pv(lm,dum1d13,zmid(i,j,1:lm),t(i,j,1:lm),pmid(i,j,1:lm) &
584 ,uh(i,j,1:lm),vh(i,j,1:lm),kpv,pv,pvpt,pvpb*pint(i,j,lm+1) &
585 ,lpv,upv(i,j,1:kpv),vpv(i,j,1:kpv),hpv(i,j,1:kpv) &
587 ,tpv(i,j,1:kpv),ppv(i,j,1:kpv),spv(i,j,1:kpv) )
591 deallocate(dvdxl,dudyl,uavgl)
592 ELSE IF (gridtype ==
'E')
THEN
595 tphi = (j-jmt2)*(dyval/gdsdegr)*dtr
602 dum1d5(l)=t(i,j,l)*(1.+d608*q(i,j,l))
604 es=min(es,pmid(i,j,l))
605 qstl=con_eps*es/(pmid(i,j,l)+con_epsm1*es)
606 dum1d14(l)=q(i,j,l)/qstl
607 dum1d1(l) = (pmiduv(i+ihe,j,l)- pmiduv(i+ihw,j,l))*wrk2(i,j)
608 dum1d3(l) = (tuv(i+ihe,j,l) - tuv(i+ihw,j,l)) * wrk2(i,j)
609 dum1d2(l) = (pmiduv(i,j+1,l)- pmiduv(i,j-1,l))*wrk3(i,j)
610 dum1d4(l)= (tuv(i,j+1,l)- tuv(i,j-1,l))*wrk3(i,j)
611 dvdx=(vh(i+ihe,j,l)-vh(i+ihw,j,l))* wrk2(i,j)
612 dudy=(uh(i,j+1,l)-uh(i,j-1,l))* wrk3(i,j)
613 uavg=0.25*(uh(i+ihe,j,l)+uh(i+ihw,j,l)+uh(i,j-1,l)+uh(i,j+1,l))
615 dum1d6(l)=dvdx-dudy+f(i,j)+uavg*tan(tphi)/erad
618 IF(i==im/2 .AND. j==jm/2)
then
619 print*,
'SAMPLE PVETC INPUT ' &
620 ,
'p,dpdx,dpdy,tv,dtdx,dtdy,h,u,v,vort= '
622 print*,pmid(i,j,l),dum1d1(l),dum1d2(l),dum1d5(l) &
623 ,dum1d3(l),dum1d4(l),zmid(i,j,l),uh(i,j,l),vh(i,j,l) &
628 CALL
pvetc(lm,pmid(i,j,1:lm),dum1d1,dum1d2 &
629 ,dum1d5,dum1d3,dum1d4,zmid(i,j,1:lm),uh(i,j,1:lm) &
630 ,vh(i,j,1:lm),dum1d6 &
631 ,dum1d7,dum1d8,dum1d9,dum1d10,dum1d11,dum1d12,dum1d13)
633 IF(i==im/2 .AND. j==jm/2)
then
634 print*,
'SAMPLE PVETC OUTPUT ' &
635 ,
'hm,s,bvf2,pvn,theta,sigma,pvu= '
637 print*,dum1d7(l),dum1d8(l),dum1d9(l),dum1d10(l),dum1d11(l) &
638 ,dum1d12(l),dum1d13(l)
641 IF((iget(332) > 0).OR.(iget(333) > 0).OR. &
642 (iget(334) > 0).OR.(iget(335) > 0).OR. &
643 (iget(351) > 0).OR.(iget(352) > 0).OR. &
644 (iget(353) > 0).OR.(iget(378) > 0))
THEN
646 CALL
p2th(lm,dum1d11,uh(i,j,1:lm),vh(i,j,1:lm) &
647 ,dum1d7,t(i,j,1:lm),dum1d13,dum1d12,dum1d14 &
648 ,omga(i,j,1:lm),kth,th &
649 ,lth,uth(i,j,1:kth),vth(i,j,1:kth) &
652 ,tth(i,j,1:kth),pvth(i,j,1:kth) &
653 ,sigmath(i,j,1:kth),rhth(i,j,1:kth) &
657 IF((iget(336) > 0) .OR. (iget(337) > 0).OR. &
658 (iget(338) > 0) .OR. (iget(339) > 0).OR. &
659 (iget(340) > 0) .OR. (iget(341) > 0))
THEN
660 CALL
p2pv(lm,dum1d13,zmid(i,j,1:lm),t(i,j,1:lm),pmid(i,j,1:lm) &
661 ,uh(i,j,1:lm),vh(i,j,1:lm),kpv,pv,pvpt,pvpb*pint(i,j,lm+1) &
662 ,lpv,upv(i,j,1:kpv),vpv(i,j,1:kpv),hpv(i,j,1:kpv) &
664 ,tpv(i,j,1:kpv),ppv(i,j,1:kpv),spv(i,j,1:kpv) )
687 IF(iget(332) > 0 .OR. iget(333) > 0)
THEN
688 IF(lvls(lp,iget(332)) > 0 .OR. lvls(lp,iget(333)) > 0)
THEN
692 grid1(i,j) = uth(i,j,lp)
693 grid2(i,j) = vth(i,j,lp)
696 if(grib==
'grib2')
then
698 fld_info(cfld)%ifld = iavblfld(iget(332))
699 fld_info(cfld)%lvl = lvlsxml(lp,iget(332))
705 datapd(i,j,cfld) = grid1(ii,jj)
709 fld_info(cfld)%ifld = iavblfld(iget(333))
710 fld_info(cfld)%lvl = lvlsxml(lp,iget(333))
716 datapd(i,j,cfld) = grid2(ii,jj)
725 IF(iget(334) > 0)
THEN
726 IF(lvls(lp,iget(334)) > 0)
THEN
752 grid1(i,j) = tth(i,j,lp)
755 if(grib==
'grib2')
then
757 fld_info(cfld)%ifld=iavblfld(iget(334))
758 fld_info(cfld)%lvl=lvlsxml(lp,iget(334))
764 datapd(i,j,cfld) = grid1(ii,jj)
773 IF(iget(335) > 0)
THEN
774 IF(lvls(lp,iget(335)) > 0)
THEN
780 dum2d(ista:iend,jsta:jend)=pvth(ista:iend,jsta:jend,lp)
782 CALL fullpole(dum2d,pvpoles)
784 IF(jsta== 1) cosltemp(1:im, 1)=coslpoles(1:im,1)
785 IF(jend==jm) cosltemp(1:im,jm)=coslpoles(1:im,2)
787 IF(jsta== 1) pvtemp(1:im, 1)=pvpoles(1:im,1)
788 IF(jend==jm) pvtemp(1:im,jm)=pvpoles(1:im,2)
790 call poleavg(im,jm,jsta,jend,small,cosltemp(1:im,jsta:jend) &
791 ,spval,pvtemp(1:im,jsta:jend))
793 IF(jsta== 1) pvth(ista:iend, 1,lp)=pvtemp(ista:iend, 1)
794 IF(jend==jm) pvth(ista:iend,jm,lp)=pvtemp(ista:iend,jm)
799 IF(pvth(i,j,lp) /= spval)
THEN
800 grid1(i,j) = pvth(i,j,lp)*1.0e-6
802 grid1(i,j) = pvth(i,j,lp)
806 if(grib==
'grib2')
then
808 fld_info(cfld)%ifld=iavblfld(iget(335))
809 fld_info(cfld)%lvl=lvlsxml(lp,iget(335))
815 datapd(i,j,cfld) = grid1(ii,jj)
824 IF(iget(353) > 0)
THEN
825 IF(lvls(lp,iget(353)) > 0)
THEN
829 grid1(i,j) = hmth(i,j,lp)
832 if(grib==
'grib2')
then
834 fld_info(cfld)%ifld=iavblfld(iget(353))
835 fld_info(cfld)%lvl=lvlsxml(lp,iget(353))
841 datapd(i,j,cfld) = grid1(ii,jj)
850 IF(iget(351) > 0)
THEN
851 IF(lvls(lp,iget(351)) > 0)
THEN
855 grid1(i,j) = sigmath(i,j,lp)
858 if(grib==
'grib2')
then
860 fld_info(cfld)%ifld=iavblfld(iget(351))
861 fld_info(cfld)%lvl=lvlsxml(lp,iget(351))
867 datapd(i,j,cfld) = grid1(ii,jj)
876 IF(iget(352) > 0)
THEN
877 IF(lvls(lp,iget(352)) > 0)
THEN
881 IF(rhth(i,j,lp) /= spval)
THEN
882 grid1(i,j) = 100.0 * min(1.,max(rhmin,rhth(i,j,lp)))
888 if(grib==
'grib2')
then
890 fld_info(cfld)%ifld=iavblfld(iget(352))
891 fld_info(cfld)%lvl=lvlsxml(lp,iget(352))
897 datapd(i,j,cfld) = grid1(ii,jj)
906 IF(iget(378) > 0)
THEN
907 IF(lvls(lp,iget(378)) > 0)
THEN
911 grid1(i,j) = oth(i,j,lp)
914 if(grib==
'grib2')
then
916 fld_info(cfld)%ifld=iavblfld(iget(378))
917 fld_info(cfld)%lvl=lvlsxml(lp,iget(378))
923 datapd(i,j,cfld) = grid1(ii,jj)
934 IF(iget(336) > 0.OR.iget(337) > 0)
THEN
935 IF(lvls(lp,iget(336)) > 0.OR.lvls(lp,iget(337)) > 0)
THEN
939 dum2d(ista:iend,jsta:jend)=vpv(ista:iend,jsta:jend,lp)
941 CALL fullpole(dum2d,pvpoles)
943 IF(jsta== 1) cosltemp(1:im, 1)=coslpoles(1:im,1)
944 IF(jend==jm) cosltemp(1:im,jm)=coslpoles(1:im,2)
946 IF(jsta== 1) pvtemp(1:im, 1)=pvpoles(1:im,1)
947 IF(jend==jm) pvtemp(1:im,jm)=pvpoles(1:im,2)
949 call poleavg(im,jm,jsta,jend,small,cosltemp(1:im,jsta:jend) &
950 ,spval,pvtemp(1:im,jsta:jend))
952 IF(jsta== 1) vpv(ista:iend, 1,lp)=pvtemp(ista:iend, 1)
953 IF(jend==jm) vpv(ista:iend,jm,lp)=pvtemp(ista:iend,jm)
958 grid1(i,j) = upv(i,j,lp)
959 grid2(i,j) = vpv(i,j,lp)
962 if(grib==
'grib2')
then
964 fld_info(cfld)%ifld=iavblfld(iget(336))
965 fld_info(cfld)%lvl=lvlsxml(lp,iget(336))
971 datapd(i,j,cfld) = grid1(ii,jj)
975 fld_info(cfld)%ifld=iavblfld(iget(337))
976 fld_info(cfld)%lvl=lvlsxml(lp,iget(337))
982 datapd(i,j,cfld) = grid2(ii,jj)
992 IF(iget(338) > 0)
THEN
993 IF(lvls(lp,iget(338)) > 0)
THEN
997 dum2d(ista:iend,jsta:jend)=tpv(ista:iend,jsta:jend,lp)
999 CALL fullpole(dum2d,pvpoles)
1001 IF(jsta== 1) cosltemp(1:im, 1)=coslpoles(1:im,1)
1002 IF(jend==jm) cosltemp(1:im,jm)=coslpoles(1:im,2)
1004 IF(jsta== 1) pvtemp(1:im, 1)=pvpoles(1:im,1)
1005 IF(jend==jm) pvtemp(1:im,jm)=pvpoles(1:im,2)
1007 call poleavg(im,jm,jsta,jend,small,cosltemp(1:im,jsta:jend) &
1008 ,spval,pvtemp(1:im,jsta:jend))
1010 IF(jsta== 1) tpv(ista:iend, 1,lp)=pvtemp(ista:iend, 1)
1011 IF(jend==jm) tpv(ista:iend,jm,lp)=pvtemp(ista:iend,jm)
1016 grid1(i,j) = tpv(i,j,lp)
1019 if(grib==
'grib2')
then
1021 fld_info(cfld)%ifld=iavblfld(iget(338))
1022 fld_info(cfld)%lvl=lvlsxml(lp,iget(338))
1028 datapd(i,j,cfld) = grid1(ii,jj)
1037 IF(iget(339) > 0)
THEN
1038 IF(lvls(lp,iget(339)) > 0)
THEN
1042 dum2d(ista:iend,jsta:jend)=hpv(ista:iend,jsta:jend,lp)
1044 CALL fullpole(dum2d,pvpoles)
1046 IF(jsta== 1) cosltemp(1:im, 1)=coslpoles(1:im,1)
1047 IF(jend==jm) cosltemp(1:im,jm)=coslpoles(1:im,2)
1049 IF(jsta== 1) pvtemp(1:im, 1)=pvpoles(1:im,1)
1050 IF(jend==jm) pvtemp(1:im,jm)=pvpoles(1:im,2)
1052 call poleavg(im,jm,jsta,jend,small,cosltemp(1:im,jsta:jend) &
1053 ,spval,pvtemp(1:im,jsta:jend))
1055 IF(jsta== 1) hpv(ista:iend, 1,lp)=pvtemp(ista:iend, 1)
1056 IF(jend==jm) hpv(ista:iend,jm,lp)=pvtemp(ista:iend,jm)
1061 grid1(i,j) = hpv(i,j,lp)
1064 if(grib==
'grib2')
then
1066 fld_info(cfld)%ifld=iavblfld(iget(339))
1067 fld_info(cfld)%lvl=lvlsxml(lp,iget(339))
1073 datapd(i,j,cfld) = grid1(ii,jj)
1082 IF(iget(340) > 0)
THEN
1083 IF(lvls(lp,iget(340)) > 0)
THEN
1087 dum2d(ista:iend,jsta:jend)=ppv(ista:iend,jsta:jend,lp)
1089 CALL fullpole(dum2d,pvpoles)
1091 IF(jsta== 1) cosltemp(1:im, 1)=coslpoles(1:im,1)
1092 IF(jend==jm) cosltemp(1:im,jm)=coslpoles(1:im,2)
1094 IF(jsta== 1) pvtemp(1:im, 1)=pvpoles(1:im,1)
1095 IF(jend==jm) pvtemp(1:im,jm)=pvpoles(1:im,2)
1097 call poleavg(im,jm,jsta,jend,small,cosltemp(1:im,jsta:jend) &
1098 ,spval,pvtemp(1:im,jsta:jend))
1100 IF(jsta== 1) ppv(ista:iend, 1,lp)=pvtemp(ista:iend, 1)
1101 IF(jend==jm) ppv(ista:iend,jm,lp)=pvtemp(ista:iend,jm)
1106 grid1(i,j) = ppv(i,j,lp)
1109 if(grib==
'grib2')
then
1111 fld_info(cfld)%ifld=iavblfld(iget(340))
1112 fld_info(cfld)%lvl=lvlsxml(lp,iget(340))
1118 datapd(i,j,cfld) = grid1(ii,jj)
1127 IF(iget(341) > 0)
THEN
1128 IF(lvls(lp,iget(341)) > 0)
THEN
1132 dum2d(ista:iend,jsta:jend)=spv(ista:iend,jsta:jend,lp)
1134 CALL fullpole(dum2d,pvpoles)
1136 IF(jsta== 1) cosltemp(1:im, 1)=coslpoles(1:im,1)
1137 IF(jend==jm) cosltemp(1:im,jm)=coslpoles(1:im,2)
1139 IF(jsta== 1) pvtemp(1:im, 1)=pvpoles(1:im,1)
1140 IF(jend==jm) pvtemp(1:im,jm)=pvpoles(1:im,2)
1142 call poleavg(im,jm,jsta,jend,small,cosltemp(1:im,jsta:jend) &
1143 ,spval,pvtemp(1:im,jsta:jend))
1145 IF(jsta== 1) spv(ista:iend, 1,lp)=pvtemp(ista:iend, 1)
1146 IF(jend==jm) spv(ista:iend,jm,lp)=pvtemp(ista:iend,jm)
1151 grid1(i,j) = spv(i,j,lp)
1154 if(grib==
'grib2')
then
1156 fld_info(cfld)%ifld=iavblfld(iget(341))
1157 fld_info(cfld)%lvl=lvlsxml(lp,iget(341))
1163 datapd(i,j,cfld) = grid1(ii,jj)
1172 DEALLOCATE(dum1d1,dum1d2,dum1d3,dum1d4,dum1d5,dum1d6,dum1d7, &
1173 dum1d8,dum1d9,dum1d10,dum1d11,dum1d12,dum1d13, &
1174 dum1d14,wrk1, wrk2, wrk3, wrk4, cosl, dum2d)
1177 if(me==0)
write(*,*)
'MDL2THANDPV ends'
subroutine mdl2thandpv(kth, kpv, th, pv)
mdl2thandpv() vertical interpolation of model levels to isentropic and potential vorticity levels...
subroutine, public dvdxdudy(uwnd, vwnd)
dvdxdudy() computes dudy, dvdx, uwnd
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 from pressure level to isentropic (theta) level.
subroutine pvetc(km, p, px, py, t, tx, ty, h, u, v, av, hm, s, bvf2, pvn, theta, sigma, pvu)
pvetc() computes potential vorticity, etc.
subroutine, public h2u(ingrid, outgrid)
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)