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
102 use grib2_module,
only: pset
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
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),
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
207 ushr6(ista_2l:iend_2u,jsta_2l:jend_2u),vshr6(ista_2l:iend_2u
208 allocate(ust(ista_2l:iend_2u,jsta_2l:jend_2u),vst(ista_2l:iend_2u
209 heli(ista_2l:iend_2u,jsta_2l:jend_2u,2),fshr(ista_2l:iend_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
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
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
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
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
1794 qcnvbnd(ista:iend,jsta:jend,nbnd),lvlbnd(ista:iend,jsta
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
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
1913 grid1(ista:iend,jsta:jend), tbnd(ista:iend,jsta
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
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
2373 p78483(ista:iend,jsta:jend), p89671(ista:iend,jsta
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
2808 rh1847(ista_2l:iend_2u,jsta_2l:jend_2u))
2809 allocate(rh8498(ista_2l:iend_2u,jsta_2l:jend_2u),qm8510(ista_2l
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)
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)
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
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
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
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
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
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
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
3908 vvect(ista_2l:iend_2u,jsta_2l:jend_2u),htsfc(ista_2l:iend_2u
3909 allocate(effust(ista_2l:iend_2u,jsta_2l:jend_2u),effvst(ista_2l
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)
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)