90 use vrbls3d, only: pmid, uh, vh, t, zmid, zint, pint, alpint, q, omga
91 use vrbls3d, only: catedr,mwt,gtg
92 use vrbls2d, only: pblh, cprate, fis, t500, t700, z500, z700,&
95 use params_mod, only: d00, d50, h99999, h100, h1, h1m12, pq0, a2, a3, a4, &
96 rhmin, rgamog, tfrz, small, g
97 use ctlblk_mod
, only: grib, cfld, fld_info, datapd, im, jsta, jend, jm, jsta_m, jend_m, &
98 nbnd, nbin_du, lm, htfd, spval, pthresh, nfd, petabnd, me,&
99 jsta_2l, jend_2u, modelname, submodelname, &
100 ista, iend, ista_m, iend_m, ista_2l, iend_2u
101 use rqstfld_mod
, only: iget, lvls, id, iavblfld, lvlsxml
104 use gridspec_mod
, only: gridtype
111 real,
PARAMETER :: c2k=273.15
112 real,
parameter :: con_rd =2.8705e+2
113 real,
parameter :: con_rv =4.6150e+2
114 real,
parameter :: con_eps =con_rd/con_rv
115 real,
parameter :: con_epsm1 =con_rd/con_rv-1
116 real,
parameter :: cpthresh =0.000004
117 real,
PARAMETER :: d1000=1000
118 real,
PARAMETER :: d1500=1500
119 real,
PARAMETER :: d2000=2000
120 real,
PARAMETER :: hconst=42000000.
121 real,
PARAMETER :: k2c=273.16
122 REAL,
PARAMETER :: dm9999=-9999.0
127 LOGICAL north, field1,field2
128 LOGICAL,
dimension(ISTA:IEND,JSTA:JEND) :: done, done1
130 INTEGER,
allocatable :: lvlbnd(:,:,:),lb2(:,:)
133 real,
dimension(im,jm) :: grid1, grid2
134 real,
dimension(ista:iend,jsta:jend) :: p1d, t1d, q1d, u1d, v1d, shr1d, z1d, &
135 rh1d, egrid1, egrid2, egrid3, egrid4, &
136 egrid5, egrid6, egrid7, egrid8, &
137 mlcape,mlcin,mllcl,mucape,mucin,mumixr, &
138 freezelvl,muq1d,slcl,the,maxthe
139 integer,
dimension(ista:iend,jsta:jend) :: maxthepos
140 real,
dimension(:,:,:),
allocatable :: omgbnd, pwtbnd, qcnvbnd, &
145 icingfd,gtgfd,catfd,mwtfd
146 real,
dimension(:,:,:,:),
allocatable :: aerfd
148 real,
dimension(:,:),
allocatable :: qm8510, rh4710, rh8498, &
149 rh4796, rh1847, ust, vst, &
150 rh3310, rh6610, rh3366, &
151 pw3310, rh4410, rh7294, &
153 t78483, t89671, p78483, p89671
155 REAL,
dimension(:,:,:),
allocatable :: heli
156 real,
dimension(:,:),
allocatable :: ushr1, vshr1, ushr6, vshr6, &
157 maxwp, maxwz, maxwu, maxwv, &
159 INTEGER,
dimension(:,:),
allocatable :: llow, lupp
160 REAL,
dimension(:,:),
allocatable :: cangle,eshr,uvect,vvect,&
161 effust,effvst,fshr,htsfc,&
164 integer i,j,ii,jj,l,itype,isvalue,lbnd,ilvl,ifd,itypefdlvl(nfd), &
165 iget1, iget2, iget3, llmh,imax,jmax,lmax
166 real dpbnd,pkl1,pku1,fac1,fac2,pl,tl,ql,qsat,rhl,tvrl,tvrblo, &
167 es1,es2,qs1,qs2,rh1,rh2,zsf,depth(2),work1,work2,work3, &
168 scintmp,mucapetmp,mucintmp,mllcltmp,eshrtmp,mlcapetmp,stp,&
169 fshrtmp,mlcintmp,slcltmp,lapse,ship
173 REAL,
allocatable :: htfdctl(:)
174 integer,
allocatable :: itypefdlvlctl(:)
175 integer ie,iw,jn,js,ive(jm),ivw(jm),jvn,jvs
176 integer istart,istop,jstart,jstop,midcal
177 real dummy(ista:iend,jsta:jend)
178 integer idummy(ista:iend,jsta:jend)
180 INTEGER,
dimension(:,:),
allocatable :: el_base, el_tops
181 LOGICAL,
dimension(:,:),
allocatable :: found_base, found_tops
182 INTEGER,
dimension(:,:),
allocatable :: l_thetae_max
183 INTEGER,
dimension(:,:),
allocatable :: cape9, cins9
184 CHARACTER(LEN=5) :: im_ch, jsta_ch, jend_ch, me_ch
185 CHARACTER(LEN=60) :: effl_fname
186 CHARACTER(LEN=60) :: effl_fname2
187 INTEGER :: irec, iunit
188 INTEGER :: irec2, iunit2
189 LOGICAL :: debugprint
191 INTEGER :: llcl_par, leql_par
192 REAL :: lmask, psfc, cape_par, cins_par, lpar0
193 REAL,
DIMENSION(4) :: parcel0
194 REAL,
DIMENSION(:),
ALLOCATABLE :: tpar_b, tpar_t
195 REAL,
DIMENSION(:),
ALLOCATABLE :: tpar_tmp
196 REAL,
DIMENSION(:),
ALLOCATABLE :: p_amb, t_amb, q_amb, zint_amb
197 REAL,
DIMENSION(:,:,:),
ALLOCATABLE :: tpar_base, tpar_tops
206 allocate(ushr1(ista_2l:iend_2u,jsta_2l:jend_2u),vshr1(ista_2l:iend_2u,jsta_2l:jend_2u), &
207 ushr6(ista_2l:iend_2u,jsta_2l:jend_2u),vshr6(ista_2l:iend_2u,jsta_2l:jend_2u))
208 allocate(ust(ista_2l:iend_2u,jsta_2l:jend_2u),vst(ista_2l:iend_2u,jsta_2l:jend_2u), &
209 heli(ista_2l:iend_2u,jsta_2l:jend_2u,2),fshr(ista_2l:iend_2u,jsta_2l:jend_2u))
216 iget2 = lvls(1,iget1)
217 iget3 = lvls(2,iget1)
219 IF (iget1 > 0 .OR. iget(163) > 0 .OR. iget(164) > 0)
THEN
222 CALL calhel(depth,ust,vst,heli,ushr1,vshr1,ushr6,vshr6)
227 grid1(i,j) = heli(i,j,1)
230 if(grib==
'grib2')
then
232 fld_info(cfld)%ifld=iavblfld(iget1)
233 fld_info(cfld)%lvl=lvlsxml(1,iget1)
239 datapd(i,j,cfld) = grid1(ii,jj)
249 grid1(i,j) = heli(i,j,2)
252 if(grib==
'grib2')
then
254 fld_info(cfld)%ifld=iavblfld(iget1)
255 fld_info(cfld)%lvl=lvlsxml(2,iget1)
261 datapd(i,j,cfld) = grid1(ii,jj)
267 IF (iget(163) > 0)
THEN
271 grid1(i,j) = ust(i,j)
274 if(grib==
'grib2')
then
276 fld_info(cfld)%ifld=iavblfld(iget(163))
282 datapd(i,j,cfld) = grid1(ii,jj)
287 IF (iget(164) > 0)
THEN
291 grid1(i,j) = vst(i,j)
294 if(grib==
'grib2')
then
296 fld_info(cfld)%ifld=iavblfld(iget(164))
302 datapd(i,j,cfld) = grid1(ii,jj)
311 if (iget(427) > 0)
THEN
312 CALL calupdhel(grid1(ista_2l:iend_2u,jsta_2l:jend_2u))
313 if(grib==
'grib2')
then
315 fld_info(cfld)%ifld=iavblfld(iget(427))
321 datapd(i,j,cfld) = grid1(ii,jj)
330 IF(iget(430) > 0 .OR. iget(431) > 0 .OR. iget(432) > 0 &
331 .OR. iget(433) > 0)
THEN
334 CALL calhel(depth,ust,vst,heli,ushr1,vshr1,ushr6,vshr6)
339 fshr(i,j) = sqrt(ushr6(i,j)**2+vshr6(i,j)**2)
342 IF(iget(430) > 0)
THEN
346 grid1(i,j) = ushr1(i,j)
349 if(grib==
'grib2')
then
351 fld_info(cfld)%ifld=iavblfld(iget(430))
357 datapd(i,j,cfld) = grid1(ii,jj)
362 IF(iget(431) > 0)
THEN
366 grid1(i,j) = vshr1(i,j)
369 if(grib==
'grib2')
then
371 fld_info(cfld)%ifld=iavblfld(iget(431))
377 datapd(i,j,cfld) = grid1(ii,jj)
382 IF(iget(432) > 0)
THEN
386 grid1(i,j) = ushr6(i,j)
389 if(grib==
'grib2')
then
391 fld_info(cfld)%ifld=iavblfld(iget(432))
397 datapd(i,j,cfld) = grid1(ii,jj)
402 IF(iget(433) > 0)
THEN
406 grid1(i,j) = vshr6(i,j)
409 if(grib==
'grib2')
then
411 fld_info(cfld)%ifld=iavblfld(iget(433))
417 datapd(i,j,cfld) = grid1(ii,jj)
424 if (
allocated(ushr1))
deallocate(ushr1)
425 if (
allocated(vshr1))
deallocate(vshr1)
426 if (
allocated(ushr6))
deallocate(ushr6)
427 if (
allocated(vshr6))
deallocate(vshr6)
428 if (
allocated(ust))
deallocate(ust)
429 if (
allocated(vst))
deallocate(vst)
430 if (
allocated(heli))
deallocate(heli)
436 IF ((iget(054)>0).OR.(iget(055)>0).OR. &
437 (iget(056)>0).OR.(iget(057)>0).OR. &
439 (iget(058)>0).OR.(iget(108)>0) )
THEN
445 if(pmid(i,j,1)<spval)
then
447 CALL
tpause(lm,pmid(i,j,1:lm),uh(i,j,1:lm) &
449 ,vh(i,j,1:lm),t(i,j,1:lm),zmid(i,j,1:lm) &
451 ,p1d(i,j),u1d(i,j),v1d(i,j),t1d(i,j) &
453 ,z1d(i,j),shr1d(i,j))
467 IF (iget(054) > 0)
THEN
471 grid1(i,j) = p1d(i,j)
474 if(grib==
'grib2')
then
476 fld_info(cfld)%ifld=iavblfld(iget(054))
482 datapd(i,j,cfld) = grid1(ii,jj)
489 IF (iget(399)>0)
THEN
490 CALL icaoheight(p1d, grid1(ista:iend,jsta:jend))
492 if(grib==
'grib2')
then
494 fld_info(cfld)%ifld=iavblfld(iget(399))
500 datapd(i,j,cfld) = grid1(ii,jj)
507 IF (iget(177) > 0)
THEN
511 grid1(i,j) = z1d(i,j)
514 if(grib==
'grib2')
then
516 fld_info(cfld)%ifld=iavblfld(iget(177))
522 datapd(i,j,cfld) = grid1(ii,jj)
529 IF (iget(055) > 0)
THEN
533 grid1(i,j) = t1d(i,j)
536 if(grib==
'grib2')
then
538 fld_info(cfld)%ifld=iavblfld(iget(055))
544 datapd(i,j,cfld) = grid1(ii,jj)
551 IF (iget(108) > 0)
THEN
552 CALL calpot(p1d,t1d,grid1(ista:iend,jsta:jend))
553 if(grib==
'grib2')
then
555 fld_info(cfld)%ifld=iavblfld(iget(108))
561 datapd(i,j,cfld) = grid1(ii,jj)
568 IF ((iget(056) > 0).OR.(iget(057) > 0))
THEN
576 if(grib==
'grib2')
then
579 fld_info(cfld)%ifld=iavblfld(iget(056))
585 datapd(i,j,cfld) = grid1(ii,jj)
591 fld_info(cfld)%ifld=iavblfld(iget(057))
597 datapd(i,j,cfld) = grid2(ii,jj)
605 IF (iget(058) > 0)
THEN
609 grid1(i,j) = shr1d(i,j)
612 if(grib==
'grib2')
then
614 fld_info(cfld)%ifld=iavblfld(iget(058))
620 datapd(i,j,cfld) = grid1(ii,jj)
631 IF ((iget(173)>0) .OR. (iget(174)>0) .OR. &
632 (iget(175)>0) .OR. (iget(176)>0))
THEN
634 allocate(maxwp(ista:iend,jsta:jend), maxwz(ista:iend,jsta:jend), &
635 maxwu(ista:iend,jsta:jend), maxwv(ista:iend,jsta:jend),maxwt(ista:iend,jsta:jend))
652 IF (abs(pmid(i,j,l)-spval)<=small .OR. &
653 abs(uh(i,j,l)-spval)<=small .OR. &
654 abs(uh(i,j,l)-spval)<=small .OR. &
655 abs(vh(i,j,l)-spval)<=small .OR. &
656 abs(t(i,j,l)-spval)<=small .OR. &
657 abs(zmid(i,j,l)-spval)<=small) cycle loopi
660 CALL
mxwind(lm,pmid(i,j,1:lm),uh(i,j,1:lm) &
662 ,vh(i,j,1:lm),t(i,j,1:lm),zmid(i,j,1:lm) &
664 ,maxwp(i,j),maxwu(i,j),maxwv(i,j) &
666 ,maxwt(i,j),maxwz(i,j))
670 IF (iget(173) > 0)
THEN
674 grid1(i,j) = maxwp(i,j)
677 if(grib==
'grib2')
then
679 fld_info(cfld)%ifld=iavblfld(iget(173))
685 datapd(i,j,cfld) = grid1(ii,jj)
691 IF (iget(398)>0)
THEN
692 CALL icaoheight(maxwp, grid1(ista:iend,jsta:jend))
694 if(grib==
'grib2')
then
696 fld_info(cfld)%ifld=iavblfld(iget(398))
702 datapd(i,j,cfld) = grid1(ii,jj)
708 IF (iget(174) > 0)
THEN
712 grid1(i,j) = maxwz(i,j)
715 if(grib==
'grib2')
then
717 fld_info(cfld)%ifld=iavblfld(iget(174))
723 datapd(i,j,cfld) = grid1(ii,jj)
730 IF ((iget(175) > 0).OR.(iget(176) > 0))
THEN
734 grid1(i,j) = maxwu(i,j)
735 grid2(i,j) = maxwv(i,j)
738 if(grib==
'grib2')
then
740 fld_info(cfld)%ifld=iavblfld(iget(175))
746 datapd(i,j,cfld) = grid1(ii,jj)
750 fld_info(cfld)%ifld=iavblfld(iget(176))
756 datapd(i,j,cfld) = grid2(ii,jj)
762 IF (iget(314) > 0)
THEN
766 grid1(i,j)=maxwt(i,j)
769 if(grib==
'grib2')
then
771 fld_info(cfld)%ifld=iavblfld(iget(314))
777 datapd(i,j,cfld) = grid1(ii,jj)
782 deallocate(maxwp,maxwz,maxwu,maxwv,maxwt)
788 IF ( (iget(059)>0.or.iget(586)>0).OR.iget(911)>0.OR. &
789 (iget(060)>0.or.iget(576)>0).OR. &
790 (iget(061)>0.or.iget(577)>0).OR. &
791 (iget(601)>0.or.iget(602)>0.or.iget(603)>0).OR. &
792 (iget(604)>0.or.iget(605)>0).OR. &
793 (iget(451)>0.or.iget(578)>0).OR.iget(580)>0 )
THEN
795 ALLOCATE(t7d(ista:iend,jsta:jend,nfd), q7d(ista:iend,jsta:jend,nfd), &
796 u7d(ista:iend,jsta:jend,nfd), v6d(ista:iend,jsta:jend,nfd), &
797 p7d(ista:iend,jsta:jend,nfd), icingfd(ista:iend,jsta:jend,nfd),&
798 aerfd(ista:iend,jsta:jend,nfd,nbin_du))
805 IF (iget(059)>0)
THEN
806 IF (lvls(ifd,iget(059))>1) itypefdlvl(ifd)=2
808 IF (iget(911)>0)
THEN
809 IF (lvls(ifd,iget(911))>1) itypefdlvl(ifd)=2
812 IF (iget(586)>0)
THEN
813 IF(lvls(ifd,iget(586))>0) itypefdlvl(ifd)=2
815 IF (iget(060)>0)
THEN
816 IF (lvls(ifd,iget(060))>1) itypefdlvl(ifd)=2
818 IF (iget(576)>0)
THEN
819 IF(lvls(ifd,iget(576))>0) itypefdlvl(ifd)=2
821 IF (iget(061)>0)
THEN
822 IF (lvls(ifd,iget(061))>1) itypefdlvl(ifd)=2
824 IF (iget(577)>0)
then
825 if(lvls(ifd,iget(577))>0) itypefdlvl(ifd)=2
827 IF (iget(451)>0)
THEN
828 IF (lvls(ifd,iget(451))>1) itypefdlvl(ifd)=2
830 IF (iget(578)>0)
then
831 if(lvls(ifd,iget(578))>0) itypefdlvl(ifd)=2
834 IF (iget(580)>0)
then
835 if(lvls(ifd,iget(580))>1) itypefdlvl(ifd)=2
837 IF (iget(587)>0)
then
838 if(lvls(ifd,iget(587))>0) itypefdlvl(ifd)=2
841 IF (iget(601)>0)
THEN
842 IF (lvls(ifd,iget(601))>1) itypefdlvl(ifd)=2
844 IF (iget(602)>0)
THEN
845 IF (lvls(ifd,iget(602))>1) itypefdlvl(ifd)=2
847 IF (iget(603)>0)
THEN
848 IF (lvls(ifd,iget(603))>1) itypefdlvl(ifd)=2
850 IF (iget(604)>0)
THEN
851 IF (lvls(ifd,iget(604))>1) itypefdlvl(ifd)=2
853 IF (iget(605)>0)
THEN
854 IF (lvls(ifd,iget(605))>1) itypefdlvl(ifd)=2
861 CALL fdlvl(itypefdlvl,t7d,q7d,u7d,v6d,p7d,icingfd,aerfd)
869 work1 = lvls(ifd,iget1)
874 work2 = lvls(ifd,iget2)
878 IF (iget1 > 0 .or. iget2 > 0)
THEN
879 IF (work1 > 0 .or. work2 > 0)
THEN
884 grid1(i,j) = t7d(i,j,ifd)
888 if(grib ==
'grib2')
then
890 fld_info(cfld)%ifld = iavblfld(iget1)
891 fld_info(cfld)%lvl = lvlsxml(ifd,iget1)
897 datapd(i,j,cfld) = grid1(ii,jj)
903 if(grib ==
'grib2')
then
905 fld_info(cfld)%ifld = iavblfld(iget2)
906 fld_info(cfld)%lvl = lvlsxml(ifd,iget2)
912 datapd(i,j,cfld) = grid1(ii,jj)
921 IF (iget(911)>0)
THEN
922 IF (lvls(ifd,iget(911))>0)
THEN
925 if ( t7d(i,j,ifd) > 600 )
then
928 grid1(i,j)=t7d(i,j,ifd)*(1.+0.608*q7d(i,j,ifd))
933 IF(lvls(ifd,iget(911))>0)
then
934 if(grib==
'grib2')
then
936 fld_info(cfld)%ifld=iavblfld(iget(911))
937 fld_info(cfld)%lvl=lvlsxml(ifd,iget(911))
938 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
949 work1 = lvls(ifd,iget1)
954 work2 = lvls(ifd,iget2)
958 IF (iget1 > 0 .or. iget2 > 0)
THEN
959 IF (work1 > 0 .or. work2 > 0)
THEN
963 grid1(i,j) = q7d(i,j,ifd)
967 if(grib ==
'grib2')
then
969 fld_info(cfld)%ifld = iavblfld(iget1)
970 fld_info(cfld)%lvl = lvlsxml(ifd,iget1)
976 datapd(i,j,cfld) = grid1(ii,jj)
982 if(grib ==
'grib2')
then
984 fld_info(cfld)%ifld = iavblfld(iget2)
985 fld_info(cfld)%lvl = lvlsxml(ifd,iget2)
991 datapd(i,j,cfld) = grid1(ii,jj)
1003 work1 = lvls(ifd,iget1)
1008 work2 = lvls(ifd,iget2)
1012 IF (iget1 > 0 .or. iget2 > 0)
THEN
1013 IF (work1 > 0 .or. work2 > 0)
THEN
1017 grid1(i,j) = p7d(i,j,ifd)
1021 if(grib ==
'grib2')
then
1023 fld_info(cfld)%ifld = iavblfld(iget1)
1024 fld_info(cfld)%lvl = lvlsxml(ifd,iget1)
1030 datapd(i,j,cfld) = grid1(ii,jj)
1036 if(grib ==
'grib2')
then
1038 fld_info(cfld)%ifld = iavblfld(iget2)
1039 fld_info(cfld)%lvl = lvlsxml(ifd,iget2)
1045 datapd(i,j,cfld) = grid1(ii,jj)
1057 work1 = lvls(ifd,iget1)
1062 work2 = lvls(ifd,iget2)
1066 IF (iget1 > 0 .or. iget2 > 0)
THEN
1067 IF (work1 > 0 .or. work2 > 0)
THEN
1071 grid1(i,j) = icingfd(i,j,ifd)
1075 if(grib ==
'grib2')
then
1077 fld_info(cfld)%ifld = iavblfld(iget1)
1078 fld_info(cfld)%lvl = lvlsxml(ifd,iget1)
1084 datapd(i,j,cfld) = grid1(ii,jj)
1090 if(grib ==
'grib2')
then
1092 fld_info(cfld)%ifld = iavblfld(iget2)
1093 fld_info(cfld)%lvl = lvlsxml(ifd,iget2)
1099 datapd(i,j,cfld) = grid1(ii,jj)
1109 IF (iget(601)>0)
THEN
1110 IF (lvls(ifd,iget(601))>0)
THEN
1114 grid1(i,j)=aerfd(i,j,ifd,1)
1117 if(iget(601)>0)
then
1118 if(grib==
'grib2')
then
1120 fld_info(cfld)%ifld=iavblfld(iget(601))
1121 fld_info(cfld)%lvl=lvlsxml(ifd,iget(601))
1127 datapd(i,j,cfld) = grid1(ii,jj)
1135 IF (iget(602)>0)
THEN
1136 IF (lvls(ifd,iget(602))>0)
THEN
1140 grid1(i,j)=aerfd(i,j,ifd,2)
1143 if(iget(602)>0)
then
1144 if(grib==
'grib2')
then
1146 fld_info(cfld)%ifld=iavblfld(iget(602))
1147 fld_info(cfld)%lvl=lvlsxml(ifd,iget(602))
1153 datapd(i,j,cfld) = grid1(ii,jj)
1161 IF (iget(603)>0)
THEN
1162 IF (lvls(ifd,iget(603))>0)
THEN
1166 grid1(i,j)=aerfd(i,j,ifd,3)
1169 if(iget(603)>0)
then
1170 if(grib==
'grib2')
then
1172 fld_info(cfld)%ifld=iavblfld(iget(603))
1173 fld_info(cfld)%lvl=lvlsxml(ifd,iget(603))
1179 datapd(i,j,cfld) = grid1(ii,jj)
1187 IF (iget(604)>0)
THEN
1188 IF (lvls(ifd,iget(604))>0)
THEN
1192 grid1(i,j)=aerfd(i,j,ifd,4)
1195 if(iget(604)>0)
then
1196 if(grib==
'grib2')
then
1198 fld_info(cfld)%ifld=iavblfld(iget(604))
1199 fld_info(cfld)%lvl=lvlsxml(ifd,iget(604))
1205 datapd(i,j,cfld) = grid1(ii,jj)
1213 IF (iget(605)>0)
THEN
1214 IF (lvls(ifd,iget(605))>0)
THEN
1218 grid1(i,j)=aerfd(i,j,ifd,5)
1221 if(iget(605)>0)
then
1222 if(grib==
'grib2')
then
1224 fld_info(cfld)%ifld=iavblfld(iget(605))
1225 fld_info(cfld)%lvl=lvlsxml(ifd,iget(605))
1231 datapd(i,j,cfld) = grid1(ii,jj)
1242 IF ((iget(060)>0).OR.(iget(061)>0))
THEN
1246 grid1(i,j)=u7d(i,j,ifd)
1247 grid2(i,j)=v6d(i,j,ifd)
1250 IF (iget(060)>0)
THEN
1251 IF (lvls(ifd,iget(060))>0)
then
1252 if(grib==
'grib2')
then
1254 fld_info(cfld)%ifld=iavblfld(iget(060))
1255 fld_info(cfld)%lvl=lvlsxml(ifd,iget(060))
1261 datapd(i,j,cfld) = grid1(ii,jj)
1267 IF (iget(061)>0)
THEN
1268 IF (lvls(ifd,iget(061))>0)
THEN
1269 if(grib==
'grib2')
then
1271 fld_info(cfld)%ifld=iavblfld(iget(061))
1272 fld_info(cfld)%lvl=lvlsxml(ifd,iget(061))
1278 datapd(i,j,cfld) = grid2(ii,jj)
1287 IF ((iget(576)>0).OR.(iget(577)>0))
THEN
1291 grid1(i,j) = u7d(i,j,ifd)
1292 grid2(i,j) = v6d(i,j,ifd)
1295 IF (iget(576)>0)
THEN
1296 IF (lvls(ifd,iget(576))>0)
then
1297 if(grib==
'grib2')
then
1299 fld_info(cfld)%ifld=iavblfld(iget(576))
1300 fld_info(cfld)%lvl=lvlsxml(ifd,iget(576))
1306 datapd(i,j,cfld) = grid1(ii,jj)
1312 IF (iget(577)>0)
THEN
1313 IF (lvls(ifd,iget(577))>0)
THEN
1314 if(grib==
'grib2')
then
1316 fld_info(cfld)%ifld=iavblfld(iget(577))
1317 fld_info(cfld)%lvl=lvlsxml(ifd,iget(577))
1323 datapd(i,j,cfld) = grid2(ii,jj)
1332 DEALLOCATE(t7d,q7d,u7d,v6d,p7d,icingfd,aerfd)
1338 IF(iget(467)>0.or.iget(468)>0.or.iget(469)>0)
THEN
1339 if(iget(467)>0)
THEN
1340 n=iavblfld(iget(467))
1341 nfdctl=
size(pset%param(n)%level)
1342 if(
allocated(itypefdlvlctl))
deallocate(itypefdlvlctl)
1343 allocate(itypefdlvlctl(nfdctl))
1345 itypefdlvlctl(ifd)=lvls(ifd,iget(467))
1347 if(
allocated(htfdctl))
deallocate(htfdctl)
1348 allocate(htfdctl(nfdctl))
1349 htfdctl=pset%param(n)%level
1351 allocate(gtgfd(ista:iend,jsta:jend,nfdctl))
1352 call fdlvl_mass(itypefdlvlctl,nfdctl,htfdctl,gtg,gtgfd)
1355 IF (lvls(ifd,iget(467))>0)
THEN
1359 grid1(i,j)=gtgfd(i,j,ifd)
1362 if(grib==
'grib2')
then
1364 fld_info(cfld)%ifld=iavblfld(iget(467))
1365 fld_info(cfld)%lvl=lvlsxml(ifd,iget(467))
1371 datapd(i,j,cfld) = grid1(ii,jj)
1379 if(iget(468)>0)
THEN
1380 n=iavblfld(iget(468))
1381 nfdctl=
size(pset%param(n)%level)
1382 if(
allocated(itypefdlvlctl))
deallocate(itypefdlvlctl)
1383 allocate(itypefdlvlctl(nfdctl))
1385 itypefdlvlctl(ifd)=lvls(ifd,iget(468))
1387 if(
allocated(htfdctl))
deallocate(htfdctl)
1388 allocate(htfdctl(nfdctl))
1389 htfdctl=pset%param(n)%level
1390 allocate(catfd(ista:iend,jsta:jend,nfdctl))
1391 call fdlvl_mass(itypefdlvlctl,nfdctl,htfdctl,catedr,catfd)
1393 IF (lvls(ifd,iget(468))>0)
THEN
1397 grid1(i,j)=catfd(i,j,ifd)
1400 if(grib==
'grib2')
then
1402 fld_info(cfld)%ifld=iavblfld(iget(468))
1403 fld_info(cfld)%lvl=lvlsxml(ifd,iget(468))
1409 datapd(i,j,cfld) = grid1(ii,jj)
1417 if(iget(469)>0)
THEN
1418 n=iavblfld(iget(469))
1419 nfdctl=
size(pset%param(n)%level)
1420 if(
allocated(itypefdlvlctl))
deallocate(itypefdlvlctl)
1421 allocate(itypefdlvlctl(nfdctl))
1423 itypefdlvlctl(ifd)=lvls(ifd,iget(469))
1425 if(
allocated(htfdctl))
deallocate(htfdctl)
1426 allocate(htfdctl(nfdctl))
1427 htfdctl=pset%param(n)%level
1428 allocate(mwtfd(ista:iend,jsta:jend,nfdctl))
1429 call fdlvl_mass(itypefdlvlctl,nfdctl,htfdctl,mwt,mwtfd)
1431 IF (lvls(ifd,iget(469))>0)
THEN
1435 grid1(i,j)=mwtfd(i,j,ifd)
1438 if(grib==
'grib2')
then
1440 fld_info(cfld)%ifld=iavblfld(iget(469))
1441 fld_info(cfld)%lvl=lvlsxml(ifd,iget(469))
1447 datapd(i,j,cfld) = grid1(ii,jj)
1455 if(
allocated(gtgfd))
deallocate(gtgfd)
1456 if(
allocated(catfd))
deallocate(catfd)
1457 if(
allocated(mwtfd))
deallocate(mwtfd)
1459 if(
allocated(itypefdlvlctl))
deallocate(itypefdlvlctl)
1460 if(
allocated(htfdctl))
deallocate(htfdctl)
1467 IF ( (iget(062)>0).OR.(iget(063)>0) )
THEN
1468 CALL frzlvl(z1d,rh1d,p1d)
1471 IF (iget(062)>0)
THEN
1476 IF (submodelname ==
'RTMA')
THEN
1477 freezelvl(i,j)=grid1(i,j)
1481 CALL bound(grid1,d00,h99999)
1482 if(grib==
'grib2')
then
1484 fld_info(cfld)%ifld=iavblfld(iget(062))
1490 datapd(i,j,cfld) = grid1(ii,jj)
1497 IF (iget(063)>0)
THEN
1501 grid1(i,j) = rh1d(i,j)
1504 CALL sclfld(grid1(ista:iend,jsta:jend),h100,im,jm)
1505 CALL bound(grid1,h1,h100)
1506 if(grib==
'grib2')
then
1508 fld_info(cfld)%ifld=iavblfld(iget(063))
1514 datapd(i,j,cfld) = grid1(ii,jj)
1521 IF (iget(753)>0)
THEN
1525 grid1(i,j) = p1d(i,j)
1528 if(grib==
'grib2')
then
1530 fld_info(cfld)%ifld=iavblfld(iget(753))
1536 datapd(i,j,cfld) = grid1(ii,jj)
1544 IF (iget(165)>0 .OR. iget(350)>0.OR. iget(756)>0)
THEN
1545 CALL frzlvl2(tfrz,z1d,rh1d,p1d)
1548 IF (iget(165)>0)
THEN
1555 CALL bound(grid1,d00,h99999)
1556 if(grib==
'grib2')
then
1558 fld_info(cfld)%ifld=iavblfld(iget(165))
1564 datapd(i,j,cfld) = grid1(ii,jj)
1571 IF (iget(350)>0)
THEN
1576 IF(rh1d(i,j) < spval) grid1(i,j)=rh1d(i,j)*100.
1579 CALL bound(grid1,h1,h100)
1580 if(grib==
'grib2')
then
1582 fld_info(cfld)%ifld=iavblfld(iget(350))
1588 datapd(i,j,cfld) = grid1(ii,jj)
1595 IF (iget(756)>0)
THEN
1599 grid1(i,j) = p1d(i,j)
1602 if(grib==
'grib2')
then
1604 fld_info(cfld)%ifld=iavblfld(iget(756))
1610 datapd(i,j,cfld) = grid1(ii,jj)
1620 IF (iget(776)>0 .OR. iget(777)>0.OR. iget(778)>0)
THEN
1621 CALL frzlvl2(263.15,z1d,rh1d,p1d)
1624 IF (iget(776)>0)
THEN
1631 CALL bound(grid1,d00,h99999)
1632 if(grib==
'grib2')
then
1634 fld_info(cfld)%ifld=iavblfld(iget(776))
1640 datapd(i,j,cfld) = grid1(ii,jj)
1647 IF (iget(777)>0)
THEN
1652 IF(rh1d(i,j) < spval) grid1(i,j)=rh1d(i,j)*100.
1655 CALL bound(grid1,h1,h100)
1656 if(grib==
'grib2')
then
1658 fld_info(cfld)%ifld=iavblfld(iget(777))
1664 datapd(i,j,cfld) = grid1(ii,jj)
1671 IF (iget(778)>0)
THEN
1678 if(grib==
'grib2')
then
1680 fld_info(cfld)%ifld=iavblfld(iget(778))
1686 datapd(i,j,cfld) = grid1(ii,jj)
1696 IF (iget(779)>0 .OR. iget(780)>0.OR. iget(781)>0)
THEN
1697 CALL frzlvl2(253.15,z1d,rh1d,p1d)
1700 IF (iget(779)>0)
THEN
1707 CALL bound(grid1,d00,h99999)
1708 if(grib==
'grib2')
then
1710 fld_info(cfld)%ifld=iavblfld(iget(779))
1716 datapd(i,j,cfld) = grid1(ii,jj)
1723 IF (iget(780)>0)
THEN
1728 IF(rh1d(i,j) < spval) grid1(i,j)=rh1d(i,j)*100.
1731 CALL bound(grid1,h1,h100)
1732 if(grib==
'grib2')
then
1734 fld_info(cfld)%ifld=iavblfld(iget(780))
1740 datapd(i,j,cfld) = grid1(ii,jj)
1747 IF (iget(781)>0)
THEN
1754 if(grib==
'grib2')
then
1756 fld_info(cfld)%ifld=iavblfld(iget(781))
1762 datapd(i,j,cfld) = grid1(ii,jj)
1770 allocate(pbnd(ista:iend,jsta:jend,nbnd), tbnd(ista:iend,jsta:jend,nbnd), &
1771 qbnd(ista:iend,jsta:jend,nbnd), ubnd(ista:iend,jsta:jend,nbnd), &
1772 vbnd(ista:iend,jsta:jend,nbnd), rhbnd(ista:iend,jsta:jend,nbnd), &
1773 wbnd(ista:iend,jsta:jend,nbnd))
1778 IF ( (iget(067)>0).OR.(iget(068)>0).OR. &
1779 (iget(069)>0).OR.(iget(070)>0).OR. &
1780 (iget(071)>0).OR.(iget(072)>0).OR. &
1781 (iget(073)>0).OR.(iget(074)>0).OR. &
1782 (iget(088)>0).OR.(iget(089)>0).OR. &
1783 (iget(090)>0).OR.(iget(075)>0).OR. &
1784 (iget(109)>0).OR.(iget(110)>0).OR. &
1785 (iget(031)>0).OR.(iget(032)>0).OR. &
1787 (iget(107)>0).OR.(iget(091)>0).OR. &
1788 (iget(092)>0).OR.(iget(093)>0).OR. &
1789 (iget(094)>0).OR.(iget(095)>0).OR. &
1790 (iget(096)>0).OR.(iget(097)>0).OR. &
1791 (iget(098)>0).OR.(iget(221)>0) )
THEN
1793 allocate(omgbnd(ista:iend,jsta:jend,nbnd),pwtbnd(ista:iend,jsta:jend,nbnd), &
1794 qcnvbnd(ista:iend,jsta:jend,nbnd),lvlbnd(ista:iend,jsta:jend,nbnd), &
1795 lb2(ista:iend,jsta:jend))
1798 CALL bndlyr(pbnd,tbnd,qbnd,rhbnd,ubnd,vbnd, &
1799 wbnd,omgbnd,pwtbnd,qcnvbnd,lvlbnd)
1813 IF (iget(067)>0)
THEN
1814 IF (lvls(lbnd,iget(067))>0)
THEN
1818 grid1(i,j) = pbnd(i,j,lbnd)
1821 if(grib==
'grib2')
then
1823 fld_info(cfld)%ifld=iavblfld(iget(067))
1824 fld_info(cfld)%lvl=lvlsxml(lbnd,iget(067))
1830 datapd(i,j,cfld) = grid1(ii,jj)
1838 IF (iget(068)>0)
THEN
1839 IF (lvls(lbnd,iget(068))>0)
THEN
1843 grid1(i,j)=tbnd(i,j,lbnd)
1846 if(grib==
'grib2')
then
1848 fld_info(cfld)%ifld=iavblfld(iget(068))
1849 fld_info(cfld)%lvl=lvlsxml(lbnd,iget(068))
1855 datapd(i,j,cfld) = grid1(ii,jj)
1863 IF (iget(069)>0)
THEN
1864 IF (lvls(lbnd,iget(069))>0)
THEN
1865 CALL calpot(pbnd(ista,jsta,lbnd),tbnd(ista,jsta,lbnd),grid1(ista:iend,jsta:jend))
1866 if(grib==
'grib2')
then
1868 fld_info(cfld)%ifld=iavblfld(iget(069))
1869 fld_info(cfld)%lvl=lvlsxml(ifd,iget(069))
1875 datapd(i,j,cfld) = grid1(ii,jj)
1883 IF (iget(072)>0)
THEN
1884 IF (lvls(lbnd,iget(072))>0)
THEN
1888 grid1(i,j)=rhbnd(i,j,lbnd)
1891 CALL sclfld(grid1(ista:iend,jsta:jend),h100,im,jm)
1892 CALL bound(grid1,h1,h100)
1893 if(grib==
'grib2')
then
1895 fld_info(cfld)%lvl=lvlsxml(lbnd,iget(072))
1896 fld_info(cfld)%ifld=iavblfld(iget(072))
1902 datapd(i,j,cfld) = grid1(ii,jj)
1910 IF (iget(070)>0)
THEN
1911 IF (lvls(lbnd,iget(070))>0)
THEN
1912 CALL caldwp(pbnd(ista:iend,jsta:jend,lbnd), qbnd(ista:iend,jsta:jend,lbnd), &
1913 grid1(ista:iend,jsta:jend), tbnd(ista:iend,jsta:jend,lbnd))
1914 if(grib==
'grib2')
then
1916 fld_info(cfld)%ifld=iavblfld(iget(070))
1917 fld_info(cfld)%lvl=lvlsxml(lbnd,iget(070))
1923 datapd(i,j,cfld) = grid1(ii,jj)
1931 IF (iget(071)>0)
THEN
1932 IF (lvls(lbnd,iget(071))>0)
THEN
1936 grid1(i,j)=qbnd(i,j,lbnd)
1939 CALL bound(grid1,h1m12,h99999)
1940 if(grib==
'grib2')
then
1942 fld_info(cfld)%ifld=iavblfld(iget(071))
1943 fld_info(cfld)%lvl=lvlsxml(lbnd,iget(071))
1949 datapd(i,j,cfld) = grid1(ii,jj)
1957 IF (iget(088)>0)
THEN
1958 IF (lvls(lbnd,iget(088))>0)
THEN
1962 grid1(i,j) = qcnvbnd(i,j,lbnd)
1965 if(grib==
'grib2')
then
1967 fld_info(cfld)%ifld=iavblfld(iget(088))
1968 fld_info(cfld)%lvl=lvlsxml(lbnd,iget(088))
1974 datapd(i,j,cfld) = grid1(ii,jj)
1987 IF(lvls(lbnd,iget(073))>0)field1=.true.
1990 IF(lvls(lbnd,iget(074))>0)field2=.true.
1993 IF(field1.OR.field2)
THEN
1997 grid1(i,j) = ubnd(i,j,lbnd)
1998 grid2(i,j) = vbnd(i,j,lbnd)
2002 IF (iget(073)>0)
THEN
2003 IF (lvls(lbnd,iget(073))>0)
then
2004 if(grib==
'grib2')
then
2006 fld_info(cfld)%ifld=iavblfld(iget(073))
2007 fld_info(cfld)%lvl=lvlsxml(lbnd,iget(073))
2013 datapd(i,j,cfld) = grid1(ii,jj)
2019 IF (iget(074)>0)
THEN
2020 IF (lvls(lbnd,iget(074))>0)
THEN
2021 if(grib==
'grib2')
then
2023 fld_info(cfld)%ifld=iavblfld(iget(074))
2024 fld_info(cfld)%lvl=lvlsxml(lbnd,iget(074))
2030 datapd(i,j,cfld) = grid2(ii,jj)
2039 IF (iget(090)>0)
THEN
2040 IF (lvls(lbnd,iget(090))>0)
THEN
2044 grid1(i,j) = omgbnd(i,j,lbnd)
2047 if(grib==
'grib2')
then
2049 fld_info(cfld)%ifld=iavblfld(iget(090))
2050 fld_info(cfld)%lvl=lvlsxml(lbnd,iget(090))
2056 datapd(i,j,cfld) = grid1(ii,jj)
2064 IF (iget(089)>0)
THEN
2065 IF (lvls(lbnd,iget(089))>0)
THEN
2069 grid1(i,j) = pwtbnd(i,j,lbnd)
2072 CALL bound(grid1,d00,h99999)
2073 if(grib==
'grib2')
then
2075 fld_info(cfld)%ifld=iavblfld(iget(089))
2076 fld_info(cfld)%lvl=lvlsxml(lbnd,iget(089))
2082 datapd(i,j,cfld) = grid1(ii,jj)
2090 IF (iget(075)>0 .OR. iget(031)>0 .OR. iget(573)>0)
THEN
2091 CALL otlft(pbnd(ista,jsta,lbnd),tbnd(ista,jsta,lbnd), &
2092 qbnd(ista,jsta,lbnd),grid1(ista:iend,jsta:jend))
2094 IF (lvls(lbnd,iget(075))>0)
THEN
2095 if(grib==
'grib2')
then
2097 fld_info(cfld)%ifld=iavblfld(iget(075))
2098 fld_info(cfld)%lvl=lvlsxml(lbnd,iget(075))
2104 datapd(i,j,cfld) = grid1(ii,jj)
2110 IF(iget(031)>0 .or. iget(573)>0)
THEN
2114 egrid2(i,j) = min(egrid2(i,j),grid1(i,j))
2122 deallocate(omgbnd,pwtbnd,qcnvbnd)
2126 IF (iget(031)>0 .OR. iget(573)>0 )
THEN
2146 grid1(i,j)=egrid2(i,j)
2151 if (iget(031)>0)
then
2152 if(grib==
'grib2')
then
2154 fld_info(cfld)%ifld=iavblfld(iget(031))
2155 datapd(1:iend-ista+1,1:jend-jsta+1,cfld)=grid1(ista:iend,jsta:jend)
2159 if(iget(573)> 0 )
THEN
2160 if(grib==
'grib2')
then
2162 fld_info(cfld)%ifld=iavblfld(iget(573))
2168 datapd(i,j,cfld) = grid1(ii,jj)
2182 IF(lvls(2,iget(032))>0)field1=.true.
2185 IF(lvls(2,iget(107))>0)field2=.true.
2200 IF(field1.OR.field2)
THEN
2206 egrid1(i,j) = -h99999
2207 egrid2(i,j) = -h99999
2212 CALL calthte(pbnd(ista,jsta,lbnd),tbnd(ista,jsta,lbnd), &
2213 qbnd(ista,jsta,lbnd),egrid1)
2217 IF (egrid1(i,j) > egrid2(i,j))
THEN
2218 egrid2(i,j) = egrid1(i,j)
2219 lb2(i,j) = lvlbnd(i,j,lbnd)
2220 p1d(i,j) = pbnd(i,j,lbnd)
2221 t1d(i,j) = tbnd(i,j,lbnd)
2222 q1d(i,j) = qbnd(i,j,lbnd)
2229 CALL calcape(itype,dpbnd,p1d,t1d,q1d,lb2,egrid1, &
2230 egrid2,egrid3,egrid4,egrid5)
2232 IF (iget(566)>0)
THEN
2238 IF(t1d(i,j) < spval) grid1(i,j) = egrid1(i,j)
2241 CALL bound(grid1,d00,h99999)
2242 if(grib==
'grib2')
then
2244 fld_info(cfld)%ifld=iavblfld(iget(566))
2245 fld_info(cfld)%lvl=lvlsxml(1,iget(566))
2251 datapd(i,j,cfld) = grid1(ii,jj)
2257 IF (iget(567) > 0)
THEN
2263 IF(t1d(i,j) < spval) grid1(i,j) = - egrid2(i,j)
2267 CALL bound(grid1,d00,h99999)
2272 IF(t1d(i,j) < spval) grid1(i,j) = - grid1(i,j)
2276 if(grib==
'grib2')
then
2278 fld_info(cfld)%ifld=iavblfld(iget(567))
2279 fld_info(cfld)%lvl=lvlsxml(1,iget(567))
2285 datapd(i,j,cfld) = grid1(ii,jj)
2294 IF(iget(221) > 0)
THEN
2298 grid1(i,j) = pblh(i,j)
2301 if(grib==
'grib2')
then
2303 fld_info(cfld)%ifld=iavblfld(iget(221))
2309 datapd(i,j,cfld) = grid1(ii,jj)
2317 IF ( (iget(109)>0).OR.(iget(110)>0) )
THEN
2318 CALL callcl(pbnd(ista,jsta,1),tbnd(ista,jsta,1), &
2319 qbnd(ista,jsta,1),egrid1,egrid2)
2320 IF (iget(109)>0)
THEN
2325 IF(tbnd(i,j,1) < spval) grid1(i,j) = egrid2(i,j)
2328 if(grib==
'grib2')
then
2330 fld_info(cfld)%ifld=iavblfld(iget(109))
2336 datapd(i,j,cfld) = grid1(ii,jj)
2341 IF (iget(110)>0)
THEN
2346 IF(tbnd(i,j,1) < spval) grid1(i,j) = egrid1(i,j)
2349 if(grib==
'grib2')
then
2351 fld_info(cfld)%ifld=iavblfld(iget(110))
2357 datapd(i,j,cfld) = grid1(ii,jj)
2366 IF ( (iget(091)>0).OR.(iget(092)>0).OR. &
2367 (iget(093)>0).OR.(iget(094)>0).OR. &
2368 (iget(095)>0).OR.(iget(095)>0).OR. &
2369 (iget(096)>0).OR.(iget(097)>0).OR. &
2370 (iget(098)>0) )
THEN
2372 allocate(t78483(ista:iend,jsta:jend), t89671(ista:iend,jsta:jend), &
2373 p78483(ista:iend,jsta:jend), p89671(ista:iend,jsta:jend))
2377 IF (iget(097)>0.OR.iget(098)>0)
THEN
2381 p78483(i,j) = log(pint(i,j,nint(lmh(i,j)))*0.78483)
2382 p89671(i,j) = log(pint(i,j,nint(lmh(i,j)))*0.89671)
2391 pkl1=0.5*(alpint(i,j,l)+alpint(i,j,l+1))
2392 pku1=0.5*(alpint(i,j,l)+alpint(i,j,l-1))
2395 IF(p78483(i,j) < pkl1.AND.p78483(i,j) > pku1)
THEN
2396 fac1 = (pkl1-p78483(i,j))/(pkl1-pku1)
2397 fac2 = (p78483(i,j)-pku1)/(pkl1-pku1)
2398 t78483(i,j) = t(i,j,l)*fac2 + t(i,j,l-1)*fac1
2401 IF(p89671(i,j) < pkl1.AND.p89671(i,j) > pku1)
THEN
2402 fac1 = (pkl1-p89671(i,j))/(pkl1-pku1)
2403 fac2 = (p89671(i,j)-pku1)/(pkl1-pku1)
2404 t89671(i,j) = t(i,j,l)*fac2 + t(i,j,l-1)*fac1
2415 IF(.NOT. done(i,j))
THEN
2417 tl = 0.5*(t(i,j,lm-2)+t(i,j,lm-1))
2418 ql = 0.5*(q(i,j,lm-2)+q(i,j,lm-1))
2419 qsat = pq0/pl *exp(a2*(tl-a3)/(tl-a4))
2437 t89671(i,j) = tl * (p89671(i,j)/pl)**rgamog
2450 IF(.NOT. done1(i,j))
THEN
2452 tl = 0.5*(t(i,j,lm-2)+t(i,j,lm-1))
2453 ql = 0.5*(q(i,j,lm-2)+q(i,j,lm-1))
2454 qsat = pq0/pl *exp(a2*(tl-a3)/(tl-a4))
2472 t78483(i,j) = tl * (p78483(i,j)/pl)**rgamog
2480 IF (iget(097) > 0)
THEN
2485 IF(t(i,j,lm) < spval) grid1(i,j) = t89671(i,j)
2490 if(grib==
'grib2')
then
2492 fld_info(cfld)%ifld=iavblfld(iget(097))
2493 fld_info(cfld)%lvl=lvlsxml(1,iget(097))
2499 datapd(i,j,cfld) = grid1(ii,jj)
2506 IF (iget(098)>0)
THEN
2511 IF(t(i,j,lm) < spval) grid1(i,j) = t78483(i,j)
2514 if(grib==
'grib2')
then
2516 fld_info(cfld)%ifld=iavblfld(iget(098))
2517 fld_info(cfld)%lvl=lvlsxml(1,iget(098))
2523 datapd(i,j,cfld) = grid1(ii,jj)
2528 deallocate(t78483, t89671, p78483, p89671)
2535 IF ( (iget(091)>0).OR.(iget(092)>0).OR. &
2536 (iget(093)>0).OR.(iget(094)>0).OR. &
2537 (iget(095)>0).OR.(iget(095)>0).OR. &
2538 (iget(096)>0) )
THEN
2542 IF (iget(091)>0)
THEN
2546 grid1(i,j) = pbnd(i,j,1)
2549 if(grib==
'grib2')
then
2551 fld_info(cfld)%ifld=iavblfld(iget(091))
2557 datapd(i,j,cfld) = grid1(ii,jj)
2564 IF (iget(092)>0)
THEN
2568 grid1(i,j) = tbnd(i,j,1)
2571 if(grib==
'grib2')
then
2573 fld_info(cfld)%ifld=iavblfld(iget(092))
2574 fld_info(cfld)%lvl=lvlsxml(1,iget(092))
2580 datapd(i,j,cfld) = grid1(ii,jj)
2587 IF (iget(093)>0)
THEN
2591 grid1(i,j) = qbnd(i,j,1)
2594 CALL bound(grid1,h1m12,h99999)
2595 if(grib==
'grib2')
then
2597 fld_info(cfld)%ifld=iavblfld(iget(093))
2598 fld_info(cfld)%lvl=lvlsxml(1,iget(093))
2604 datapd(i,j,cfld) = grid1(ii,jj)
2611 IF (iget(094)>0)
THEN
2615 grid1(i,j) = rhbnd(i,j,1)
2618 CALL sclfld(grid1(ista:iend,jsta:jend),h100,im,jm)
2619 CALL bound(grid1,h1,h100)
2620 if(grib==
'grib2')
then
2622 fld_info(cfld)%ifld=iavblfld(iget(094))
2623 fld_info(cfld)%lvl=lvlsxml(1,iget(094))
2629 datapd(i,j,cfld) = grid1(ii,jj)
2636 IF ((iget(095)>0).OR.(iget(096)>0))
THEN
2640 grid1(i,j) = ubnd(i,j,1)
2641 grid2(i,j) = vbnd(i,j,1)
2644 IF (iget(095)>0)
then
2645 if(grib==
'grib2')
then
2647 fld_info(cfld)%ifld=iavblfld(iget(095))
2648 fld_info(cfld)%lvl=lvlsxml(1,iget(095))
2654 datapd(i,j,cfld) = grid1(ii,jj)
2659 IF (iget(096)>0)
then
2660 if(grib==
'grib2')
then
2662 fld_info(cfld)%ifld=iavblfld(iget(096))
2663 fld_info(cfld)%lvl=lvlsxml(1,iget(096))
2669 datapd(i,j,cfld) = grid2(ii,jj)
2685 IF ( (iget(066)>0).OR.(iget(081)>0).OR. &
2686 (iget(082)>0).OR.(iget(104)>0).OR. &
2687 (iget(099)>0).OR.(iget(100)>0).OR. &
2688 (iget(101)>0).OR.(iget(102)>0).OR. &
2689 (iget(103)>0) )
THEN
2693 IF ( (iget(066)>0).OR.(iget(081)>0).OR. &
2694 (iget(082)>0).OR.(iget(104)>0) )
THEN
2695 allocate(rh3310(ista:iend,jsta:jend),rh6610(ista:iend,jsta:jend), &
2696 rh3366(ista:iend,jsta:jend),pw3310(ista:iend,jsta:jend))
2697 CALL lfmfld(rh3310,rh6610,rh3366,pw3310)
2700 IF (iget(066)>0)
THEN
2704 grid1(i,j) = rh3310(i,j)
2707 CALL sclfld(grid1(ista:iend,jsta:jend),h100,im,jm)
2708 CALL bound(grid1,h1,h100)
2709 if(grib==
'grib2')
then
2711 fld_info(cfld)%ifld=iavblfld(iget(066))
2712 fld_info(cfld)%lvl=lvlsxml(1,iget(066))
2718 datapd(i,j,cfld) = grid1(ii,jj)
2727 IF (iget(081)>0)
THEN
2731 grid1(i,j) = rh6610(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(081))
2739 fld_info(cfld)%lvl=lvlsxml(1,iget(081))
2745 datapd(i,j,cfld) = grid1(ii,jj)
2752 IF (iget(082)>0)
THEN
2756 grid1(i,j) = rh3366(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(082))
2764 fld_info(cfld)%lvl=lvlsxml(1,iget(082))
2770 datapd(i,j,cfld) = grid1(ii,jj)
2777 IF (iget(104)>0)
THEN
2781 grid1(i,j) = pw3310(i,j)
2784 CALL bound(grid1,d00,h99999)
2785 if(grib==
'grib2')
then
2787 fld_info(cfld)%ifld=iavblfld(iget(104))
2788 fld_info(cfld)%lvl=lvlsxml(1,iget(104))
2794 datapd(i,j,cfld) = grid1(ii,jj)
2799 deallocate(rh3310,rh6610,rh3366,pw3310)
2804 IF ( (iget(099)>0).OR.(iget(100)>0).OR. &
2805 (iget(101)>0).OR.(iget(102)>0).OR. &
2806 (iget(103)>0) )
THEN
2807 allocate(rh4710(ista_2l:iend_2u,jsta_2l:jend_2u),rh4796(ista_2l:iend_2u,jsta_2l:jend_2u), &
2808 rh1847(ista_2l:iend_2u,jsta_2l:jend_2u))
2809 allocate(rh8498(ista_2l:iend_2u,jsta_2l:jend_2u),qm8510(ista_2l:iend_2u,jsta_2l:jend_2u))
2811 CALL ngmfld(rh4710,rh4796,rh1847,rh8498,qm8510)
2814 IF (iget(099)>0)
THEN
2818 grid1(i,j) = rh4710(i,j)
2821 CALL sclfld(grid1(ista:iend,jsta:jend),h100,im,jm)
2822 CALL bound(grid1,h1,h100)
2823 if(grib==
'grib2')
then
2825 fld_info(cfld)%ifld=iavblfld(iget(099))
2826 fld_info(cfld)%lvl=lvlsxml(1,iget(099))
2832 datapd(i,j,cfld) = grid1(ii,jj)
2839 IF (iget(100)>0)
THEN
2843 grid1(i,j) = rh4796(i,j)
2846 CALL sclfld(grid1(ista:iend,jsta:jend),h100,im,jm)
2847 CALL bound(grid1,h1,h100)
2848 if(grib==
'grib2')
then
2850 fld_info(cfld)%ifld=iavblfld(iget(100))
2851 fld_info(cfld)%lvl=lvlsxml(1,iget(100))
2857 datapd(i,j,cfld) = grid1(ii,jj)
2864 IF (iget(101)>0)
THEN
2868 grid1(i,j) = rh1847(i,j)
2871 CALL sclfld(grid1(ista:iend,jsta:jend),h100,im,jm)
2872 CALL bound(grid1,h1,h100)
2873 if(grib==
'grib2')
then
2875 fld_info(cfld)%ifld=iavblfld(iget(101))
2876 fld_info(cfld)%lvl=lvlsxml(1,iget(101))
2882 datapd(i,j,cfld) = grid1(ii,jj)
2889 IF (iget(102)>0)
THEN
2893 grid1(i,j) = rh8498(i,j)
2896 CALL sclfld(grid1(ista:iend,jsta:jend),h100,im,jm)
2897 CALL bound(grid1,h1,h100)
2898 if(grib==
'grib2')
then
2900 fld_info(cfld)%ifld=iavblfld(iget(102))
2901 fld_info(cfld)%lvl=lvlsxml(1,iget(102))
2907 datapd(i,j,cfld) = grid1(ii,jj)
2914 IF (iget(103)>0)
THEN
2920 IF(qm8510(i,j) < spval) grid1(i,j) = -1.0*qm8510(i,j)
2923 if(grib==
'grib2')
then
2925 fld_info(cfld)%ifld=iavblfld(iget(103))
2926 fld_info(cfld)%lvl=lvlsxml(1,iget(103))
2932 datapd(i,j,cfld) = grid1(ii,jj)
2937 deallocate(rh4710,rh4796,rh1847)
2938 deallocate(rh8498,qm8510)
2942 IF ( (iget(318)>0).OR.(iget(319)>0).OR. &
2944 allocate(rh4410(ista:iend,jsta:jend),rh7294(ista:iend,jsta:jend), &
2945 rh4472(ista:iend,jsta:jend),rh3310(ista:iend,jsta:jend))
2946 CALL lfmfld_gfs(rh4410,rh7294,rh4472,rh3310)
2949 IF (iget(318)>0)
THEN
2954 IF(rh4410(i,j) < spval) grid1(i,j) = rh4410(i,j)*100.
2957 CALL bound(grid1,d00,h100)
2958 if(grib==
'grib2')
then
2960 fld_info(cfld)%ifld=iavblfld(iget(318))
2961 fld_info(cfld)%lvl=lvlsxml(1,iget(318))
2967 datapd(i,j,cfld) = grid1(ii,jj)
2974 IF (iget(319)>0)
THEN
2979 IF(rh7294(i,j) < spval) grid1(i,j) = rh7294(i,j)*100.
2982 CALL bound(grid1,d00,h100)
2983 if(grib==
'grib2')
then
2985 fld_info(cfld)%ifld=iavblfld(iget(319))
2986 fld_info(cfld)%lvl=lvlsxml(1,iget(319))
2992 datapd(i,j,cfld) = grid1(ii,jj)
2999 IF (iget(320)>0)
THEN
3004 IF(rh4472(i,j) < spval) grid1(i,j)=rh4472(i,j)*100.
3007 CALL bound(grid1,d00,h100)
3008 if(grib==
'grib2')
then
3010 fld_info(cfld)%ifld=iavblfld(iget(320))
3011 fld_info(cfld)%lvl=lvlsxml(1,iget(320))
3017 datapd(i,j,cfld) = grid1(ii,jj)
3022 deallocate(rh4410,rh7294,rh4472,rh3310)
3026 IF ( (iget(321)>0).OR.(iget(322)>0).OR. &
3027 (iget(323)>0).OR.(iget(324)>0).OR. &
3028 (iget(325)>0).OR.(iget(326)>0))
THEN
3032 egrid2(i,j) = 0.995*pint(i,j,lm+1)
3033 egrid1(i,j) = log(pmid(i,j,lm)/egrid2(i,j)) &
3034 / log(pmid(i,j,lm)/pmid(i,j,lm-1))
3036 IF (modelname ==
'GFS' .OR. modelname ==
'FV3R')
THEN
3037 egrid1(i,j) = log(pmid(i,j,lm)/egrid2(i,j)) &
3038 / max(1.e-6,log(pmid(i,j,lm)/pmid(i,j,lm-1)))
3039 egrid1(i,j) =max(-10.0,min(egrid1(i,j), 10.0))
3040 IF ( abs(pmid(i,j,lm)-pmid(i,j,lm-1)) < 0.5 )
THEN
3048 IF (iget(321)>0)
THEN
3053 IF(t(i,j,lm)<spval.and.t(i,j,lm-1)<spval.and.egrid1(i,j)<spval)&
3054 grid1(i,j) = t(i,j,lm)+(t(i,j,lm-1)-t(i,j,lm)) &
3058 if(grib==
'grib2')
then
3060 fld_info(cfld)%ifld=iavblfld(iget(321))
3061 fld_info(cfld)%lvl=lvlsxml(1,iget(321))
3067 datapd(i,j,cfld) = grid1(ii,jj)
3075 IF (iget(322)>0)
THEN
3080 IF(t(i,j,lm)<spval.and.t(i,j,lm-1)<spval.and.egrid1(i,j)<spval)&
3081 grid2(i,j) = t(i,j,lm)+(t(i,j,lm-1)-t(i,j,lm)) &
3085 CALL calpot(egrid2,grid2(ista:iend,jsta:jend),grid1(ista:iend,jsta:jend))
3086 if(grib==
'grib2')
then
3088 fld_info(cfld)%ifld=iavblfld(iget(322))
3089 fld_info(cfld)%lvl=lvlsxml(1,iget(322))
3095 datapd(i,j,cfld) = grid1(ii,jj)
3101 IF (iget(323)>0)
THEN
3106 IF(pmid(i,j,lm)<spval.and.pmid(i,j,lm-1)<spval.and.&
3107 q(i,j,lm)<spval.and.q(i,j,lm-1)<spval)
THEN
3108 es1 = min(pmid(i,j,lm),
fpvsnew(t(i,j,lm)))
3109 qs1 = con_eps*es1/(pmid(i,j,lm)+con_epsm1*es1)
3111 es2 = min(pmid(i,j,lm-1),
fpvsnew(t(i,j,lm-1)))
3112 qs2 = con_eps*es2/(pmid(i,j,lm-1)+con_epsm1*es2)
3113 rh2 = q(i,j,lm-1)/qs2
3114 grid1(i,j) = (rh1+(rh2-rh1)*egrid1(i,j))*100.
3118 CALL bound(grid1,d00,h100)
3119 if(grib==
'grib2')
then
3121 fld_info(cfld)%ifld=iavblfld(iget(323))
3122 fld_info(cfld)%lvl=lvlsxml(1,iget(323))
3128 datapd(i,j,cfld) = grid1(ii,jj)
3134 IF (iget(324)>0)
THEN
3139 IF(uh(i,j,lm)<spval.and.uh(i,j,lm-1)<spval.and.egrid1(i,j)<spval)&
3140 grid1(i,j) = uh(i,j,lm)+(uh(i,j,lm-1)-uh(i,j,lm)) &
3144 if(grib==
'grib2')
then
3146 fld_info(cfld)%ifld=iavblfld(iget(324))
3147 fld_info(cfld)%lvl=lvlsxml(1,iget(324))
3153 datapd(i,j,cfld) = grid1(ii,jj)
3159 IF (iget(325)>0)
THEN
3164 IF(vh(i,j,lm)<spval.and.vh(i,j,lm-1)<spval.and.egrid1(i,j)<spval)&
3165 grid1(i,j) = vh(i,j,lm)+(vh(i,j,lm-1)-vh(i,j,lm)) &
3169 if(grib==
'grib2')
then
3171 fld_info(cfld)%ifld=iavblfld(iget(325))
3172 fld_info(cfld)%lvl=lvlsxml(1,iget(325))
3178 datapd(i,j,cfld) = grid1(ii,jj)
3184 IF (iget(326)>0)
THEN
3189 IF(omga(i,j,lm)<spval.and.omga(i,j,lm-1)<spval.and.egrid1(i,j)<spval)&
3190 grid1(i,j) = omga(i,j,lm)+(omga(i,j,lm-1)-omga(i,j,lm))&
3194 if(grib==
'grib2')
then
3196 fld_info(cfld)%ifld=iavblfld(iget(326))
3197 fld_info(cfld)%lvl=lvlsxml(1,iget(326))
3203 datapd(i,j,cfld) = grid1(ii,jj)
3216 IF(lvls(3,iget(032))>0)field1=.true.
3219 IF(lvls(3,iget(107))>0)field2=.true.
3229 IF(field1.OR.field2)
THEN
3235 egrid1(i,j) = -h99999
3236 egrid2(i,j) = -h99999
3237 lb2(i,j) = (lvlbnd(i,j,1) + lvlbnd(i,j,2) + &
3239 p1d(i,j) = (pbnd(i,j,1) + pbnd(i,j,2) + pbnd(i,j,3))/3
3240 t1d(i,j) = (tbnd(i,j,1) + tbnd(i,j,2) + tbnd(i,j,3))/3
3241 q1d(i,j) = (qbnd(i,j,1) + qbnd(i,j,2) + qbnd(i,j,3))/3
3246 CALL calcape(itype,dpbnd,p1d,t1d,q1d,lb2,egrid1, &
3247 egrid2,egrid3,egrid4,egrid5)
3249 IF (iget(582)>0)
THEN
3255 IF(t1d(i,j) < spval)
THEN
3256 grid1(i,j) = egrid1(i,j)
3257 IF (submodelname ==
'RTMA')mlcape(i,j)=grid1(i,j)
3261 CALL bound(grid1,d00,h99999)
3262 if(grib==
'grib2')
then
3264 fld_info(cfld)%ifld=iavblfld(iget(582))
3265 fld_info(cfld)%lvl=lvlsxml(1,iget(582))
3271 datapd(i,j,cfld) = grid1(ii,jj)
3276 IF (iget(583)>0)
THEN
3282 IF(t1d(i,j) < spval) grid1(i,j) = - egrid2(i,j)
3286 CALL bound(grid1,d00,h99999)
3291 IF(t1d(i,j) < spval)
THEN
3292 grid1(i,j) = - grid1(i,j)
3293 IF (submodelname ==
'RTMA') mlcin(i,j)=grid1(i,j)
3298 if(grib==
'grib2')
then
3300 fld_info(cfld)%ifld=iavblfld(iget(583))
3301 fld_info(cfld)%lvl=lvlsxml(1,iget(583))
3307 datapd(i,j,cfld) = grid1(ii,jj)
3317 IF ( (iget(109)>0).OR.(iget(110)>0) )
THEN
3318 CALL callcl(p1d,t1d,q1d,egrid1,egrid2)
3319 IF (iget(109)>0)
THEN
3323 IF(t1d(i,j) < spval) grid1(i,j)=egrid2(i,j)
3324 IF (submodelname ==
'RTMA') mllcl(i,j) = grid1(i,j)
3354 IF(lvls(4,iget(032))>0)field1=.true.
3358 IF(lvls(4,iget(107))>0)field2=.true.
3368 IF(field1.OR.field2)
THEN
3374 egrid1(i,j) = -h99999
3375 egrid2(i,j) = -h99999
3380 CALL calcape(itype,dpbnd,p1d,t1d,q1d,lb2,egrid1, &
3381 egrid2,egrid3,egrid4,egrid5)
3382 IF (submodelname ==
'RTMA') mumixr(i,j) = q1d(i,j)
3383 IF (iget(584)>0)
THEN
3389 IF(t1d(i,j) < spval)
THEN
3390 grid1(i,j) = egrid1(i,j)
3391 IF (submodelname ==
'RTMA') mucape(i,j)=grid1(i,j)
3395 CALL bound(grid1,d00,h99999)
3399 if(grib==
'grib2')
then
3401 fld_info(cfld)%ifld=iavblfld(iget(584))
3402 fld_info(cfld)%lvl=lvlsxml(1,iget(584))
3408 datapd(i,j,cfld) = grid1(ii,jj)
3415 IF (iget(585)>0)
THEN
3421 IF(t1d(i,j) < spval) grid1(i,j) = - egrid2(i,j)
3424 CALL bound(grid1,d00,h99999)
3427 IF(t1d(i,j) < spval)
THEN
3428 grid1(i,j) = - grid1(i,j)
3429 IF (submodelname ==
'RTMA')
THEN
3430 mucape(i,j) = grid1(i,j)
3431 muq1d(i,j) = q1d(i,j)
3436 if(grib==
'grib2')
then
3438 fld_info(cfld)%ifld=iavblfld(iget(585))
3439 fld_info(cfld)%lvl=lvlsxml(1,iget(585))
3445 datapd(i,j,cfld) = grid1(ii,jj)
3453 IF (iget(443)>0)
THEN
3458 IF(t1d(i,j) < spval) grid1(i,j) = egrid4(i,j)
3461 if(grib==
'grib2')
then
3463 fld_info(cfld)%ifld=iavblfld(iget(443))
3464 fld_info(cfld)%lvl=lvlsxml(1,iget(443))
3470 datapd(i,j,cfld) = grid1(ii,jj)
3476 IF (iget(982)>0)
THEN
3479 grid1(i,j) = teql(i,j)
3482 if(grib==
'grib2')
then
3484 fld_info(cfld)%ifld=iavblfld(iget(982))
3485 fld_info(cfld)%lvl=lvlsxml(1,iget(982))
3491 datapd(i,j,cfld) = grid1(ii,jj)
3500 IF (iget(246)>0)
THEN
3505 IF(t1d(i,j) < spval) grid1(i,j) = egrid3(i,j)
3508 CALL bound(grid1,d00,h99999)
3511 if(grib==
'grib2')
then
3513 fld_info(cfld)%ifld=iavblfld(iget(246))
3514 fld_info(cfld)%lvl=lvlsxml(1,iget(246))
3520 datapd(i,j,cfld) = grid1(ii,jj)
3527 IF (iget(444)>0)
THEN
3532 IF(cprate(i,j) < spval)
THEN
3533 IF (cprate(i,j) > pthresh)
THEN
3534 grid1(i,j) = egrid5(i,j)
3541 CALL bound(grid1,d00,h99999)
3542 if(grib==
'grib2')
then
3544 fld_info(cfld)%ifld=iavblfld(iget(444))
3545 fld_info(cfld)%lvl=lvlsxml(1,iget(444))
3551 datapd(i,j,cfld) = grid1(ii,jj)
3559 IF (submodelname ==
'RTMA')
THEN
3565 ALLOCATE(el_base(ista_2l:iend_2u,jsta_2l:jend_2u))
3566 ALLOCATE(el_tops(ista_2l:iend_2u,jsta_2l:jend_2u))
3567 ALLOCATE(found_base(ista_2l:iend_2u,jsta_2l:jend_2u))
3568 ALLOCATE(found_tops(ista_2l:iend_2u,jsta_2l:jend_2u))
3574 found_base(i,j) = .false.
3575 found_tops(i,j) = .false.
3590 egrid1(i,j) = -h99999
3591 egrid2(i,j) = -h99999
3593 p1d(i,j) = pmid(i,j,l)
3600 IF (debugprint)
WRITE(1000+me,
'(A,I3)') &
3601 ' CALCULATING CAPE/CINS ON LEVEL:',l
3602 CALL calcape(itype,dpbnd,p1d,t1d,q1d,idummy,egrid1, &
3603 egrid2,egrid3,egrid4,egrid5)
3609 IF ( .NOT. found_base(i,j) )
THEN
3610 IF ( egrid1(i,j) >= 100. .AND. egrid2(i,j) >= -250. )
THEN
3612 found_base(i,j) = .true.
3615 found_base(i,j) = .false.
3618 IF ( .NOT. found_tops(i,j) )
THEN
3619 IF ( egrid1(i,j) < 100. .OR. egrid2(i,j) < -250. )
THEN
3620 el_tops(i,j) = l + 1
3621 found_tops(i,j) = .true.
3624 found_tops(i,j) = .false.
3634 IF (
ALLOCATED(found_base))
DEALLOCATE(found_base)
3635 IF (
ALLOCATED(found_tops))
DEALLOCATE(found_tops)
3637 IF (debugprint)
THEN
3638 WRITE(im_ch,
'(I5.5)') im
3639 WRITE(jsta_ch,
'(I5.5)') jsta
3640 WRITE(jend_ch,
'(I5.5)') jend
3641 effl_fname=
"EFFL_NEW_"//im_ch//
"_"//jsta_ch//
"_"//jend_ch &
3643 effl_fname2=
"EFFL_NEW_LVLS_"//im_ch//
"_"//jsta_ch//
"_"//jend_ch &
3649 OPEN(iunit,file=trim(adjustl(effl_fname)),form=
'FORMATTED')
3656 WRITE(iunit,
'(1x,I6,2x,I6,2(2x,I6,2x,F12.3))') i, j, &
3657 el_base(i,j),pmid(i,j,el_base(i,j)), &
3658 el_tops(i,j),pmid(i,j,el_tops(i,j))
3664 IF(
ALLOCATED(tpar_base))
DEALLOCATE(tpar_base)
3665 IF(
ALLOCATED(tpar_tops))
DEALLOCATE(tpar_tops)
3677 IF(lvls(3,iget(032))>0)field1=.true.
3680 IF(lvls(3,iget(107))>0)field2=.true.
3693 IF(field1.OR.field2)
THEN
3700 egrid1(i,j) = -h99999
3701 egrid2(i,j) = -h99999
3702 egrid3(i,j) = -h99999
3703 egrid4(i,j) = -h99999
3704 egrid5(i,j) = -h99999
3705 egrid6(i,j) = -h99999
3706 egrid7(i,j) = -h99999
3707 egrid8(i,j) = -h99999
3712 lb2(i,j) = (lvlbnd(i,j,1) + lvlbnd(i,j,2) + &
3714 p1d(i,j) = (pbnd(i,j,1) + pbnd(i,j,2) + pbnd(i,j,3))/3
3715 t1d(i,j) = (tbnd(i,j,1) + tbnd(i,j,2) + tbnd(i,j,3))/3
3716 q1d(i,j) = (qbnd(i,j,1) + qbnd(i,j,2) + qbnd(i,j,3))/3
3721 CALL calcape2(itype,dpbnd,p1d,t1d,q1d,lb2, &
3722 egrid1,egrid2,egrid3,egrid4,egrid5, &
3723 egrid6,egrid7,egrid8)
3728 IF (iget(950)>0)
THEN
3734 IF(t1d(i,j) < spval) grid1(i,j) = egrid1(i,j)
3737 CALL bound(grid1,d00,h99999)
3738 if(grib==
'grib2')
then
3740 fld_info(cfld)%ifld=iavblfld(iget(950))
3741 fld_info(cfld)%lvl=lvlsxml(1,iget(950))
3747 datapd(i,j,cfld) = grid1(ii,jj)
3753 IF (iget(951)>0)
THEN
3759 IF(t1d(i,j) < spval) grid1(i,j) = - egrid2(i,j)
3763 CALL bound(grid1,d00,h99999)
3768 IF(t1d(i,j) < spval) grid1(i,j) = - grid1(i,j)
3772 if(grib==
'grib2')
then
3774 fld_info(cfld)%ifld=iavblfld(iget(951))
3775 fld_info(cfld)%lvl=lvlsxml(1,iget(951))
3781 datapd(i,j,cfld) = grid1(ii,jj)
3789 IF (iget(952)>0)
THEN
3794 IF(t1d(i,j) < spval) grid1(i,j) = egrid3(i,j)
3797 CALL bound(grid1,d00,h99999)
3798 if(grib==
'grib2')
then
3800 fld_info(cfld)%ifld=iavblfld(iget(952))
3801 fld_info(cfld)%lvl=lvlsxml(1,iget(952))
3807 datapd(i,j,cfld) = grid1(ii,jj)
3816 allocate(ust(ista_2l:iend_2u,jsta_2l:jend_2u),vst(ista_2l:iend_2u,jsta_2l:jend_2u), &
3817 heli(ista_2l:iend_2u,jsta_2l:jend_2u,2))
3818 allocate(llow(ista_2l:iend_2u,jsta_2l:jend_2u),lupp(ista_2l:iend_2u,jsta_2l:jend_2u), &
3819 cangle(ista_2l:iend_2u,jsta_2l:jend_2u))
3825 iget2 = lvls(1,iget1)
3826 iget3 = lvls(2,iget1)
3828 if(me==0)
write(0,*)
'953 ',iget1,iget2,iget3
3829 IF (iget1 > 0 .OR. iget(162) > 0 .OR. iget(953) > 0)
THEN
3832 IF (submodelname ==
'RTMA')
THEN
3838 llow(i,j) = el_base(i,j)
3839 lupp(i,j) = el_tops(i,j)
3846 llow(i,j) = int(egrid4(i,j))
3847 lupp(i,j) = int(egrid5(i,j))
3852 IF (debugprint)
THEN
3853 WRITE(im_ch,
'(I5.5)') im
3854 WRITE(jsta_ch,
'(I5.5)') jsta
3855 WRITE(jend_ch,
'(I5.5)') jend
3856 effl_fname=
"EFFL_OLD_"//im_ch//
"_"//jsta_ch//
"_"//jend_ch &
3860 OPEN(iunit,file=trim(adjustl(effl_fname)),form=
'FORMATTED')
3865 WRITE(iunit,
'(1x,I6,2x,I6,2(2x,I6,2x,F12.3))') i, j, &
3866 llow(i,j),pmid(i,j,llow(i,j)), &
3867 lupp(i,j),pmid(i,j,lupp(i,j))
3875 CALL calhel2(llow,lupp,depth,ust,vst,heli,cangle)
3881 grid1(i,j) = heli(i,j,1)
3885 if(grib==
'grib2')
then
3887 fld_info(cfld)%ifld=iavblfld(iget1)
3888 fld_info(cfld)%lvl=lvlsxml(1,iget1)
3894 datapd(i,j,cfld) = grid1(ii,jj)
3903 IF (submodelname ==
'RTMA')
THEN
3907 allocate(eshr(ista_2l:iend_2u,jsta_2l:jend_2u),uvect(ista_2l:iend_2u,jsta_2l:jend_2u),&
3908 vvect(ista_2l:iend_2u,jsta_2l:jend_2u),htsfc(ista_2l:iend_2u,jsta_2l:jend_2u))
3909 allocate(effust(ista_2l:iend_2u,jsta_2l:jend_2u),effvst(ista_2l:iend_2u,jsta_2l:jend_2u),&
3910 esrh(ista_2l:iend_2u,jsta_2l:jend_2u))
3925 egrid1(i,j) = -h99999
3926 p1d(i,j)=pmid(i,j,l)
3931 CALL calthte(p1d,t1d,q1d,egrid1)
3934 the(i,j)=egrid1(i,j)
3935 IF(the(i,j)>=maxthe(i,j))
THEN
3936 maxthe(i,j)=the(i,j)
3938 muq1d(i,j) = q(i,j,l)
3947 IF(gridtype ==
'E')
THEN
3958 ELSE IF(gridtype ==
'B')
THEN
3982 IF(gridtype /=
'A') CALL exch(fis(ista_2l:iend_2u,jsta_2l:jend_2u))
3989 IF (gridtype==
'B')
THEN
3990 htsfc(i,j)=(0.25/g)*(fis(iw,j)+fis(ie,j)+fis(i,jn)+fis(ie,jn))
3992 htsfc(i,j)=(0.25/g)*(fis(iw,j)+fis(ie,j)+fis(i,jn)+fis(i,js))
3998 IF (iget(979)>0)
THEN
4002 IF(zint(i,j,llow(i,j))<spval.and.htsfc(i,j)<spval)&
4003 grid1(i,j) = zint(i,j,llow(i,j)) - htsfc(i,j)
4006 if(grib==
'grib2')
then
4008 fld_info(cfld)%ifld=iavblfld(iget(979))
4009 fld_info(cfld)%lvl=lvlsxml(1,iget(979))
4015 datapd(i,j,cfld) = grid1(ii,jj)
4021 IF (iget(980)>0)
THEN
4025 IF(zint(i,j,lupp(i,j))<spval.and.htsfc(i,j)<spval)&
4026 grid1(i,j) = zint(i,j,lupp(i,j)) - htsfc(i,j)
4029 if(grib==
'grib2')
then
4031 fld_info(cfld)%ifld=iavblfld(iget(980))
4032 fld_info(cfld)%lvl=lvlsxml(1,iget(980))
4038 datapd(i,j,cfld) = grid1(ii,jj)
4046 IF (iget(983)>0)
THEN
4050 IF(llow(i,j)<spval.and.lupp(i,j)<spval)
THEN
4051 midcal=int(llow(i,j)+d50*(lupp(i,j)-llow(i,j)))
4055 uvect(i,j)=uh(i,j,midcal)-uh(i,j,llow(i,j))
4056 grid1(i,j)=uvect(i,j)
4060 if(grib==
'grib2')
then
4062 fld_info(cfld)%ifld=iavblfld(iget(983))
4063 fld_info(cfld)%lvl=lvlsxml(1,iget(983))
4069 datapd(i,j,cfld) = grid1(ii,jj)
4076 IF (iget(984)>0)
THEN
4080 IF(llow(i,j)<spval.and.lupp(i,j)<spval.and.&
4081 vh(i,j,midcal)<spval.and.vh(i,j,llow(i,j))<spval)
THEN
4082 midcal=int(llow(i,j)+d50*(ieql(i,j)-llow(i,j)))
4086 vvect(i,j)=vh(i,j,midcal)-vh(i,j,llow(i,j))
4087 grid1(i,j)=vvect(i,j)
4091 if(grib==
'grib2')
then
4093 fld_info(cfld)%ifld=iavblfld(iget(984))
4094 fld_info(cfld)%lvl=lvlsxml(1,iget(984))
4100 datapd(i,j,cfld) = grid1(ii,jj)
4107 IF (iget(985)>0)
THEN
4111 IF(uvect(i,j)<spval.and.vvect(i,j)<spval)
THEN
4112 eshr(i,j)=sqrt((uvect(i,j)**2)+(vvect(i,j))**2)
4115 grid1(i,j)=eshr(i,j)
4119 if(grib==
'grib2')
then
4121 fld_info(cfld)%ifld=iavblfld(iget(985))
4122 fld_info(cfld)%lvl=lvlsxml(1,iget(985))
4128 datapd(i,j,cfld) = grid1(ii,jj)
4136 CALL calhel3(llow,lupp,effust,effvst,esrh)
4141 IF (iget(986)>0)
THEN
4145 IF(llow(i,j)<spval.and.lupp(i,j)<spval)&
4146 grid1(i,j)=effust(i,j)
4149 if(grib==
'grib2')
then
4151 fld_info(cfld)%ifld=iavblfld(iget(986))
4152 fld_info(cfld)%lvl=lvlsxml(1,iget(986))
4158 datapd(i,j,cfld) = grid1(ii,jj)
4165 IF (iget(987)>0)
THEN
4169 IF(llow(i,j)<spval.and.lupp(i,j)<spval)&
4170 grid1(i,j)=effvst(i,j)
4173 if(grib==
'grib2')
then
4175 fld_info(cfld)%ifld=iavblfld(iget(987))
4176 fld_info(cfld)%lvl=lvlsxml(1,iget(987))
4182 datapd(i,j,cfld) = grid1(ii,jj)
4189 IF (iget(988)>0)
THEN
4193 IF(llow(i,j)<spval.and.lupp(i,j)<spval)&
4194 grid1(i,j)=esrh(i,j)
4197 if(grib==
'grib2')
then
4199 fld_info(cfld)%ifld=iavblfld(iget(988))
4200 fld_info(cfld)%lvl=lvlsxml(1,iget(988))
4206 datapd(i,j,cfld) = grid1(ii,jj)
4213 IF (iget(989)>0)
THEN
4216 IF (mllcl(i,j)>d2000)
THEN
4218 ELSEIF (mllcl(i,j)<d1000)
THEN
4221 mllcltmp=((d2000-mllcl(i,j))/d1000)
4223 IF (eshr(i,j)<12.5)
THEN
4225 ELSEIF (eshr(i,j)>30.0)
THEN
4228 eshrtmp=(eshr(i,j)/20.)
4230 IF (mlcin(i,j)>-50.)
THEN
4232 ELSEIF (mlcin(i,j)<-200.)
THEN
4235 mlcintmp=(200.+mlcin(i,j))/150.
4237 stp=(mlcape(i,j)/d1500)*mllcltmp*(esrh(i,j)/150.)*&
4240 IF(llow(i,j)<spval.and.lupp(i,j)<spval)
THEN
4249 if(grib==
'grib2')
then
4251 fld_info(cfld)%ifld=iavblfld(iget(989))
4252 fld_info(cfld)%lvl=lvlsxml(1,iget(989))
4258 datapd(i,j,cfld) = grid1(ii,jj)
4265 IF (iget(990)>0)
THEN
4268 llmh = nint(lmh(i,j))
4269 p1d(i,j) = pmid(i,j,llmh)
4270 t1d(i,j) = t(i,j,llmh)
4271 q1d(i,j) = q(i,j,llmh)
4274 CALL callcl(p1d,t1d,q1d,egrid1,egrid2)
4277 slcl(i,j)=egrid2(i,j)
4284 CALL calcape(itype,dpbnd,dummy,dummy,dummy,&
4285 idummy,egrid1,egrid2,&
4290 IF (slcl(i,j)>d2000)
THEN
4292 ELSEIF (slcl(i,j)<=d1000)
THEN
4295 slcltmp=((d2000-slcl(i,j))/d1000)
4297 IF (fshr(i,j)<12.5)
THEN
4299 ELSEIF (fshr(i,j)>30.0)
THEN
4302 fshrtmp=(fshr(i,j)/20.)
4304 IF (egrid2(i,j)>-50.)
THEN
4306 ELSEIF (egrid2(i,j)<-200.)
THEN
4309 scintmp=((200.+egrid2(i,j)/150.))
4311 stp=(egrid1(i,j)/d1500)*slcltmp*(heli(i,j,2)/150.)*&
4314 IF(t1d(i,j) < spval)
THEN
4323 if(grib==
'grib2')
then
4325 fld_info(cfld)%ifld=iavblfld(iget(990))
4326 fld_info(cfld)%lvl=lvlsxml(1,iget(990))
4332 datapd(i,j,cfld) = grid1(ii,jj)
4339 IF (iget(991)>0)
THEN
4342 IF (eshr(i,j)<10.)
THEN
4344 ELSEIF (eshr(i,j)>20.0)
THEN
4347 eshrtmp=(eshr(i,j)/20.)
4349 IF (mucin(i,j)>-40.)
THEN
4352 mucintmp=(-40./mucin(i,j))
4354 stp=(mucape(i,j)/d1000)*(esrh(i,j)/50.)*&
4357 IF(t1d(i,j) < spval)
THEN
4366 if(grib==
'grib2')
then
4368 fld_info(cfld)%ifld=iavblfld(iget(991))
4369 fld_info(cfld)%lvl=lvlsxml(1,iget(991))
4375 datapd(i,j,cfld) = grid1(ii,jj)
4383 IF (iget(992)>0)
THEN
4387 egrid1(i,j) = -h99999
4388 egrid2(i,j) = -h99999
4389 egrid3(i,j) = -h99999
4390 egrid4(i,j) = -h99999
4391 egrid5(i,j) = -h99999
4392 egrid6(i,j) = -h99999
4393 egrid7(i,j) = -h99999
4394 egrid8(i,j) = -h99999
4395 lb2(i,j) = (lvlbnd(i,j,1) + lvlbnd(i,j,2) + &
4397 p1d(i,j) = (pbnd(i,j,1) + pbnd(i,j,2) + pbnd(i,j,3))/3
4398 t1d(i,j) = (tvirtual(tbnd(i,j,1),qbnd(i,j,1)) + &
4399 tvirtual(tbnd(i,j,2),qbnd(i,j,2)) + &
4400 tvirtual(tbnd(i,j,3),qbnd(i,j,3)))/3
4401 q1d(i,j) = (qbnd(i,j,1) + qbnd(i,j,2) + qbnd(i,j,3))/3
4408 CALL calcape2(itype,dpbnd,p1d,t1d,q1d,lb2, &
4409 egrid1,egrid2,egrid3,egrid4,egrid5, &
4410 egrid6,egrid7,egrid8)
4415 IF(t1d(i,j) < spval) grid1(i,j) = egrid3(i,j)
4418 CALL bound(grid1,d00,h99999)
4419 if(grib==
'grib2')
then
4421 fld_info(cfld)%ifld=iavblfld(iget(992))
4422 fld_info(cfld)%lvl=lvlsxml(1,iget(992))
4428 datapd(i,j,cfld) = grid1(ii,jj)
4435 IF (iget(763)>0)
THEN
4440 grid1(i,j) = q1d(i,j)
4443 if(grib==
'grib2')
then
4445 fld_info(cfld)%ifld=iavblfld(iget(763))
4446 fld_info(cfld)%lvl=lvlsxml(1,iget(763))
4452 datapd(i,j,cfld) = grid1(ii,jj)
4459 IF (iget(993)>0)
THEN
4463 lapse=-((t700(i,j)-t500(i,j))/((z700(i,j)-z500(i,j))))
4464 ship=(mucape(i,j)*d1000*muq1d(i,j)*lapse*(t500(i,j)-k2c)*fshr(i,j))/hconst
4465 IF (mucape(i,j)<1300.)
THEN
4466 ship=ship*(mucape(i,j)/1300.)
4468 IF (lapse < 5.8)
THEN
4469 ship=ship*(lapse/5.8)
4471 IF (freezelvl(i,j) < 2400.)
THEN
4472 ship=ship*(freezelvl(i,j)/2400.)
4477 if(grib==
'grib2')
then
4479 fld_info(cfld)%ifld=iavblfld(iget(993))
4480 fld_info(cfld)%lvl=lvlsxml(1,iget(993))
4486 datapd(i,j,cfld) = grid1(ii,jj)
4497 IF (iget(957)>0)
THEN
4502 IF(t1d(i,j) < spval ) grid1(i,j) = cangle(i,j)
4508 if(grib==
'grib2')
then
4510 fld_info(cfld)%ifld=iavblfld(iget(957))
4511 fld_info(cfld)%lvl=lvlsxml(1,iget(957))
4517 datapd(i,j,cfld) = grid1(ii,jj)
4525 IF (iget(955)>0)
THEN
4530 IF(t1d(i,j) < spval ) grid1(i,j) = egrid7(i,j)
4533 CALL bound(grid1,d00,h99999)
4534 if(grib==
'grib2')
then
4536 fld_info(cfld)%ifld=iavblfld(iget(955))
4537 fld_info(cfld)%lvl=lvlsxml(1,iget(955))
4543 datapd(i,j,cfld) = grid1(ii,jj)
4551 IF (iget(956)>0)
THEN
4556 IF(t1d(i,j) < spval ) grid1(i,j) = egrid8(i,j)
4559 CALL bound(grid1,d00,h99999)
4560 if(grib==
'grib2')
then
4562 fld_info(cfld)%ifld=iavblfld(iget(956))
4563 fld_info(cfld)%lvl=lvlsxml(1,iget(956))
4569 datapd(i,j,cfld) = grid1(ii,jj)
4593 IF (iget(954)>0)
THEN
4598 IF(t1d(i,j) < spval) grid1(i,j) = -egrid6(i,j)
4601 CALL bound(grid1,d00,h99999)
4602 if(grib==
'grib2')
then
4604 fld_info(cfld)%ifld=iavblfld(iget(954))
4605 fld_info(cfld)%lvl=lvlsxml(1,iget(954))
4611 datapd(i,j,cfld) = grid1(ii,jj)
4618 if (
allocated(ushr1))
deallocate(ushr1)
4619 if (
allocated(vshr1))
deallocate(vshr1)
4620 if (
allocated(ushr6))
deallocate(ushr6)
4621 if (
allocated(vshr6))
deallocate(vshr6)
4622 if (
allocated(ust))
deallocate(ust)
4623 if (
allocated(vst))
deallocate(vst)
4624 if (
allocated(heli))
deallocate(heli)
4625 if (
allocated(llow))
deallocate(llow)
4626 if (
allocated(lupp))
deallocate(lupp)
4627 if (
allocated(cangle))
deallocate(cangle)
4628 if (
allocated(effust))
deallocate(effust)
4629 if (
allocated(effvst))
deallocate(effvst)
4630 if (
allocated(eshr))
deallocate(eshr)
4631 if (
allocated(uvect))
deallocate(uvect)
4632 if (
allocated(vvect))
deallocate(vvect)
4633 if (
allocated(esrh))
deallocate(esrh)
4634 if (
allocated(htsfc))
deallocate(htsfc)
4635 if (
allocated(fshr))
deallocate(fshr)
4638 if (
allocated(pbnd))
deallocate(pbnd)
4639 if (
allocated(tbnd))
deallocate(tbnd)
4640 if (
allocated(qbnd))
deallocate(qbnd)
4641 if (
allocated(ubnd))
deallocate(ubnd)
4642 if (
allocated(vbnd))
deallocate(vbnd)
4643 if (
allocated(rhbnd))
deallocate(rhbnd)
4644 if (
allocated(wbnd))
deallocate(wbnd)
4645 if (
allocated(lvlbnd))
deallocate(lvlbnd)
4646 if (
allocated(lb2))
deallocate(lb2)
4650 IF (iget(749)>0)
THEN
4651 CALL calrh_pw(grid1(ista:iend,jsta:jend))
4652 if(grib==
'grib2')
then
4654 fld_info(cfld)%ifld=iavblfld(iget(749))
4660 datapd(i,j,cfld) = grid1(ii,jj)
subroutine mxwind(km, p, u, v, t, h, pmw, umw, vmw, tmw, hmw)
mxwind() computes maximum wind level fields.
elemental real function, public fpvsnew(t)
subroutine tpause(km, p, u, v, t, h, ptp, utp, vtp, ttp, htp, shrtp)
tpause() computes tropopause level fields.
calcape() computes CAPE/CINS and other storm related variables.