93 use vrbls3d,
only: pmid, uh, vh, t, zmid, zint, pint, alpint, q, omga
94 use vrbls3d,
only: catedr,mwt,gtg
95 use vrbls2d,
only: pblh, cprate, fis, t500, t700, z500, z700,&
98 use params_mod,
only: d00, d50, h99999, h100, h1, h1m12, pq0, a2, a3, a4, &
99 rhmin, rgamog, tfrz, small, g
100 use ctlblk_mod,
only: grib, cfld, fld_info, datapd, im, jsta, jend, jm, jsta_m, jend_m, &
101 nbnd, nbin_du, lm, htfd, spval, pthresh, nfd, petabnd, me,&
102 jsta_2l, jend_2u, modelname, submodelname, &
103 ista, iend, ista_m, iend_m, ista_2l, iend_2u, &
105 use rqstfld_mod,
only: iget, lvls, id, iavblfld, lvlsxml
106 use grib2_module,
only: pset
107 use upp_physics,
only: fpvsnew,calrh_pw,calcape,calcape2,tvirtual
108 use gridspec_mod,
only: gridtype
115 real,
PARAMETER :: C2K=273.15
116 real,
parameter :: con_rd =2.8705e+2
117 real,
parameter :: con_rv =4.6150e+2
118 real,
parameter :: con_eps =con_rd/con_rv
119 real,
parameter :: con_epsm1 =con_rd/con_rv-1
120 real,
parameter :: cpthresh =0.000004
121 real,
PARAMETER :: D1000=1000
122 real,
PARAMETER :: D1500=1500
123 real,
PARAMETER :: D2000=2000
124 real,
PARAMETER :: HCONST=42000000.
125 real,
PARAMETER :: K2C=273.16
126 REAL,
PARAMETER :: DM9999=-9999.0
131 LOGICAL NORTH, FIELD1,FIELD2, NEED_IFI
132 LOGICAL,
dimension(ISTA:IEND,JSTA:JEND) :: DONE, DONE1
134 INTEGER,
allocatable :: LVLBND(:,:,:),LB2(:,:)
137 real,
dimension(im,jm) :: GRID1, GRID2
138 real,
dimension(ista:iend,jsta:jend) :: P1D, T1D, Q1D, U1D, V1D, SHR1D, Z1D, &
139 rh1d, egrid1, egrid2, egrid3, egrid4, &
140 egrid5, egrid6, egrid7, egrid8, &
141 mlcape,mlcin,mllcl,mucape,mucin, &
142 freezelvl,muq1d,slcl,the,maxthe
143 integer,
dimension(ista:iend,jsta:jend) :: MAXTHEPOS
144 real,
dimension(:,:,:),
allocatable :: OMGBND, PWTBND, QCNVBND, &
149 icingfd,gtgfd,catfd,mwtfd,midcal
151 real,
dimension(:,:),
allocatable :: QM8510, RH4710, RH8498, &
152 rh4796, rh1847, ust, vst, &
153 rh3310, rh6610, rh3366, &
154 pw3310, rh4410, rh7294, &
156 t78483, t89671, p78483, p89671
158 REAL,
dimension(:,:,:),
allocatable :: HELI
159 real,
dimension(:,:),
allocatable :: USHR1, VSHR1, USHR6, VSHR6, &
160 maxwp, maxwz, maxwu, maxwv, &
162 INTEGER,
dimension(:,:),
allocatable :: LLOW,LUPP,LLOW_ZINT,IEQL_ZINT, &
164 REAL,
dimension(:,:),
allocatable :: CANGLE,ESHR,UVECT,VVECT,&
165 effust,effvst,fshr,htsfc,&
168 integer I,J,ii,jj,L,ITYPE,ISVALUE,LBND,ILVL,IFD,ITYPEFDLVL(NFD), &
169 iget1, iget2, iget3, llmh,imax,jmax,lmax
170 real DPBND,PKL1,PKU1,FAC1,FAC2,PL,TL,QL,QSAT,RHL,TVRL,TVRBLO, &
171 es1,es2,qs1,qs2,rh1,rh2,zsf,depth(2),work1,work2,work3, &
172 scintmp,mucapetmp,mucintmp,mllcltmp,eshrtmp,mlcapetmp,stp,&
173 fshrtmp,mlcintmp,slcltmp,lapse,ship
177 REAL,
allocatable :: HTFDCTL(:)
178 integer,
allocatable :: ITYPEFDLVLCTL(:)
179 integer IE,IW,JN,JS,IVE(JM),IVW(JM),JVN,JVS
180 integer ISTART,ISTOP,JSTART,JSTOP
181 real dummy(ista:iend,jsta:jend)
182 integer idummy(ista:iend,jsta:jend)
184 INTEGER,
dimension(:,:),
allocatable :: EL_BASE, EL_TOPS
185 LOGICAL,
dimension(:,:),
allocatable :: FOUND_BASE, FOUND_TOPS
186 INTEGER,
dimension(:,:),
allocatable :: L_THETAE_MAX
187 INTEGER,
dimension(:,:),
allocatable :: CAPE9, CINS9
188 CHARACTER(LEN=5) :: IM_CH, JSTA_CH, JEND_CH, ME_CH
189 CHARACTER(LEN=60) :: EFFL_FNAME
190 CHARACTER(LEN=60) :: EFFL_FNAME2
191 INTEGER :: IREC, IUNIT
192 INTEGER :: IREC2, IUNIT2
193 LOGICAL :: debugprint
195 INTEGER :: LLCL_PAR, LEQL_PAR
196 REAL :: LMASK, PSFC, CAPE_PAR, CINS_PAR, LPAR0
197 REAL,
DIMENSION(4) :: PARCEL0
198 REAL,
DIMENSION(:),
ALLOCATABLE :: TPAR_B, TPAR_T
199 REAL,
DIMENSION(:),
ALLOCATABLE :: TPAR_TMP
200 REAL,
DIMENSION(:),
ALLOCATABLE :: P_AMB, T_AMB, Q_AMB, ZINT_AMB
201 REAL,
DIMENSION(:,:,:),
ALLOCATABLE :: TPAR_BASE, TPAR_TOPS
209 need_ifi = iget(1007)>0 .or. iget(1008)>0 .or. iget(1009)>0 .or. iget(1010)>0
211 allocate(ushr1(ista_2l:iend_2u,jsta_2l:jend_2u),vshr1(ista_2l:iend_2u,jsta_2l:jend_2u), &
212 ushr6(ista_2l:iend_2u,jsta_2l:jend_2u),vshr6(ista_2l:iend_2u,jsta_2l:jend_2u))
213 allocate(ust(ista_2l:iend_2u,jsta_2l:jend_2u),vst(ista_2l:iend_2u,jsta_2l:jend_2u), &
214 heli(ista_2l:iend_2u,jsta_2l:jend_2u,2),fshr(ista_2l:iend_2u,jsta_2l:jend_2u))
221 iget2 = lvls(1,iget1)
222 iget3 = lvls(2,iget1)
224 IF (iget1 > 0 .OR. iget(163) > 0 .OR. iget(164) > 0)
THEN
227 CALL calhel(depth,ust,vst,heli,ushr1,vshr1,ushr6,vshr6)
232 grid1(i,j) = heli(i,j,1)
235 if(grib==
'grib2')
then
237 fld_info(cfld)%ifld=iavblfld(iget1)
238 fld_info(cfld)%lvl=lvlsxml(1,iget1)
244 datapd(i,j,cfld) = grid1(ii,jj)
254 grid1(i,j) = heli(i,j,2)
257 if(grib==
'grib2')
then
259 fld_info(cfld)%ifld=iavblfld(iget1)
260 fld_info(cfld)%lvl=lvlsxml(2,iget1)
266 datapd(i,j,cfld) = grid1(ii,jj)
272 IF (iget(163) > 0)
THEN
276 grid1(i,j) = ust(i,j)
279 if(grib==
'grib2')
then
281 fld_info(cfld)%ifld=iavblfld(iget(163))
287 datapd(i,j,cfld) = grid1(ii,jj)
292 IF (iget(164) > 0)
THEN
296 grid1(i,j) = vst(i,j)
299 if(grib==
'grib2')
then
301 fld_info(cfld)%ifld=iavblfld(iget(164))
307 datapd(i,j,cfld) = grid1(ii,jj)
316 if (iget(427) > 0)
THEN
317 CALL calupdhel(grid1(ista_2l:iend_2u,jsta_2l:jend_2u))
318 if(grib==
'grib2')
then
320 fld_info(cfld)%ifld=iavblfld(iget(427))
326 datapd(i,j,cfld) = grid1(ii,jj)
335 IF(iget(430) > 0 .OR. iget(431) > 0 .OR. iget(432) > 0 &
336 .OR. iget(433) > 0)
THEN
339 CALL calhel(depth,ust,vst,heli,ushr1,vshr1,ushr6,vshr6)
344 fshr(i,j) = sqrt(ushr6(i,j)**2+vshr6(i,j)**2)
347 IF(iget(430) > 0)
THEN
351 grid1(i,j) = ushr1(i,j)
354 if(grib==
'grib2')
then
356 fld_info(cfld)%ifld=iavblfld(iget(430))
362 datapd(i,j,cfld) = grid1(ii,jj)
367 IF(iget(431) > 0)
THEN
371 grid1(i,j) = vshr1(i,j)
374 if(grib==
'grib2')
then
376 fld_info(cfld)%ifld=iavblfld(iget(431))
382 datapd(i,j,cfld) = grid1(ii,jj)
387 IF(iget(432) > 0)
THEN
391 grid1(i,j) = ushr6(i,j)
394 if(grib==
'grib2')
then
396 fld_info(cfld)%ifld=iavblfld(iget(432))
402 datapd(i,j,cfld) = grid1(ii,jj)
407 IF(iget(433) > 0)
THEN
411 grid1(i,j) = vshr6(i,j)
414 if(grib==
'grib2')
then
416 fld_info(cfld)%ifld=iavblfld(iget(433))
422 datapd(i,j,cfld) = grid1(ii,jj)
429 if (
allocated(ushr1))
deallocate(ushr1)
430 if (
allocated(vshr1))
deallocate(vshr1)
431 if (
allocated(ushr6))
deallocate(ushr6)
432 if (
allocated(vshr6))
deallocate(vshr6)
433 if (
allocated(ust))
deallocate(ust)
434 if (
allocated(vst))
deallocate(vst)
435 if (
allocated(heli))
deallocate(heli)
441 IF ((iget(054)>0).OR.(iget(055)>0).OR. &
442 (iget(056)>0).OR.(iget(057)>0).OR. &
444 (iget(058)>0).OR.(iget(108)>0) )
THEN
450 if(pmid(i,j,1)<spval)
then
452 CALL tpause(lm,pmid(i,j,1:lm),uh(i,j,1:lm) &
454 ,vh(i,j,1:lm),t(i,j,1:lm),zmid(i,j,1:lm) &
456 ,p1d(i,j),u1d(i,j),v1d(i,j),t1d(i,j) &
458 ,z1d(i,j),shr1d(i,j))
472 IF (iget(054) > 0)
THEN
476 grid1(i,j) = p1d(i,j)
479 if(grib==
'grib2')
then
481 fld_info(cfld)%ifld=iavblfld(iget(054))
487 datapd(i,j,cfld) = grid1(ii,jj)
494 IF (iget(399)>0)
THEN
495 CALL icaoheight(p1d, grid1(ista:iend,jsta:jend))
497 if(grib==
'grib2')
then
499 fld_info(cfld)%ifld=iavblfld(iget(399))
505 datapd(i,j,cfld) = grid1(ii,jj)
512 IF (iget(177) > 0)
THEN
516 grid1(i,j) = z1d(i,j)
519 if(grib==
'grib2')
then
521 fld_info(cfld)%ifld=iavblfld(iget(177))
527 datapd(i,j,cfld) = grid1(ii,jj)
534 IF (iget(055) > 0)
THEN
538 grid1(i,j) = t1d(i,j)
541 if(grib==
'grib2')
then
543 fld_info(cfld)%ifld=iavblfld(iget(055))
549 datapd(i,j,cfld) = grid1(ii,jj)
556 IF (iget(108) > 0)
THEN
557 CALL calpot(p1d,t1d,grid1(ista:iend,jsta:jend))
558 if(grib==
'grib2')
then
560 fld_info(cfld)%ifld=iavblfld(iget(108))
566 datapd(i,j,cfld) = grid1(ii,jj)
573 IF ((iget(056) > 0).OR.(iget(057) > 0))
THEN
581 if(grib==
'grib2')
then
584 fld_info(cfld)%ifld=iavblfld(iget(056))
590 datapd(i,j,cfld) = grid1(ii,jj)
596 fld_info(cfld)%ifld=iavblfld(iget(057))
602 datapd(i,j,cfld) = grid2(ii,jj)
610 IF (iget(058) > 0)
THEN
614 grid1(i,j) = shr1d(i,j)
617 if(grib==
'grib2')
then
619 fld_info(cfld)%ifld=iavblfld(iget(058))
625 datapd(i,j,cfld) = grid1(ii,jj)
636 IF ((iget(173)>0) .OR. (iget(174)>0) .OR. &
637 (iget(175)>0) .OR. (iget(176)>0))
THEN
639 allocate(maxwp(ista:iend,jsta:jend), maxwz(ista:iend,jsta:jend), &
640 maxwu(ista:iend,jsta:jend), maxwv(ista:iend,jsta:jend),maxwt(ista:iend,jsta:jend))
657 IF (abs(pmid(i,j,l)-spval)<=small .OR. &
658 abs(uh(i,j,l)-spval)<=small .OR. &
659 abs(uh(i,j,l)-spval)<=small .OR. &
660 abs(vh(i,j,l)-spval)<=small .OR. &
661 abs(t(i,j,l)-spval)<=small .OR. &
662 abs(zmid(i,j,l)-spval)<=small) cycle loopi
665 CALL mxwind(lm,pmid(i,j,1:lm),uh(i,j,1:lm) &
667 ,vh(i,j,1:lm),t(i,j,1:lm),zmid(i,j,1:lm) &
669 ,maxwp(i,j),maxwu(i,j),maxwv(i,j) &
671 ,maxwt(i,j),maxwz(i,j))
675 IF (iget(173) > 0)
THEN
679 grid1(i,j) = maxwp(i,j)
682 if(grib==
'grib2')
then
684 fld_info(cfld)%ifld=iavblfld(iget(173))
690 datapd(i,j,cfld) = grid1(ii,jj)
696 IF (iget(398)>0)
THEN
697 CALL icaoheight(maxwp, grid1(ista:iend,jsta:jend))
699 if(grib==
'grib2')
then
701 fld_info(cfld)%ifld=iavblfld(iget(398))
707 datapd(i,j,cfld) = grid1(ii,jj)
713 IF (iget(174) > 0)
THEN
717 grid1(i,j) = maxwz(i,j)
720 if(grib==
'grib2')
then
722 fld_info(cfld)%ifld=iavblfld(iget(174))
728 datapd(i,j,cfld) = grid1(ii,jj)
735 IF ((iget(175) > 0).OR.(iget(176) > 0))
THEN
739 grid1(i,j) = maxwu(i,j)
740 grid2(i,j) = maxwv(i,j)
743 if(grib==
'grib2')
then
745 fld_info(cfld)%ifld=iavblfld(iget(175))
751 datapd(i,j,cfld) = grid1(ii,jj)
755 fld_info(cfld)%ifld=iavblfld(iget(176))
761 datapd(i,j,cfld) = grid2(ii,jj)
767 IF (iget(314) > 0)
THEN
771 grid1(i,j)=maxwt(i,j)
774 if(grib==
'grib2')
then
776 fld_info(cfld)%ifld=iavblfld(iget(314))
782 datapd(i,j,cfld) = grid1(ii,jj)
787 deallocate(maxwp,maxwz,maxwu,maxwv,maxwt)
793 IF ( (iget(059)>0.or.iget(586)>0).OR.iget(911)>0.OR. &
794 (iget(060)>0.or.iget(576)>0).OR. &
795 (iget(061)>0.or.iget(577)>0).OR. &
796 (iget(451)>0.or.iget(578)>0).OR.iget(580)>0 )
THEN
798 ALLOCATE(t7d(ista:iend,jsta:jend,nfd), q7d(ista:iend,jsta:jend,nfd), &
799 u7d(ista:iend,jsta:jend,nfd), v6d(ista:iend,jsta:jend,nfd), &
800 p7d(ista:iend,jsta:jend,nfd), icingfd(ista:iend,jsta:jend,nfd))
807 IF (iget(059)>0)
THEN
808 IF (lvls(ifd,iget(059))>1) itypefdlvl(ifd)=2
810 IF (iget(911)>0)
THEN
811 IF (lvls(ifd,iget(911))>1) itypefdlvl(ifd)=2
814 IF (iget(586)>0)
THEN
815 IF(lvls(ifd,iget(586))>0) itypefdlvl(ifd)=2
817 IF (iget(060)>0)
THEN
818 IF (lvls(ifd,iget(060))>1) itypefdlvl(ifd)=2
820 IF (iget(576)>0)
THEN
821 IF(lvls(ifd,iget(576))>0) itypefdlvl(ifd)=2
823 IF (iget(061)>0)
THEN
824 IF (lvls(ifd,iget(061))>1) itypefdlvl(ifd)=2
826 IF (iget(577)>0)
then
827 if(lvls(ifd,iget(577))>0) itypefdlvl(ifd)=2
829 IF (iget(451)>0)
THEN
830 IF (lvls(ifd,iget(451))>1) itypefdlvl(ifd)=2
832 IF (iget(578)>0)
then
833 if(lvls(ifd,iget(578))>0) itypefdlvl(ifd)=2
836 IF (iget(580)>0)
then
837 if(lvls(ifd,iget(580))>1) itypefdlvl(ifd)=2
839 IF (iget(587)>0)
then
840 if(lvls(ifd,iget(587))>0) itypefdlvl(ifd)=2
847 CALL fdlvl(itypefdlvl,t7d,q7d,u7d,v6d,p7d,icingfd)
849 loop_10:
DO ifd = 1,nfd
855 work1 = lvls(ifd,iget1)
860 work2 = lvls(ifd,iget2)
864 IF (iget1 > 0 .or. iget2 > 0)
THEN
865 IF (work1 > 0 .or. work2 > 0)
THEN
870 grid1(i,j) = t7d(i,j,ifd)
874 if(grib ==
'grib2')
then
876 fld_info(cfld)%ifld = iavblfld(iget1)
877 fld_info(cfld)%lvl = lvlsxml(ifd,iget1)
883 datapd(i,j,cfld) = grid1(ii,jj)
889 if(grib ==
'grib2')
then
891 fld_info(cfld)%ifld = iavblfld(iget2)
892 fld_info(cfld)%lvl = lvlsxml(ifd,iget2)
898 datapd(i,j,cfld) = grid1(ii,jj)
907 IF (iget(911)>0)
THEN
908 IF (lvls(ifd,iget(911))>0)
THEN
911 if ( t7d(i,j,ifd) > 600 )
then
914 grid1(i,j)=t7d(i,j,ifd)*(1.+0.608*q7d(i,j,ifd))
919 IF(lvls(ifd,iget(911))>0)
then
920 if(grib==
'grib2')
then
922 fld_info(cfld)%ifld=iavblfld(iget(911))
923 fld_info(cfld)%lvl=lvlsxml(ifd,iget(911))
924 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
935 work1 = lvls(ifd,iget1)
940 work2 = lvls(ifd,iget2)
944 IF (iget1 > 0 .or. iget2 > 0)
THEN
945 IF (work1 > 0 .or. work2 > 0)
THEN
949 grid1(i,j) = q7d(i,j,ifd)
953 if(grib ==
'grib2')
then
955 fld_info(cfld)%ifld = iavblfld(iget1)
956 fld_info(cfld)%lvl = lvlsxml(ifd,iget1)
962 datapd(i,j,cfld) = grid1(ii,jj)
968 if(grib ==
'grib2')
then
970 fld_info(cfld)%ifld = iavblfld(iget2)
971 fld_info(cfld)%lvl = lvlsxml(ifd,iget2)
977 datapd(i,j,cfld) = grid1(ii,jj)
989 work1 = lvls(ifd,iget1)
994 work2 = lvls(ifd,iget2)
998 IF (iget1 > 0 .or. iget2 > 0)
THEN
999 IF (work1 > 0 .or. work2 > 0)
THEN
1003 grid1(i,j) = p7d(i,j,ifd)
1007 if(grib ==
'grib2')
then
1009 fld_info(cfld)%ifld = iavblfld(iget1)
1010 fld_info(cfld)%lvl = lvlsxml(ifd,iget1)
1016 datapd(i,j,cfld) = grid1(ii,jj)
1022 if(grib ==
'grib2')
then
1024 fld_info(cfld)%ifld = iavblfld(iget2)
1025 fld_info(cfld)%lvl = lvlsxml(ifd,iget2)
1031 datapd(i,j,cfld) = grid1(ii,jj)
1043 work1 = lvls(ifd,iget1)
1048 work2 = lvls(ifd,iget2)
1052 IF (iget1 > 0 .or. iget2 > 0)
THEN
1053 IF (work1 > 0 .or. work2 > 0)
THEN
1057 grid1(i,j) = icingfd(i,j,ifd)
1061 if(grib ==
'grib2')
then
1063 fld_info(cfld)%ifld = iavblfld(iget1)
1064 fld_info(cfld)%lvl = lvlsxml(ifd,iget1)
1070 datapd(i,j,cfld) = grid1(ii,jj)
1076 if(grib ==
'grib2')
then
1078 fld_info(cfld)%ifld = iavblfld(iget2)
1079 fld_info(cfld)%lvl = lvlsxml(ifd,iget2)
1085 datapd(i,j,cfld) = grid1(ii,jj)
1098 IF ((iget(060)>0).OR.(iget(061)>0))
THEN
1102 grid1(i,j)=u7d(i,j,ifd)
1103 grid2(i,j)=v6d(i,j,ifd)
1106 IF (iget(060)>0)
THEN
1107 IF (lvls(ifd,iget(060))>0)
then
1108 if(grib==
'grib2')
then
1110 fld_info(cfld)%ifld=iavblfld(iget(060))
1111 fld_info(cfld)%lvl=lvlsxml(ifd,iget(060))
1117 datapd(i,j,cfld) = grid1(ii,jj)
1123 IF (iget(061)>0)
THEN
1124 IF (lvls(ifd,iget(061))>0)
THEN
1125 if(grib==
'grib2')
then
1127 fld_info(cfld)%ifld=iavblfld(iget(061))
1128 fld_info(cfld)%lvl=lvlsxml(ifd,iget(061))
1134 datapd(i,j,cfld) = grid2(ii,jj)
1143 IF ((iget(576)>0).OR.(iget(577)>0))
THEN
1147 grid1(i,j) = u7d(i,j,ifd)
1148 grid2(i,j) = v6d(i,j,ifd)
1151 IF (iget(576)>0)
THEN
1152 IF (lvls(ifd,iget(576))>0)
then
1153 if(grib==
'grib2')
then
1155 fld_info(cfld)%ifld=iavblfld(iget(576))
1156 fld_info(cfld)%lvl=lvlsxml(ifd,iget(576))
1162 datapd(i,j,cfld) = grid1(ii,jj)
1168 IF (iget(577)>0)
THEN
1169 IF (lvls(ifd,iget(577))>0)
THEN
1170 if(grib==
'grib2')
then
1172 fld_info(cfld)%ifld=iavblfld(iget(577))
1173 fld_info(cfld)%lvl=lvlsxml(ifd,iget(577))
1179 datapd(i,j,cfld) = grid2(ii,jj)
1188 DEALLOCATE(t7d,q7d,u7d,v6d,p7d,icingfd)
1194 IF(iget(467)>0.or.iget(468)>0.or.iget(469)>0)
THEN
1195 if(iget(467)>0)
THEN
1196 n=iavblfld(iget(467))
1197 nfdctl=
size(pset%param(n)%level)
1198 if(
allocated(itypefdlvlctl))
deallocate(itypefdlvlctl)
1199 allocate(itypefdlvlctl(nfdctl))
1201 itypefdlvlctl(ifd)=lvls(ifd,iget(467))
1203 if(
allocated(htfdctl))
deallocate(htfdctl)
1204 allocate(htfdctl(nfdctl))
1205 htfdctl=pset%param(n)%level
1207 allocate(gtgfd(ista:iend,jsta:jend,nfdctl))
1208 call fdlvl_mass(itypefdlvlctl,nfdctl,htfdctl,gtg,gtgfd)
1214 if(nint(htfdctl(ifd)) == 0)
then
1222 work1=gtgfd(i,j,ifd)
1223 if(gtgfd(i,j,n)>=spval)
then
1225 elseif(work1<spval)
then
1226 if(gtgfd(i,j,n)<work1) gtgfd(i,j,n)=work1
1233 IF (lvls(ifd,iget(467))>0)
THEN
1237 grid1(i,j)=gtgfd(i,j,ifd)
1240 if(grib==
'grib2')
then
1242 fld_info(cfld)%ifld=iavblfld(iget(467))
1243 fld_info(cfld)%lvl=lvlsxml(ifd,iget(467))
1249 datapd(i,j,cfld) = grid1(ii,jj)
1257 if(iget(468)>0)
THEN
1258 n=iavblfld(iget(468))
1259 nfdctl=
size(pset%param(n)%level)
1260 if(
allocated(itypefdlvlctl))
deallocate(itypefdlvlctl)
1261 allocate(itypefdlvlctl(nfdctl))
1263 itypefdlvlctl(ifd)=lvls(ifd,iget(468))
1265 if(
allocated(htfdctl))
deallocate(htfdctl)
1266 allocate(htfdctl(nfdctl))
1267 htfdctl=pset%param(n)%level
1268 allocate(catfd(ista:iend,jsta:jend,nfdctl))
1269 call fdlvl_mass(itypefdlvlctl,nfdctl,htfdctl,catedr,catfd)
1271 IF (lvls(ifd,iget(468))>0)
THEN
1275 grid1(i,j)=catfd(i,j,ifd)
1278 if(grib==
'grib2')
then
1280 fld_info(cfld)%ifld=iavblfld(iget(468))
1281 fld_info(cfld)%lvl=lvlsxml(ifd,iget(468))
1287 datapd(i,j,cfld) = grid1(ii,jj)
1295 if(iget(469)>0)
THEN
1296 n=iavblfld(iget(469))
1297 nfdctl=
size(pset%param(n)%level)
1298 if(
allocated(itypefdlvlctl))
deallocate(itypefdlvlctl)
1299 allocate(itypefdlvlctl(nfdctl))
1301 itypefdlvlctl(ifd)=lvls(ifd,iget(469))
1303 if(
allocated(htfdctl))
deallocate(htfdctl)
1304 allocate(htfdctl(nfdctl))
1305 htfdctl=pset%param(n)%level
1306 allocate(mwtfd(ista:iend,jsta:jend,nfdctl))
1307 call fdlvl_mass(itypefdlvlctl,nfdctl,htfdctl,mwt,mwtfd)
1309 IF (lvls(ifd,iget(469))>0)
THEN
1313 grid1(i,j)=mwtfd(i,j,ifd)
1316 if(grib==
'grib2')
then
1318 fld_info(cfld)%ifld=iavblfld(iget(469))
1319 fld_info(cfld)%lvl=lvlsxml(ifd,iget(469))
1325 datapd(i,j,cfld) = grid1(ii,jj)
1333 if(
allocated(gtgfd))
deallocate(gtgfd)
1334 if(
allocated(catfd))
deallocate(catfd)
1335 if(
allocated(mwtfd))
deallocate(mwtfd)
1337 if(
allocated(itypefdlvlctl))
deallocate(itypefdlvlctl)
1338 if(
allocated(htfdctl))
deallocate(htfdctl)
1345 IF ( (iget(062)>0).OR.(iget(063)>0) )
THEN
1346 CALL frzlvl(z1d,rh1d,p1d)
1349 IF (iget(062)>0)
THEN
1354 IF (submodelname ==
'RTMA')
THEN
1355 freezelvl(i,j)=grid1(i,j)
1359 CALL bound (grid1,d00,h99999)
1360 if(grib==
'grib2')
then
1362 fld_info(cfld)%ifld=iavblfld(iget(062))
1368 datapd(i,j,cfld) = grid1(ii,jj)
1375 IF (iget(063)>0)
THEN
1379 grid1(i,j) = rh1d(i,j)
1382 CALL sclfld(grid1(ista:iend,jsta:jend),h100,im,jm)
1383 CALL bound(grid1,h1,h100)
1384 if(grib==
'grib2')
then
1386 fld_info(cfld)%ifld=iavblfld(iget(063))
1392 datapd(i,j,cfld) = grid1(ii,jj)
1399 IF (iget(753)>0)
THEN
1403 grid1(i,j) = p1d(i,j)
1406 if(grib==
'grib2')
then
1408 fld_info(cfld)%ifld=iavblfld(iget(753))
1414 datapd(i,j,cfld) = grid1(ii,jj)
1422 IF (iget(165)>0 .OR. iget(350)>0.OR. iget(756)>0)
THEN
1423 CALL frzlvl2(tfrz,z1d,rh1d,p1d)
1426 IF (iget(165)>0)
THEN
1433 CALL bound (grid1,d00,h99999)
1434 if(grib==
'grib2')
then
1436 fld_info(cfld)%ifld=iavblfld(iget(165))
1442 datapd(i,j,cfld) = grid1(ii,jj)
1449 IF (iget(350)>0)
THEN
1454 IF(rh1d(i,j) < spval) grid1(i,j)=rh1d(i,j)*100.
1457 CALL bound (grid1,h1,h100)
1458 if(grib==
'grib2')
then
1460 fld_info(cfld)%ifld=iavblfld(iget(350))
1466 datapd(i,j,cfld) = grid1(ii,jj)
1473 IF (iget(756)>0)
THEN
1477 grid1(i,j) = p1d(i,j)
1480 if(grib==
'grib2')
then
1482 fld_info(cfld)%ifld=iavblfld(iget(756))
1488 datapd(i,j,cfld) = grid1(ii,jj)
1498 IF (iget(776)>0 .OR. iget(777)>0.OR. iget(778)>0)
THEN
1499 CALL frzlvl2(263.15,z1d,rh1d,p1d)
1502 IF (iget(776)>0)
THEN
1509 CALL bound (grid1,d00,h99999)
1510 if(grib==
'grib2')
then
1512 fld_info(cfld)%ifld=iavblfld(iget(776))
1518 datapd(i,j,cfld) = grid1(ii,jj)
1525 IF (iget(777)>0)
THEN
1530 IF(rh1d(i,j) < spval) grid1(i,j)=rh1d(i,j)*100.
1533 CALL bound (grid1,h1,h100)
1534 if(grib==
'grib2')
then
1536 fld_info(cfld)%ifld=iavblfld(iget(777))
1542 datapd(i,j,cfld) = grid1(ii,jj)
1549 IF (iget(778)>0)
THEN
1556 if(grib==
'grib2')
then
1558 fld_info(cfld)%ifld=iavblfld(iget(778))
1564 datapd(i,j,cfld) = grid1(ii,jj)
1574 IF (iget(779)>0 .OR. iget(780)>0.OR. iget(781)>0)
THEN
1575 CALL frzlvl2(253.15,z1d,rh1d,p1d)
1578 IF (iget(779)>0)
THEN
1585 CALL bound (grid1,d00,h99999)
1586 if(grib==
'grib2')
then
1588 fld_info(cfld)%ifld=iavblfld(iget(779))
1594 datapd(i,j,cfld) = grid1(ii,jj)
1601 IF (iget(780)>0)
THEN
1606 IF(rh1d(i,j) < spval) grid1(i,j)=rh1d(i,j)*100.
1609 CALL bound (grid1,h1,h100)
1610 if(grib==
'grib2')
then
1612 fld_info(cfld)%ifld=iavblfld(iget(780))
1618 datapd(i,j,cfld) = grid1(ii,jj)
1625 IF (iget(781)>0)
THEN
1632 if(grib==
'grib2')
then
1634 fld_info(cfld)%ifld=iavblfld(iget(781))
1640 datapd(i,j,cfld) = grid1(ii,jj)
1648 allocate(pbnd(ista:iend,jsta:jend,nbnd), tbnd(ista:iend,jsta:jend,nbnd), &
1649 qbnd(ista:iend,jsta:jend,nbnd), ubnd(ista:iend,jsta:jend,nbnd), &
1650 vbnd(ista:iend,jsta:jend,nbnd), rhbnd(ista:iend,jsta:jend,nbnd), &
1651 wbnd(ista:iend,jsta:jend,nbnd))
1656 IF ( (iget(067)>0).OR.(iget(068)>0).OR. &
1657 (iget(069)>0).OR.(iget(070)>0).OR. &
1658 (iget(071)>0).OR.(iget(072)>0).OR. &
1659 (iget(073)>0).OR.(iget(074)>0).OR. &
1660 (iget(088)>0).OR.(iget(089)>0).OR. &
1661 (iget(090)>0).OR.(iget(075)>0).OR. &
1662 (iget(109)>0).OR.(iget(110)>0).OR. &
1663 (iget(031)>0).OR.(iget(032)>0).OR. &
1664 (iget(573)>0).OR. need_ifi .OR. &
1665 (iget(107)>0).OR.(iget(091)>0).OR. &
1666 (iget(092)>0).OR.(iget(093)>0).OR. &
1667 (iget(094)>0).OR.(iget(095)>0).OR. &
1668 (iget(096)>0).OR.(iget(097)>0).OR. &
1669 (iget(098)>0).OR.(iget(221)>0) )
THEN
1671 call allocate_cape_arrays
1673 CALL bndlyr(pbnd,tbnd,qbnd,rhbnd,ubnd,vbnd, &
1674 wbnd,omgbnd,pwtbnd,qcnvbnd,lvlbnd)
1685 boundary_layer_loop:
DO lbnd = 1,nbnd
1688 IF (iget(067)>0)
THEN
1689 IF (lvls(lbnd,iget(067))>0)
THEN
1693 grid1(i,j) = pbnd(i,j,lbnd)
1696 if(grib==
'grib2')
then
1698 fld_info(cfld)%ifld=iavblfld(iget(067))
1699 fld_info(cfld)%lvl=lvlsxml(lbnd,iget(067))
1705 datapd(i,j,cfld) = grid1(ii,jj)
1713 IF (iget(068)>0)
THEN
1714 IF (lvls(lbnd,iget(068))>0)
THEN
1718 grid1(i,j)=tbnd(i,j,lbnd)
1721 if(grib==
'grib2')
then
1723 fld_info(cfld)%ifld=iavblfld(iget(068))
1724 fld_info(cfld)%lvl=lvlsxml(lbnd,iget(068))
1730 datapd(i,j,cfld) = grid1(ii,jj)
1738 IF (iget(069)>0)
THEN
1739 IF (lvls(lbnd,iget(069))>0)
THEN
1740 CALL calpot(pbnd(ista,jsta,lbnd),tbnd(ista,jsta,lbnd),grid1(ista:iend,jsta:jend))
1741 if(grib==
'grib2')
then
1743 fld_info(cfld)%ifld=iavblfld(iget(069))
1744 fld_info(cfld)%lvl=lvlsxml(ifd,iget(069))
1750 datapd(i,j,cfld) = grid1(ii,jj)
1758 IF (iget(072)>0)
THEN
1759 IF (lvls(lbnd,iget(072))>0)
THEN
1763 grid1(i,j)=rhbnd(i,j,lbnd)
1766 CALL sclfld(grid1(ista:iend,jsta:jend),h100,im,jm)
1767 CALL bound(grid1,h1,h100)
1768 if(grib==
'grib2')
then
1770 fld_info(cfld)%lvl=lvlsxml(lbnd,iget(072))
1771 fld_info(cfld)%ifld=iavblfld(iget(072))
1777 datapd(i,j,cfld) = grid1(ii,jj)
1785 IF (iget(070)>0)
THEN
1786 IF (lvls(lbnd,iget(070))>0)
THEN
1787 CALL caldwp(pbnd(ista:iend,jsta:jend,lbnd), qbnd(ista:iend,jsta:jend,lbnd), &
1788 grid1(ista:iend,jsta:jend), tbnd(ista:iend,jsta:jend,lbnd))
1789 if(grib==
'grib2')
then
1791 fld_info(cfld)%ifld=iavblfld(iget(070))
1792 fld_info(cfld)%lvl=lvlsxml(lbnd,iget(070))
1798 datapd(i,j,cfld) = grid1(ii,jj)
1806 IF (iget(071)>0)
THEN
1807 IF (lvls(lbnd,iget(071))>0)
THEN
1811 grid1(i,j)=qbnd(i,j,lbnd)
1814 CALL bound(grid1,h1m12,h99999)
1815 if(grib==
'grib2')
then
1817 fld_info(cfld)%ifld=iavblfld(iget(071))
1818 fld_info(cfld)%lvl=lvlsxml(lbnd,iget(071))
1824 datapd(i,j,cfld) = grid1(ii,jj)
1832 IF (iget(088)>0)
THEN
1833 IF (lvls(lbnd,iget(088))>0)
THEN
1837 grid1(i,j) = qcnvbnd(i,j,lbnd)
1840 if(grib==
'grib2')
then
1842 fld_info(cfld)%ifld=iavblfld(iget(088))
1843 fld_info(cfld)%lvl=lvlsxml(lbnd,iget(088))
1849 datapd(i,j,cfld) = grid1(ii,jj)
1862 IF(lvls(lbnd,iget(073))>0)field1=.true.
1865 IF(lvls(lbnd,iget(074))>0)field2=.true.
1868 IF(field1.OR.field2)
THEN
1872 grid1(i,j) = ubnd(i,j,lbnd)
1873 grid2(i,j) = vbnd(i,j,lbnd)
1877 IF (iget(073)>0)
THEN
1878 IF (lvls(lbnd,iget(073))>0)
then
1879 if(grib==
'grib2')
then
1881 fld_info(cfld)%ifld=iavblfld(iget(073))
1882 fld_info(cfld)%lvl=lvlsxml(lbnd,iget(073))
1888 datapd(i,j,cfld) = grid1(ii,jj)
1894 IF (iget(074)>0)
THEN
1895 IF (lvls(lbnd,iget(074))>0)
THEN
1896 if(grib==
'grib2')
then
1898 fld_info(cfld)%ifld=iavblfld(iget(074))
1899 fld_info(cfld)%lvl=lvlsxml(lbnd,iget(074))
1905 datapd(i,j,cfld) = grid2(ii,jj)
1914 IF (iget(090)>0)
THEN
1915 IF (lvls(lbnd,iget(090))>0)
THEN
1919 grid1(i,j) = omgbnd(i,j,lbnd)
1922 if(grib==
'grib2')
then
1924 fld_info(cfld)%ifld=iavblfld(iget(090))
1925 fld_info(cfld)%lvl=lvlsxml(lbnd,iget(090))
1931 datapd(i,j,cfld) = grid1(ii,jj)
1939 IF (iget(089)>0)
THEN
1940 IF (lvls(lbnd,iget(089))>0)
THEN
1944 grid1(i,j) = pwtbnd(i,j,lbnd)
1947 CALL bound(grid1,d00,h99999)
1948 if(grib==
'grib2')
then
1950 fld_info(cfld)%ifld=iavblfld(iget(089))
1951 fld_info(cfld)%lvl=lvlsxml(lbnd,iget(089))
1957 datapd(i,j,cfld) = grid1(ii,jj)
1965 IF (iget(075)>0 .OR. iget(031)>0 .OR. iget(573)>0)
THEN
1966 CALL otlft(pbnd(ista,jsta,lbnd),tbnd(ista,jsta,lbnd), &
1967 qbnd(ista,jsta,lbnd),grid1(ista:iend,jsta:jend))
1969 IF (lvls(lbnd,iget(075))>0)
THEN
1970 if(grib==
'grib2')
then
1972 fld_info(cfld)%ifld=iavblfld(iget(075))
1973 fld_info(cfld)%lvl=lvlsxml(lbnd,iget(075))
1979 datapd(i,j,cfld) = grid1(ii,jj)
1985 IF(iget(031)>0 .or. iget(573)>0)
THEN
1989 egrid2(i,j) = min(egrid2(i,j),grid1(i,j))
1996 END DO boundary_layer_loop
1997 deallocate(omgbnd,pwtbnd,qcnvbnd)
2001 IF (iget(031)>0 .OR. iget(573)>0 )
THEN
2021 grid1(i,j)=egrid2(i,j)
2026 if (iget(031)>0)
then
2027 if(grib==
'grib2')
then
2029 fld_info(cfld)%ifld=iavblfld(iget(031))
2030 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
2034 if(iget(573)> 0 )
THEN
2035 if(grib==
'grib2')
then
2037 fld_info(cfld)%ifld=iavblfld(iget(573))
2043 datapd(i,j,cfld) = grid1(ii,jj)
2057 IF(lvls(2,iget(032))>0)field1=.true.
2060 IF(lvls(2,iget(107))>0)field2=.true.
2075 IF(field1.OR.field2.OR.need_ifi)
THEN
2077 call allocate_cape_arrays
2082 egrid1(i,j) = -h99999
2083 egrid2(i,j) = -h99999
2087 loop_80:
DO lbnd = 1,nbnd
2088 CALL calthte(pbnd(ista,jsta,lbnd),tbnd(ista,jsta,lbnd), &
2089 qbnd(ista,jsta,lbnd),egrid1)
2093 IF (egrid1(i,j) > egrid2(i,j))
THEN
2094 egrid2(i,j) = egrid1(i,j)
2095 lb2(i,j) = lvlbnd(i,j,lbnd)
2096 p1d(i,j) = pbnd(i,j,lbnd)
2097 t1d(i,j) = tbnd(i,j,lbnd)
2098 q1d(i,j) = qbnd(i,j,lbnd)
2105 CALL calcape(itype,dpbnd,p1d,t1d,q1d,lb2,egrid1, &
2106 egrid2,egrid3,egrid4,egrid5)
2109 IF(iget(566)>0 .or. need_ifi)
THEN
2114 IF(t1d(i,j) < spval) grid1(i,j) = egrid1(i,j)
2117 CALL bound(grid1,d00,h99999)
2121 cape(i,j) = grid1(i,j)
2126 IF (iget(566)>0)
THEN
2127 if(grib==
'grib2')
then
2129 fld_info(cfld)%ifld=iavblfld(iget(566))
2130 fld_info(cfld)%lvl=lvlsxml(1,iget(566))
2136 datapd(i,j,cfld) = cape(ii,jj)
2142 IF (iget(567) > 0 .or. need_ifi)
THEN
2148 IF(t1d(i,j) < spval) grid1(i,j) = - egrid2(i,j)
2152 CALL bound(grid1,d00,h99999)
2157 IF(t1d(i,j) < spval) grid1(i,j) = - grid1(i,j)
2158 cin(i,j) = grid1(i,j)
2163 IF(iget(567) > 0)
THEN
2164 if(grib==
'grib2')
then
2166 fld_info(cfld)%ifld=iavblfld(iget(567))
2167 fld_info(cfld)%lvl=lvlsxml(1,iget(567))
2173 datapd(i,j,cfld) = cin(ii,jj)
2182 IF(iget(221) > 0)
THEN
2186 grid1(i,j) = pblh(i,j)
2189 if(grib==
'grib2')
then
2191 fld_info(cfld)%ifld=iavblfld(iget(221))
2197 datapd(i,j,cfld) = grid1(ii,jj)
2205 IF ( (iget(109)>0).OR.(iget(110)>0) )
THEN
2206 CALL callcl(pbnd(ista,jsta,1),tbnd(ista,jsta,1), &
2207 qbnd(ista,jsta,1),egrid1,egrid2)
2208 IF (iget(109)>0)
THEN
2213 IF(tbnd(i,j,1) < spval) grid1(i,j) = egrid2(i,j)
2216 if(grib==
'grib2')
then
2218 fld_info(cfld)%ifld=iavblfld(iget(109))
2224 datapd(i,j,cfld) = grid1(ii,jj)
2229 IF (iget(110)>0)
THEN
2234 IF(tbnd(i,j,1) < spval) grid1(i,j) = egrid1(i,j)
2237 if(grib==
'grib2')
then
2239 fld_info(cfld)%ifld=iavblfld(iget(110))
2245 datapd(i,j,cfld) = grid1(ii,jj)
2254 IF ( (iget(091)>0).OR.(iget(092)>0).OR. &
2255 (iget(093)>0).OR.(iget(094)>0).OR. &
2256 (iget(095)>0).OR.(iget(095)>0).OR. &
2257 (iget(096)>0).OR.(iget(097)>0).OR. &
2258 (iget(098)>0) )
THEN
2260 allocate(t78483(ista:iend,jsta:jend), t89671(ista:iend,jsta:jend), &
2261 p78483(ista:iend,jsta:jend), p89671(ista:iend,jsta:jend))
2265 IF (iget(097)>0.OR.iget(098)>0)
THEN
2269 p78483(i,j) = log(pint(i,j,nint(lmh(i,j)))*0.78483)
2270 p89671(i,j) = log(pint(i,j,nint(lmh(i,j)))*0.89671)
2279 pkl1=0.5*(alpint(i,j,l)+alpint(i,j,l+1))
2280 pku1=0.5*(alpint(i,j,l)+alpint(i,j,l-1))
2283 IF(p78483(i,j) < pkl1.AND.p78483(i,j) > pku1)
THEN
2284 fac1 = (pkl1-p78483(i,j))/(pkl1-pku1)
2285 fac2 = (p78483(i,j)-pku1)/(pkl1-pku1)
2286 t78483(i,j) = t(i,j,l)*fac2 + t(i,j,l-1)*fac1
2289 IF(p89671(i,j) < pkl1.AND.p89671(i,j) > pku1)
THEN
2290 fac1 = (pkl1-p89671(i,j))/(pkl1-pku1)
2291 fac2 = (p89671(i,j)-pku1)/(pkl1-pku1)
2292 t89671(i,j) = t(i,j,l)*fac2 + t(i,j,l-1)*fac1
2303 IF(.NOT. done(i,j))
THEN
2305 tl = 0.5*(t(i,j,lm-2)+t(i,j,lm-1))
2306 ql = 0.5*(q(i,j,lm-2)+q(i,j,lm-1))
2307 qsat = pq0/pl *exp(a2*(tl-a3)/(tl-a4))
2325 t89671(i,j) = tl * (p89671(i,j)/pl)**rgamog
2338 IF(.NOT. done1(i,j))
THEN
2340 tl = 0.5*(t(i,j,lm-2)+t(i,j,lm-1))
2341 ql = 0.5*(q(i,j,lm-2)+q(i,j,lm-1))
2342 qsat = pq0/pl *exp(a2*(tl-a3)/(tl-a4))
2360 t78483(i,j) = tl * (p78483(i,j)/pl)**rgamog
2368 IF (iget(097) > 0)
THEN
2373 IF(t(i,j,lm) < spval) grid1(i,j) = t89671(i,j)
2378 if(grib==
'grib2')
then
2380 fld_info(cfld)%ifld=iavblfld(iget(097))
2381 fld_info(cfld)%lvl=lvlsxml(1,iget(097))
2387 datapd(i,j,cfld) = grid1(ii,jj)
2394 IF (iget(098)>0)
THEN
2399 IF(t(i,j,lm) < spval) grid1(i,j) = t78483(i,j)
2402 if(grib==
'grib2')
then
2404 fld_info(cfld)%ifld=iavblfld(iget(098))
2405 fld_info(cfld)%lvl=lvlsxml(1,iget(098))
2411 datapd(i,j,cfld) = grid1(ii,jj)
2416 deallocate(t78483, t89671, p78483, p89671)
2423 IF ( (iget(091)>0).OR.(iget(092)>0).OR. &
2424 (iget(093)>0).OR.(iget(094)>0).OR. &
2425 (iget(095)>0).OR.(iget(095)>0).OR. &
2426 (iget(096)>0) )
THEN
2430 IF (iget(091)>0)
THEN
2434 grid1(i,j) = pbnd(i,j,1)
2437 if(grib==
'grib2')
then
2439 fld_info(cfld)%ifld=iavblfld(iget(091))
2445 datapd(i,j,cfld) = grid1(ii,jj)
2452 IF (iget(092)>0)
THEN
2456 grid1(i,j) = tbnd(i,j,1)
2459 if(grib==
'grib2')
then
2461 fld_info(cfld)%ifld=iavblfld(iget(092))
2462 fld_info(cfld)%lvl=lvlsxml(1,iget(092))
2468 datapd(i,j,cfld) = grid1(ii,jj)
2475 IF (iget(093)>0)
THEN
2479 grid1(i,j) = qbnd(i,j,1)
2482 CALL bound(grid1,h1m12,h99999)
2483 if(grib==
'grib2')
then
2485 fld_info(cfld)%ifld=iavblfld(iget(093))
2486 fld_info(cfld)%lvl=lvlsxml(1,iget(093))
2492 datapd(i,j,cfld) = grid1(ii,jj)
2499 IF (iget(094)>0)
THEN
2503 grid1(i,j) = rhbnd(i,j,1)
2506 CALL sclfld(grid1(ista:iend,jsta:jend),h100,im,jm)
2507 CALL bound(grid1,h1,h100)
2508 if(grib==
'grib2')
then
2510 fld_info(cfld)%ifld=iavblfld(iget(094))
2511 fld_info(cfld)%lvl=lvlsxml(1,iget(094))
2517 datapd(i,j,cfld) = grid1(ii,jj)
2524 IF ((iget(095)>0).OR.(iget(096)>0))
THEN
2528 grid1(i,j) = ubnd(i,j,1)
2529 grid2(i,j) = vbnd(i,j,1)
2532 IF (iget(095)>0)
then
2533 if(grib==
'grib2')
then
2535 fld_info(cfld)%ifld=iavblfld(iget(095))
2536 fld_info(cfld)%lvl=lvlsxml(1,iget(095))
2542 datapd(i,j,cfld) = grid1(ii,jj)
2547 IF (iget(096)>0)
then
2548 if(grib==
'grib2')
then
2550 fld_info(cfld)%ifld=iavblfld(iget(096))
2551 fld_info(cfld)%lvl=lvlsxml(1,iget(096))
2557 datapd(i,j,cfld) = grid2(ii,jj)
2573 IF ( (iget(066)>0).OR.(iget(081)>0).OR. &
2574 (iget(082)>0).OR.(iget(104)>0).OR. &
2575 (iget(099)>0).OR.(iget(100)>0).OR. &
2576 (iget(101)>0).OR.(iget(102)>0).OR. &
2577 (iget(103)>0) )
THEN
2581 IF ( (iget(066)>0).OR.(iget(081)>0).OR. &
2582 (iget(082)>0).OR.(iget(104)>0) )
THEN
2583 allocate(rh3310(ista:iend,jsta:jend),rh6610(ista:iend,jsta:jend), &
2584 rh3366(ista:iend,jsta:jend),pw3310(ista:iend,jsta:jend))
2585 CALL lfmfld(rh3310,rh6610,rh3366,pw3310)
2588 IF (iget(066)>0)
THEN
2592 grid1(i,j) = rh3310(i,j)
2595 CALL sclfld(grid1(ista:iend,jsta:jend),h100,im,jm)
2596 CALL bound(grid1,h1,h100)
2597 if(grib==
'grib2')
then
2599 fld_info(cfld)%ifld=iavblfld(iget(066))
2600 fld_info(cfld)%lvl=lvlsxml(1,iget(066))
2606 datapd(i,j,cfld) = grid1(ii,jj)
2615 IF (iget(081)>0)
THEN
2619 grid1(i,j) = rh6610(i,j)
2622 CALL sclfld(grid1(ista:iend,jsta:jend),h100,im,jm)
2623 CALL bound(grid1,h1,h100)
2624 if(grib==
'grib2')
then
2626 fld_info(cfld)%ifld=iavblfld(iget(081))
2627 fld_info(cfld)%lvl=lvlsxml(1,iget(081))
2633 datapd(i,j,cfld) = grid1(ii,jj)
2640 IF (iget(082)>0)
THEN
2644 grid1(i,j) = rh3366(i,j)
2647 CALL sclfld(grid1(ista:iend,jsta:jend),h100,im,jm)
2648 CALL bound(grid1,h1,h100)
2649 if(grib==
'grib2')
then
2651 fld_info(cfld)%ifld=iavblfld(iget(082))
2652 fld_info(cfld)%lvl=lvlsxml(1,iget(082))
2658 datapd(i,j,cfld) = grid1(ii,jj)
2665 IF (iget(104)>0)
THEN
2669 grid1(i,j) = pw3310(i,j)
2672 CALL bound(grid1,d00,h99999)
2673 if(grib==
'grib2')
then
2675 fld_info(cfld)%ifld=iavblfld(iget(104))
2676 fld_info(cfld)%lvl=lvlsxml(1,iget(104))
2682 datapd(i,j,cfld) = grid1(ii,jj)
2687 deallocate(rh3310,rh6610,rh3366,pw3310)
2692 IF ( (iget(099)>0).OR.(iget(100)>0).OR. &
2693 (iget(101)>0).OR.(iget(102)>0).OR. &
2694 (iget(103)>0) )
THEN
2695 allocate(rh4710(ista_2l:iend_2u,jsta_2l:jend_2u),rh4796(ista_2l:iend_2u,jsta_2l:jend_2u), &
2696 rh1847(ista_2l:iend_2u,jsta_2l:jend_2u))
2697 allocate(rh8498(ista_2l:iend_2u,jsta_2l:jend_2u),qm8510(ista_2l:iend_2u,jsta_2l:jend_2u))
2699 CALL ngmfld(rh4710,rh4796,rh1847,rh8498,qm8510)
2702 IF (iget(099)>0)
THEN
2706 grid1(i,j) = rh4710(i,j)
2709 CALL sclfld(grid1(ista:iend,jsta:jend),h100,im,jm)
2710 CALL bound(grid1,h1,h100)
2711 if(grib==
'grib2')
then
2713 fld_info(cfld)%ifld=iavblfld(iget(099))
2714 fld_info(cfld)%lvl=lvlsxml(1,iget(099))
2720 datapd(i,j,cfld) = grid1(ii,jj)
2727 IF (iget(100)>0)
THEN
2731 grid1(i,j) = rh4796(i,j)
2734 CALL sclfld(grid1(ista:iend,jsta:jend),h100,im,jm)
2735 CALL bound(grid1,h1,h100)
2736 if(grib==
'grib2')
then
2738 fld_info(cfld)%ifld=iavblfld(iget(100))
2739 fld_info(cfld)%lvl=lvlsxml(1,iget(100))
2745 datapd(i,j,cfld) = grid1(ii,jj)
2752 IF (iget(101)>0)
THEN
2756 grid1(i,j) = rh1847(i,j)
2759 CALL sclfld(grid1(ista:iend,jsta:jend),h100,im,jm)
2760 CALL bound(grid1,h1,h100)
2761 if(grib==
'grib2')
then
2763 fld_info(cfld)%ifld=iavblfld(iget(101))
2764 fld_info(cfld)%lvl=lvlsxml(1,iget(101))
2770 datapd(i,j,cfld) = grid1(ii,jj)
2777 IF (iget(102)>0)
THEN
2781 grid1(i,j) = rh8498(i,j)
2784 CALL sclfld(grid1(ista:iend,jsta:jend),h100,im,jm)
2785 CALL bound(grid1,h1,h100)
2786 if(grib==
'grib2')
then
2788 fld_info(cfld)%ifld=iavblfld(iget(102))
2789 fld_info(cfld)%lvl=lvlsxml(1,iget(102))
2795 datapd(i,j,cfld) = grid1(ii,jj)
2802 IF (iget(103)>0)
THEN
2808 IF(qm8510(i,j) < spval) grid1(i,j) = -1.0*qm8510(i,j)
2811 if(grib==
'grib2')
then
2813 fld_info(cfld)%ifld=iavblfld(iget(103))
2814 fld_info(cfld)%lvl=lvlsxml(1,iget(103))
2820 datapd(i,j,cfld) = grid1(ii,jj)
2825 deallocate(rh4710,rh4796,rh1847)
2826 deallocate(rh8498,qm8510)
2830 IF ( (iget(318)>0).OR.(iget(319)>0).OR. &
2832 allocate(rh4410(ista:iend,jsta:jend),rh7294(ista:iend,jsta:jend), &
2833 rh4472(ista:iend,jsta:jend),rh3310(ista:iend,jsta:jend))
2837 IF (iget(318)>0)
THEN
2842 IF(rh4410(i,j) < spval) grid1(i,j) = rh4410(i,j)*100.
2845 CALL bound(grid1,d00,h100)
2846 if(grib==
'grib2')
then
2848 fld_info(cfld)%ifld=iavblfld(iget(318))
2849 fld_info(cfld)%lvl=lvlsxml(1,iget(318))
2855 datapd(i,j,cfld) = grid1(ii,jj)
2862 IF (iget(319)>0)
THEN
2867 IF(rh7294(i,j) < spval) grid1(i,j) = rh7294(i,j)*100.
2870 CALL bound(grid1,d00,h100)
2871 if(grib==
'grib2')
then
2873 fld_info(cfld)%ifld=iavblfld(iget(319))
2874 fld_info(cfld)%lvl=lvlsxml(1,iget(319))
2880 datapd(i,j,cfld) = grid1(ii,jj)
2887 IF (iget(320)>0)
THEN
2892 IF(rh4472(i,j) < spval) grid1(i,j)=rh4472(i,j)*100.
2895 CALL bound(grid1,d00,h100)
2896 if(grib==
'grib2')
then
2898 fld_info(cfld)%ifld=iavblfld(iget(320))
2899 fld_info(cfld)%lvl=lvlsxml(1,iget(320))
2905 datapd(i,j,cfld) = grid1(ii,jj)
2910 deallocate(rh4410,rh7294,rh4472,rh3310)
2914 IF ( (iget(321)>0).OR.(iget(322)>0).OR. &
2915 (iget(323)>0).OR.(iget(324)>0).OR. &
2916 (iget(325)>0).OR.(iget(326)>0))
THEN
2920 egrid2(i,j) = 0.995*pint(i,j,lm+1)
2921 egrid1(i,j) = log(pmid(i,j,lm)/egrid2(i,j)) &
2922 / log(pmid(i,j,lm)/pmid(i,j,lm-1))
2924 IF (modelname ==
'GFS' .OR. modelname ==
'FV3R')
THEN
2925 egrid1(i,j) = log(pmid(i,j,lm)/egrid2(i,j)) &
2926 / max(1.e-6,log(pmid(i,j,lm)/pmid(i,j,lm-1)))
2927 egrid1(i,j) =max(-10.0,min(egrid1(i,j), 10.0))
2928 IF ( abs(pmid(i,j,lm)-pmid(i,j,lm-1)) < 0.5 )
THEN
2936 IF (iget(321)>0)
THEN
2941 IF(t(i,j,lm)<spval.and.t(i,j,lm-1)<spval.and.egrid1(i,j)<spval)&
2942 grid1(i,j) = t(i,j,lm)+(t(i,j,lm-1)-t(i,j,lm)) &
2946 if(grib==
'grib2')
then
2948 fld_info(cfld)%ifld=iavblfld(iget(321))
2949 fld_info(cfld)%lvl=lvlsxml(1,iget(321))
2955 datapd(i,j,cfld) = grid1(ii,jj)
2963 IF (iget(322)>0)
THEN
2968 IF(t(i,j,lm)<spval.and.t(i,j,lm-1)<spval.and.egrid1(i,j)<spval)&
2969 grid2(i,j) = t(i,j,lm)+(t(i,j,lm-1)-t(i,j,lm)) &
2973 CALL calpot(egrid2,grid2(ista:iend,jsta:jend),grid1(ista:iend,jsta:jend))
2974 if(grib==
'grib2')
then
2976 fld_info(cfld)%ifld=iavblfld(iget(322))
2977 fld_info(cfld)%lvl=lvlsxml(1,iget(322))
2983 datapd(i,j,cfld) = grid1(ii,jj)
2989 IF (iget(323)>0)
THEN
2994 IF(pmid(i,j,lm)<spval.and.pmid(i,j,lm-1)<spval.and.&
2995 q(i,j,lm)<spval.and.q(i,j,lm-1)<spval)
THEN
2996 es1 = min(pmid(i,j,lm),fpvsnew(t(i,j,lm)))
2997 qs1 = con_eps*es1/(pmid(i,j,lm)+con_epsm1*es1)
2999 es2 = min(pmid(i,j,lm-1),fpvsnew(t(i,j,lm-1)))
3000 qs2 = con_eps*es2/(pmid(i,j,lm-1)+con_epsm1*es2)
3001 rh2 = q(i,j,lm-1)/qs2
3002 grid1(i,j) = (rh1+(rh2-rh1)*egrid1(i,j))*100.
3006 CALL bound(grid1,d00,h100)
3007 if(grib==
'grib2')
then
3009 fld_info(cfld)%ifld=iavblfld(iget(323))
3010 fld_info(cfld)%lvl=lvlsxml(1,iget(323))
3016 datapd(i,j,cfld) = grid1(ii,jj)
3022 IF (iget(324)>0)
THEN
3027 IF(uh(i,j,lm)<spval.and.uh(i,j,lm-1)<spval.and.egrid1(i,j)<spval)&
3028 grid1(i,j) = uh(i,j,lm)+(uh(i,j,lm-1)-uh(i,j,lm)) &
3032 if(grib==
'grib2')
then
3034 fld_info(cfld)%ifld=iavblfld(iget(324))
3035 fld_info(cfld)%lvl=lvlsxml(1,iget(324))
3041 datapd(i,j,cfld) = grid1(ii,jj)
3047 IF (iget(325)>0)
THEN
3052 IF(vh(i,j,lm)<spval.and.vh(i,j,lm-1)<spval.and.egrid1(i,j)<spval)&
3053 grid1(i,j) = vh(i,j,lm)+(vh(i,j,lm-1)-vh(i,j,lm)) &
3057 if(grib==
'grib2')
then
3059 fld_info(cfld)%ifld=iavblfld(iget(325))
3060 fld_info(cfld)%lvl=lvlsxml(1,iget(325))
3066 datapd(i,j,cfld) = grid1(ii,jj)
3072 IF (iget(326)>0)
THEN
3077 IF(omga(i,j,lm)<spval.and.omga(i,j,lm-1)<spval.and.egrid1(i,j)<spval)&
3078 grid1(i,j) = omga(i,j,lm)+(omga(i,j,lm-1)-omga(i,j,lm))&
3082 if(grib==
'grib2')
then
3084 fld_info(cfld)%ifld=iavblfld(iget(326))
3085 fld_info(cfld)%lvl=lvlsxml(1,iget(326))
3091 datapd(i,j,cfld) = grid1(ii,jj)
3104 IF(lvls(3,iget(032))>0)field1=.true.
3107 IF(lvls(3,iget(107))>0)field2=.true.
3117 IF(field1.OR.field2)
THEN
3123 egrid1(i,j) = -h99999
3124 egrid2(i,j) = -h99999
3125 lb2(i,j) = (lvlbnd(i,j,1) + lvlbnd(i,j,2) + &
3127 p1d(i,j) = (pbnd(i,j,1) + pbnd(i,j,2) + pbnd(i,j,3))/3
3128 t1d(i,j) = (tbnd(i,j,1) + tbnd(i,j,2) + tbnd(i,j,3))/3
3129 q1d(i,j) = (qbnd(i,j,1) + qbnd(i,j,2) + qbnd(i,j,3))/3
3134 CALL calcape(itype,dpbnd,p1d,t1d,q1d,lb2,egrid1, &
3135 egrid2,egrid3,egrid4,egrid5)
3137 IF (iget(582)>0)
THEN
3143 IF(t1d(i,j) < spval)
THEN
3144 grid1(i,j) = egrid1(i,j)
3145 IF (submodelname ==
'RTMA')mlcape(i,j)=grid1(i,j)
3149 CALL bound(grid1,d00,h99999)
3150 if(grib==
'grib2')
then
3152 fld_info(cfld)%ifld=iavblfld(iget(582))
3153 fld_info(cfld)%lvl=lvlsxml(1,iget(582))
3159 datapd(i,j,cfld) = grid1(ii,jj)
3164 IF (iget(583)>0)
THEN
3170 IF(t1d(i,j) < spval) grid1(i,j) = - egrid2(i,j)
3174 CALL bound(grid1,d00,h99999)
3179 IF(t1d(i,j) < spval)
THEN
3180 grid1(i,j) = - grid1(i,j)
3181 IF (submodelname ==
'RTMA') mlcin(i,j)=grid1(i,j)
3186 if(grib==
'grib2')
then
3188 fld_info(cfld)%ifld=iavblfld(iget(583))
3189 fld_info(cfld)%lvl=lvlsxml(1,iget(583))
3195 datapd(i,j,cfld) = grid1(ii,jj)
3205 IF ( (iget(109)>0).OR.(iget(110)>0) )
THEN
3206 CALL callcl(p1d,t1d,q1d,egrid1,egrid2)
3207 IF (iget(109)>0)
THEN
3211 IF(t1d(i,j) < spval) grid1(i,j)=egrid2(i,j)
3212 IF (submodelname ==
'RTMA') mllcl(i,j) = grid1(i,j)
3242 IF(lvls(4,iget(032))>0)field1=.true.
3246 IF(lvls(4,iget(107))>0)field2=.true.
3256 IF(field1.OR.field2.OR.need_ifi)
THEN
3258 call allocate_cape_arrays
3263 egrid1(i,j) = -h99999
3264 egrid2(i,j) = -h99999
3269 CALL calcape(itype,dpbnd,p1d,t1d,q1d,lb2,egrid1, &
3270 egrid2,egrid3,egrid4,egrid5)
3271 IF (iget(584)>0 .or. need_ifi)
THEN
3277 IF(t1d(i,j) < spval)
THEN
3278 grid1(i,j) = egrid1(i,j)
3279 IF (submodelname ==
'RTMA') mucape(i,j)=grid1(i,j)
3283 CALL bound(grid1,d00,h99999)
3290 cape(i,j) = grid1(i,j)
3293 if(iget(584)>0 .and. grib==
'grib2')
then
3295 fld_info(cfld)%ifld=iavblfld(iget(584))
3296 fld_info(cfld)%lvl=lvlsxml(1,iget(584))
3302 datapd(i,j,cfld) = grid1(ii,jj)
3309 IF (iget(585)>0 .or. need_ifi)
THEN
3315 IF(t1d(i,j) < spval) grid1(i,j) = - egrid2(i,j)
3318 CALL bound(grid1,d00,h99999)
3321 IF(t1d(i,j) < spval)
THEN
3322 grid1(i,j) = - grid1(i,j)
3323 IF (submodelname ==
'RTMA')
THEN
3324 mucape(i,j) = grid1(i,j)
3325 muq1d(i,j) = q1d(i,j)
3334 cin(i,j) = grid1(i,j)
3338 if(iget(585)>0 .and. grib==
'grib2')
then
3340 fld_info(cfld)%ifld=iavblfld(iget(585))
3341 fld_info(cfld)%lvl=lvlsxml(1,iget(585))
3347 datapd(i,j,cfld) = grid1(ii,jj)
3355 IF (iget(443)>0)
THEN
3360 IF(t1d(i,j) < spval) grid1(i,j) = egrid4(i,j)
3363 if(grib==
'grib2')
then
3365 fld_info(cfld)%ifld=iavblfld(iget(443))
3366 fld_info(cfld)%lvl=lvlsxml(1,iget(443))
3372 datapd(i,j,cfld) = grid1(ii,jj)
3378 IF (iget(982)>0)
THEN
3381 grid1(i,j) = teql(i,j)
3384 if(grib==
'grib2')
then
3386 fld_info(cfld)%ifld=iavblfld(iget(982))
3387 fld_info(cfld)%lvl=lvlsxml(1,iget(982))
3393 datapd(i,j,cfld) = grid1(ii,jj)
3402 IF (iget(246)>0)
THEN
3407 IF(t1d(i,j) < spval) grid1(i,j) = egrid3(i,j)
3410 CALL bound(grid1,d00,h99999)
3413 if(grib==
'grib2')
then
3415 fld_info(cfld)%ifld=iavblfld(iget(246))
3416 fld_info(cfld)%lvl=lvlsxml(1,iget(246))
3422 datapd(i,j,cfld) = grid1(ii,jj)
3429 IF (iget(444)>0)
THEN
3434 IF(cprate(i,j) < spval)
THEN
3435 IF (cprate(i,j) > pthresh)
THEN
3436 grid1(i,j) = egrid5(i,j)
3443 CALL bound(grid1,d00,h99999)
3444 if(grib==
'grib2')
then
3446 fld_info(cfld)%ifld=iavblfld(iget(444))
3447 fld_info(cfld)%lvl=lvlsxml(1,iget(444))
3453 datapd(i,j,cfld) = grid1(ii,jj)
3461 IF (submodelname ==
'RTMA')
THEN
3467 ALLOCATE(el_base(ista_2l:iend_2u,jsta_2l:jend_2u))
3468 ALLOCATE(el_tops(ista_2l:iend_2u,jsta_2l:jend_2u))
3469 ALLOCATE(found_base(ista_2l:iend_2u,jsta_2l:jend_2u))
3470 ALLOCATE(found_tops(ista_2l:iend_2u,jsta_2l:jend_2u))
3476 found_base(i,j) = .false.
3477 found_tops(i,j) = .false.
3492 egrid1(i,j) = -h99999
3493 egrid2(i,j) = -h99999
3495 p1d(i,j) = pmid(i,j,l)
3502 IF (debugprint)
WRITE(1000+me,
'(A,I3)') &
3503 ' CALCULATING CAPE/CINS ON LEVEL:',l
3504 CALL calcape(itype,dpbnd,p1d,t1d,q1d,idummy,egrid1, &
3505 egrid2,egrid3,egrid4,egrid5)
3511 IF ( .NOT. found_base(i,j) )
THEN
3512 IF ( egrid1(i,j) >= 100. .AND. egrid2(i,j) >= -250. )
THEN
3514 found_base(i,j) = .true.
3517 found_base(i,j) = .false.
3520 IF ( .NOT. found_tops(i,j) )
THEN
3521 IF ( egrid1(i,j) < 100. .OR. egrid2(i,j) < -250. )
THEN
3522 el_tops(i,j) = l + 1
3523 found_tops(i,j) = .true.
3526 found_tops(i,j) = .false.
3536 IF (
ALLOCATED(found_base))
DEALLOCATE(found_base)
3537 IF (
ALLOCATED(found_tops))
DEALLOCATE(found_tops)
3539 IF (debugprint)
THEN
3540 WRITE(im_ch,
'(I5.5)') im
3541 WRITE(jsta_ch,
'(I5.5)') jsta
3542 WRITE(jend_ch,
'(I5.5)') jend
3543 effl_fname=
"EFFL_NEW_"//im_ch//
"_"//jsta_ch//
"_"//jend_ch &
3545 effl_fname2=
"EFFL_NEW_LVLS_"//im_ch//
"_"//jsta_ch//
"_"//jend_ch &
3551 OPEN(iunit,file=trim(adjustl(effl_fname)),form=
'FORMATTED')
3558 WRITE(iunit,
'(1x,I6,2x,I6,2(2x,I6,2x,F12.3))') i, j, &
3559 el_base(i,j),pmid(i,j,el_base(i,j)), &
3560 el_tops(i,j),pmid(i,j,el_tops(i,j))
3566 IF(
ALLOCATED(tpar_base))
DEALLOCATE(tpar_base)
3567 IF(
ALLOCATED(tpar_tops))
DEALLOCATE(tpar_tops)
3579 IF(lvls(3,iget(032))>0)field1=.true.
3582 IF(lvls(3,iget(107))>0)field2=.true.
3591 IF(modelname ==
"FV3R" .and. submodelname ==
"RTMA")
THEN
3599 IF(field1.OR.field2)
THEN
3602 call allocate_cape_arrays
3608 egrid1(i,j) = -h99999
3609 egrid2(i,j) = -h99999
3610 egrid3(i,j) = -h99999
3611 egrid4(i,j) = -h99999
3612 egrid5(i,j) = -h99999
3613 egrid6(i,j) = -h99999
3614 egrid7(i,j) = -h99999
3615 egrid8(i,j) = -h99999
3620 lb2(i,j) = (lvlbnd(i,j,1) + lvlbnd(i,j,2) + &
3622 p1d(i,j) = (pbnd(i,j,1) + pbnd(i,j,2) + pbnd(i,j,3))/3
3623 t1d(i,j) = (tbnd(i,j,1) + tbnd(i,j,2) + tbnd(i,j,3))/3
3624 q1d(i,j) = (qbnd(i,j,1) + qbnd(i,j,2) + qbnd(i,j,3))/3
3629 CALL calcape2(itype,dpbnd,p1d,t1d,q1d,lb2, &
3630 egrid1,egrid2,egrid3,egrid4,egrid5, &
3631 egrid6,egrid7,egrid8)
3636 IF (iget(950)>0)
THEN
3642 IF(t1d(i,j) < spval) grid1(i,j) = egrid1(i,j)
3645 CALL bound(grid1,d00,h99999)
3646 if(grib==
'grib2')
then
3648 fld_info(cfld)%ifld=iavblfld(iget(950))
3649 fld_info(cfld)%lvl=lvlsxml(1,iget(950))
3655 datapd(i,j,cfld) = grid1(ii,jj)
3661 IF (iget(951)>0)
THEN
3667 IF(t1d(i,j) < spval) grid1(i,j) = - egrid2(i,j)
3671 CALL bound(grid1,d00,h99999)
3676 IF(t1d(i,j) < spval) grid1(i,j) = - grid1(i,j)
3680 if(grib==
'grib2')
then
3682 fld_info(cfld)%ifld=iavblfld(iget(951))
3683 fld_info(cfld)%lvl=lvlsxml(1,iget(951))
3689 datapd(i,j,cfld) = grid1(ii,jj)
3697 IF (iget(952)>0)
THEN
3702 IF(t1d(i,j) < spval) grid1(i,j) = egrid3(i,j)
3705 CALL bound(grid1,d00,h99999)
3706 if(grib==
'grib2')
then
3708 fld_info(cfld)%ifld=iavblfld(iget(952))
3709 fld_info(cfld)%lvl=lvlsxml(1,iget(952))
3715 datapd(i,j,cfld) = grid1(ii,jj)
3724 allocate(ust(ista_2l:iend_2u,jsta_2l:jend_2u),vst(ista_2l:iend_2u,jsta_2l:jend_2u), &
3725 heli(ista_2l:iend_2u,jsta_2l:jend_2u,2))
3726 allocate(llow(ista_2l:iend_2u,jsta_2l:jend_2u),lupp(ista_2l:iend_2u,jsta_2l:jend_2u), &
3727 cangle(ista_2l:iend_2u,jsta_2l:jend_2u))
3728 allocate(llow_zint(ista_2l:iend_2u,jsta_2l:jend_2u), &
3729 ieql_zint(ista_2l:iend_2u,jsta_2l:jend_2u),z_temp(ista_2l:iend_2u,jsta_2l:jend_2u))
3730 allocate(midcal(ista_2l:iend_2u,jsta_2l:jend_2u,1:lm))
3731 allocate(z_midcal(ista_2l:iend_2u,jsta_2l:jend_2u))
3736 iget2 = lvls(1,iget1)
3737 iget3 = lvls(2,iget1)
3739 if(me==0)
write(*,*)
'953 ',iget1,iget2,iget3
3740 IF (iget1 > 0 .OR. iget(162) > 0 .OR. iget(953) > 0)
THEN
3743 IF (submodelname ==
'RTMA')
THEN
3749 llow(i,j) = el_base(i,j)
3750 lupp(i,j) = el_tops(i,j)
3757 llow(i,j) = int(egrid4(i,j))
3758 lupp(i,j) = int(egrid5(i,j))
3763 IF (debugprint)
THEN
3764 WRITE(im_ch,
'(I5.5)') im
3765 WRITE(jsta_ch,
'(I5.5)') jsta
3766 WRITE(jend_ch,
'(I5.5)') jend
3767 effl_fname=
"EFFL_OLD_"//im_ch//
"_"//jsta_ch//
"_"//jend_ch &
3771 OPEN(iunit,file=trim(adjustl(effl_fname)),form=
'FORMATTED')
3775 WRITE(iunit,
'(1x,I6,2x,I6,2(2x,I6,2x,F12.3))') i, j, &
3776 llow(i,j),pmid(i,j,llow(i,j)), &
3777 lupp(i,j),pmid(i,j,lupp(i,j))
3784 CALL calhel2(llow,lupp,depth,ust,vst,heli,cangle)
3790 grid1(i,j) = heli(i,j,1)
3793 if(grib==
'grib2')
then
3795 fld_info(cfld)%ifld=iavblfld(iget1)
3796 fld_info(cfld)%lvl=lvlsxml(1,iget1)
3802 datapd(i,j,cfld) = grid1(ii,jj)
3811 IF (submodelname ==
'RTMA')
THEN
3815 allocate(eshr(ista_2l:iend_2u,jsta_2l:jend_2u),uvect(ista_2l:iend_2u,jsta_2l:jend_2u),&
3816 vvect(ista_2l:iend_2u,jsta_2l:jend_2u),htsfc(ista_2l:iend_2u,jsta_2l:jend_2u))
3817 allocate(effust(ista_2l:iend_2u,jsta_2l:jend_2u),effvst(ista_2l:iend_2u,jsta_2l:jend_2u),&
3818 esrh(ista_2l:iend_2u,jsta_2l:jend_2u))
3833 egrid1(i,j) = -h99999
3834 p1d(i,j)=pmid(i,j,l)
3839 CALL calthte(p1d,t1d,q1d,egrid1)
3842 the(i,j)=egrid1(i,j)
3843 IF(the(i,j)>=maxthe(i,j))
THEN
3844 maxthe(i,j)=the(i,j)
3846 muq1d(i,j) = q(i,j,l)
3852 llow(i,j) = el_base(i,j)
3853 llow_zint(i,j)=zint(i,j,llow(i,j))
3854 ieql_zint(i,j)=zint(i,j,ieql(i,j))
3855 z_temp(i,j)=llow_zint(i,j)+d50*(ieql_zint(i,j)-llow_zint(i,j))
3856 midcal(i,j,l)=abs(zint(i,j,l)-z_temp(i,j))
3860 z_midcal=minloc(midcal,dim=3)
3864 IF(gridtype ==
'E')
THEN
3875 ELSE IF(gridtype ==
'B')
THEN
3899 IF(gridtype /=
'A')
CALL exch(fis(ista_2l:iend_2u,jsta_2l:jend_2u))
3906 IF (gridtype==
'B')
THEN
3907 htsfc(i,j)=(0.25/g)*(fis(iw,j)+fis(ie,j)+fis(i,jn)+fis(ie,jn))
3909 htsfc(i,j)=(0.25/g)*(fis(iw,j)+fis(ie,j)+fis(i,jn)+fis(i,js))
3915 IF (iget(979)>0)
THEN
3919 IF(zint(i,j,llow(i,j))<spval.and.htsfc(i,j)<spval)&
3920 grid1(i,j) = zint(i,j,llow(i,j)) - htsfc(i,j)
3923 if(grib==
'grib2')
then
3925 fld_info(cfld)%ifld=iavblfld(iget(979))
3926 fld_info(cfld)%lvl=lvlsxml(1,iget(979))
3932 datapd(i,j,cfld) = grid1(ii,jj)
3938 IF (iget(980)>0)
THEN
3942 IF(zint(i,j,lupp(i,j))<spval.and.htsfc(i,j)<spval)&
3943 grid1(i,j) = zint(i,j,lupp(i,j)) - htsfc(i,j)
3946 if(grib==
'grib2')
then
3948 fld_info(cfld)%ifld=iavblfld(iget(980))
3949 fld_info(cfld)%lvl=lvlsxml(1,iget(980))
3955 datapd(i,j,cfld) = grid1(ii,jj)
3963 IF (iget(983)>0)
THEN
3967 IF(llow(i,j)<spval.and.lupp(i,j)<spval)
THEN
3968 uvect(i,j)=uh(i,j,z_midcal(i,j))-uh(i,j,llow(i,j))
3969 grid1(i,j)=uvect(i,j)
3973 if(grib==
'grib2')
then
3975 fld_info(cfld)%ifld=iavblfld(iget(983))
3976 fld_info(cfld)%lvl=lvlsxml(1,iget(983))
3982 datapd(i,j,cfld) = grid1(ii,jj)
3989 IF (iget(984)>0)
THEN
3993 IF(llow(i,j)<spval.and.lupp(i,j)<spval)
THEN
3994 vvect(i,j)=vh(i,j,z_midcal(i,j))-vh(i,j,llow(i,j))
3995 grid1(i,j)=vvect(i,j)
3999 if(grib==
'grib2')
then
4001 fld_info(cfld)%ifld=iavblfld(iget(984))
4002 fld_info(cfld)%lvl=lvlsxml(1,iget(984))
4008 datapd(i,j,cfld) = grid1(ii,jj)
4015 IF (iget(985)>0)
THEN
4019 IF(uvect(i,j)<spval.and.vvect(i,j)<spval)
THEN
4020 eshr(i,j)=sqrt((uvect(i,j)**2)+(vvect(i,j))**2)
4023 grid1(i,j)=eshr(i,j)
4027 if(grib==
'grib2')
then
4029 fld_info(cfld)%ifld=iavblfld(iget(985))
4030 fld_info(cfld)%lvl=lvlsxml(1,iget(985))
4036 datapd(i,j,cfld) = grid1(ii,jj)
4046 llow(i,j) = el_base(i,j)
4047 lupp(i,j) = el_tops(i,j)
4051 CALL calhel3(llow,lupp,effust,effvst,esrh)
4056 IF (iget(986)>0)
THEN
4060 IF(llow(i,j)<spval.and.lupp(i,j)<spval)&
4061 grid1(i,j)=effust(i,j)
4064 if(grib==
'grib2')
then
4066 fld_info(cfld)%ifld=iavblfld(iget(986))
4067 fld_info(cfld)%lvl=lvlsxml(1,iget(986))
4073 datapd(i,j,cfld) = grid1(ii,jj)
4080 IF (iget(987)>0)
THEN
4084 IF(llow(i,j)<spval.and.lupp(i,j)<spval)&
4085 grid1(i,j)=effvst(i,j)
4088 if(grib==
'grib2')
then
4090 fld_info(cfld)%ifld=iavblfld(iget(987))
4091 fld_info(cfld)%lvl=lvlsxml(1,iget(987))
4097 datapd(i,j,cfld) = grid1(ii,jj)
4104 IF (iget(988)>0)
THEN
4108 IF(llow(i,j)<spval.and.lupp(i,j)<spval)&
4109 grid1(i,j)=esrh(i,j)
4112 if(grib==
'grib2')
then
4114 fld_info(cfld)%ifld=iavblfld(iget(988))
4115 fld_info(cfld)%lvl=lvlsxml(1,iget(988))
4121 datapd(i,j,cfld) = grid1(ii,jj)
4128 IF (iget(989)>0)
THEN
4131 IF (mllcl(i,j)>d2000)
THEN
4133 ELSEIF (mllcl(i,j)<d1000)
THEN
4136 mllcltmp=((d2000-mllcl(i,j))/d1000)
4138 IF (eshr(i,j)<12.5)
THEN
4140 ELSEIF (eshr(i,j)>30.0)
THEN
4143 eshrtmp=(eshr(i,j)/20.)
4145 IF (mlcin(i,j)>-50.)
THEN
4147 ELSEIF (mlcin(i,j)<-200.)
THEN
4150 mlcintmp=(200.+mlcin(i,j))/150.
4152 stp=(mlcape(i,j)/d1500)*mllcltmp*(esrh(i,j)/150.)*&
4155 IF(llow(i,j)<spval.and.lupp(i,j)<spval)
THEN
4164 if(grib==
'grib2')
then
4166 fld_info(cfld)%ifld=iavblfld(iget(989))
4167 fld_info(cfld)%lvl=lvlsxml(1,iget(989))
4173 datapd(i,j,cfld) = grid1(ii,jj)
4180 IF (iget(990)>0)
THEN
4183 llmh = nint(lmh(i,j))
4184 p1d(i,j) = pmid(i,j,llmh)
4185 t1d(i,j) = t(i,j,llmh)
4186 q1d(i,j) = q(i,j,llmh)
4189 CALL callcl(p1d,t1d,q1d,egrid1,egrid2)
4192 slcl(i,j)=egrid2(i,j)
4199 CALL calcape(itype,dpbnd,dummy,dummy,dummy,&
4200 idummy,egrid1,egrid2,&
4205 IF (slcl(i,j)>d2000)
THEN
4207 ELSEIF (slcl(i,j)<=d1000)
THEN
4210 slcltmp=((d2000-slcl(i,j))/d1000)
4212 IF (fshr(i,j)<12.5)
THEN
4214 ELSEIF (fshr(i,j)>30.0)
THEN
4217 fshrtmp=(fshr(i,j)/20.)
4219 IF (egrid2(i,j)>-50.)
THEN
4221 ELSEIF (egrid2(i,j)<-200.)
THEN
4224 scintmp=((200.+egrid2(i,j)/150.))
4226 stp=(egrid1(i,j)/d1500)*slcltmp*(heli(i,j,2)/150.)*&
4229 IF(t1d(i,j) < spval)
THEN
4238 if(grib==
'grib2')
then
4240 fld_info(cfld)%ifld=iavblfld(iget(990))
4241 fld_info(cfld)%lvl=lvlsxml(1,iget(990))
4247 datapd(i,j,cfld) = grid1(ii,jj)
4254 IF (iget(991)>0)
THEN
4257 IF (eshr(i,j)<10.)
THEN
4259 ELSEIF (eshr(i,j)>20.0)
THEN
4262 eshrtmp=(eshr(i,j)/20.)
4264 IF (mucin(i,j)>-40.)
THEN
4267 mucintmp=(-40./mucin(i,j))
4269 stp=(mucape(i,j)/d1000)*(esrh(i,j)/50.)*&
4272 IF(t1d(i,j) < spval)
THEN
4281 if(grib==
'grib2')
then
4283 fld_info(cfld)%ifld=iavblfld(iget(991))
4284 fld_info(cfld)%lvl=lvlsxml(1,iget(991))
4290 datapd(i,j,cfld) = grid1(ii,jj)
4298 IF (iget(992)>0)
THEN
4302 egrid1(i,j) = -h99999
4303 egrid2(i,j) = -h99999
4304 egrid3(i,j) = -h99999
4305 egrid4(i,j) = -h99999
4306 egrid5(i,j) = -h99999
4307 egrid6(i,j) = -h99999
4308 egrid7(i,j) = -h99999
4309 egrid8(i,j) = -h99999
4310 lb2(i,j) = (lvlbnd(i,j,1) + lvlbnd(i,j,2) + &
4312 p1d(i,j) = (pbnd(i,j,1) + pbnd(i,j,2) + pbnd(i,j,3))/3
4313 t1d(i,j) = (tvirtual(tbnd(i,j,1),qbnd(i,j,1)) + &
4314 tvirtual(tbnd(i,j,2),qbnd(i,j,2)) + &
4315 tvirtual(tbnd(i,j,3),qbnd(i,j,3)))/3
4316 q1d(i,j) = (qbnd(i,j,1) + qbnd(i,j,2) + qbnd(i,j,3))/3
4323 CALL calcape2(itype,dpbnd,p1d,t1d,q1d,lb2, &
4324 egrid1,egrid2,egrid3,egrid4,egrid5, &
4325 egrid6,egrid7,egrid8)
4330 IF(t1d(i,j) < spval) grid1(i,j) = egrid3(i,j)
4333 CALL bound(grid1,d00,h99999)
4334 if(grib==
'grib2')
then
4336 fld_info(cfld)%ifld=iavblfld(iget(992))
4337 fld_info(cfld)%lvl=lvlsxml(1,iget(992))
4343 datapd(i,j,cfld) = grid1(ii,jj)
4350 IF (iget(763)>0)
THEN
4355 grid1(i,j) = q1d(i,j)
4358 if(grib==
'grib2')
then
4360 fld_info(cfld)%ifld=iavblfld(iget(763))
4361 fld_info(cfld)%lvl=lvlsxml(1,iget(763))
4367 datapd(i,j,cfld) = grid1(ii,jj)
4374 IF (iget(993)>0)
THEN
4378 lapse=-((t700(i,j)-t500(i,j))/((z700(i,j)-z500(i,j))))
4379 ship=(mucape(i,j)*d1000*muq1d(i,j)*lapse*(t500(i,j)-k2c)*fshr(i,j))/hconst
4380 IF (mucape(i,j)<1300.)
THEN
4381 ship=ship*(mucape(i,j)/1300.)
4383 IF (lapse < 5.8)
THEN
4384 ship=ship*(lapse/5.8)
4386 IF (freezelvl(i,j) < 2400.)
THEN
4387 ship=ship*(freezelvl(i,j)/2400.)
4392 if(grib==
'grib2')
then
4394 fld_info(cfld)%ifld=iavblfld(iget(993))
4395 fld_info(cfld)%lvl=lvlsxml(1,iget(993))
4401 datapd(i,j,cfld) = grid1(ii,jj)
4412 IF (iget(957)>0)
THEN
4417 IF(t1d(i,j) < spval ) grid1(i,j) = cangle(i,j)
4423 if(grib==
'grib2')
then
4425 fld_info(cfld)%ifld=iavblfld(iget(957))
4426 fld_info(cfld)%lvl=lvlsxml(1,iget(957))
4432 datapd(i,j,cfld) = grid1(ii,jj)
4440 IF (iget(955)>0)
THEN
4445 IF(t1d(i,j) < spval ) grid1(i,j) = egrid7(i,j)
4448 CALL bound(grid1,d00,h99999)
4449 if(grib==
'grib2')
then
4451 fld_info(cfld)%ifld=iavblfld(iget(955))
4452 fld_info(cfld)%lvl=lvlsxml(1,iget(955))
4458 datapd(i,j,cfld) = grid1(ii,jj)
4466 IF (iget(956)>0)
THEN
4471 IF(t1d(i,j) < spval ) grid1(i,j) = egrid8(i,j)
4474 CALL bound(grid1,d00,h99999)
4475 if(grib==
'grib2')
then
4477 fld_info(cfld)%ifld=iavblfld(iget(956))
4478 fld_info(cfld)%lvl=lvlsxml(1,iget(956))
4484 datapd(i,j,cfld) = grid1(ii,jj)
4508 IF (iget(954)>0)
THEN
4513 IF(t1d(i,j) < spval) grid1(i,j) = -egrid6(i,j)
4516 CALL bound(grid1,d00,h99999)
4517 if(grib==
'grib2')
then
4519 fld_info(cfld)%ifld=iavblfld(iget(954))
4520 fld_info(cfld)%lvl=lvlsxml(1,iget(954))
4526 datapd(i,j,cfld) = grid1(ii,jj)
4533 if (
allocated(ushr1))
deallocate(ushr1)
4534 if (
allocated(vshr1))
deallocate(vshr1)
4535 if (
allocated(ushr6))
deallocate(ushr6)
4536 if (
allocated(vshr6))
deallocate(vshr6)
4537 if (
allocated(ust))
deallocate(ust)
4538 if (
allocated(vst))
deallocate(vst)
4539 if (
allocated(heli))
deallocate(heli)
4540 if (
allocated(llow))
deallocate(llow)
4541 if (
allocated(lupp))
deallocate(lupp)
4542 if (
allocated(cangle))
deallocate(cangle)
4543 if (
allocated(effust))
deallocate(effust)
4544 if (
allocated(effvst))
deallocate(effvst)
4545 if (
allocated(eshr))
deallocate(eshr)
4546 if (
allocated(uvect))
deallocate(uvect)
4547 if (
allocated(vvect))
deallocate(vvect)
4548 if (
allocated(esrh))
deallocate(esrh)
4549 if (
allocated(htsfc))
deallocate(htsfc)
4550 if (
allocated(fshr))
deallocate(fshr)
4551 if (
allocated(llow_zint))
deallocate(llow_zint)
4552 if (
allocated(ieql_zint))
deallocate(ieql_zint)
4553 if (
allocated(z_temp))
deallocate(z_temp)
4554 if (
allocated(midcal))
deallocate(midcal)
4555 if (
allocated(z_midcal))
deallocate(z_midcal)
4556 if (
allocated(el_base))
deallocate(el_base)
4557 if (
allocated(el_tops))
deallocate(el_tops)
4561 if (
allocated(pbnd))
deallocate(pbnd)
4562 if (
allocated(tbnd))
deallocate(tbnd)
4563 if (
allocated(qbnd))
deallocate(qbnd)
4564 if (
allocated(ubnd))
deallocate(ubnd)
4565 if (
allocated(vbnd))
deallocate(vbnd)
4566 if (
allocated(rhbnd))
deallocate(rhbnd)
4567 if (
allocated(wbnd))
deallocate(wbnd)
4568 if (
allocated(lvlbnd))
deallocate(lvlbnd)
4569 if (
allocated(lb2))
deallocate(lb2)
4574 IF (iget(749)>0)
THEN
4575 CALL calrh_pw(grid1(ista:iend,jsta:jend))
4576 if(grib==
'grib2')
then
4578 fld_info(cfld)%ifld=iavblfld(iget(749))
4584 datapd(i,j,cfld) = grid1(ii,jj)
4596 subroutine allocate_cape_arrays
4597 if(.not.
allocated(omgbnd))
allocate(omgbnd(ista:iend,jsta:jend,nbnd))
4598 if(.not.
allocated(pwtbnd))
allocate(pwtbnd(ista:iend,jsta:jend,nbnd))
4599 if(.not.
allocated(qcnvbnd))
allocate(qcnvbnd(ista:iend,jsta:jend,nbnd))
4600 if(.not.
allocated(lvlbnd))
allocate(lvlbnd(ista:iend,jsta:jend,nbnd))
4601 if(.not.
allocated(lb2))
allocate(lb2(ista:iend,jsta:jend))
4602 end subroutine allocate_cape_arrays