25 use vrbls3d,
only: pint, pmid, zmid
26 use vrbls3d,
only: t, q, uh, vh, omga, cwm, qqw, qqi, qqr, qqs, qqg
28 use vrbls3d,
only: icing_gfip, icing_gfis, catedr, mwt, gtg
29 use ctlblk_mod,
only: grib, cfld, fld_info, datapd, im, jsta, jend, jm, &
30 lm, htfd, spval, nfd, me,&
31 jsta_2l, jend_2u, modelname,&
32 ista, iend, ista_2l, iend_2u
33 use rqstfld_mod,
only: iget, lvls, iavblfld, lvlsxml
34 use grib2_module,
only: pset
40 real,
external :: P2H, relabel
42 real,
dimension(ista_2l:iend_2u,jsta_2l:jend_2u) :: grid1
43 real,
dimension(ista_2l:iend_2u,jsta_2l:jend_2u) :: EGRID1,EGRID2,EGRID3,EGRID4
46 integer I,J,ii,jj,L,ITYPE,IFD,ITYPEFDLVL(NFD)
50 REAL,
allocatable :: HTFDCTL(:)
51 integer,
allocatable :: ITYPEFDLVLCTL(:)
52 real,
allocatable :: QIN(:,:,:,:), QFD(:,:,:,:)
53 character,
allocatable :: QTYPE(:)
54 real,
allocatable :: VAR3D1(:,:,:), VAR3D2(:,:,:)
56 integer,
parameter :: NFDMAX=50
57 integer :: IDS(NFDMAX)
77 IF(iget(479)>0 .or. iget(481)>0 .or. &
78 iget(476)>0 .or. iget(477)>0 .or. iget(478)>0 .or. &
79 iget(518)>0 .or. iget(519)>0 .or. iget(520)>0 .or. &
83 IF(iget(520)>0 .or. iget(521)>0 )
THEN
86 n = iavblfld(iget(iid))
87 nfdctl=
size(pset%param(n)%level)
88 if(
allocated(itypefdlvlctl))
deallocate(itypefdlvlctl)
89 allocate(itypefdlvlctl(nfdctl))
91 itypefdlvlctl(ifd)=lvls(ifd,iget(iid))
93 if(
allocated(htfdctl))
deallocate(htfdctl)
94 allocate(htfdctl(nfdctl))
95 htfdctl=pset%param(n)%level
97 htfdctl(i)=
p2h(htfdctl(i)/100.)
99 if(
allocated(var3d1))
deallocate(var3d1)
100 if(
allocated(var3d2))
deallocate(var3d2)
101 allocate(var3d1(ista_2l:iend_2u,jsta_2l:jend_2u,nfdctl))
102 allocate(var3d2(ista_2l:iend_2u,jsta_2l:jend_2u,nfdctl))
106 call fdlvl_uv(itypefdlvlctl,nfdctl,htfdctl,var3d1,var3d2)
110 IF (lvls(ifd,iget(520)) > 0)
THEN
114 grid1(i,j)=var3d1(i,j,ifd)
117 if(grib==
'grib2')
then
119 fld_info(cfld)%ifld=iavblfld(iget(520))
120 fld_info(cfld)%lvl=lvlsxml(ifd,iget(520))
126 datapd(i,j,cfld) = grid1(ii,jj)
132 IF (lvls(ifd,iget(521)) > 0)
THEN
136 grid1(i,j)=var3d2(i,j,ifd)
139 if(grib==
'grib2')
then
141 fld_info(cfld)%ifld=iavblfld(iget(521))
142 fld_info(cfld)%lvl=lvlsxml(ifd,iget(521))
148 datapd(i,j,cfld) = grid1(ii,jj)
164 if(
allocated(qin))
deallocate(qin)
165 if(
allocated(qtype))
deallocate(qtype)
166 ALLOCATE(qin(ista:iend,jsta:jend,lm,nfdmax))
167 ALLOCATE(qtype(nfdmax))
171 IF(iget(479) > 0)
THEN
174 qin(ista:iend,jsta:jend,1:lm,nfds)=icing_gfip(ista:iend,jsta:jend,1:lm)
177 IF(iget(481) > 0)
THEN
180 qin(ista:iend,jsta:jend,1:lm,nfds)=icing_gfis(ista:iend,jsta:jend,1:lm)
183 IF(iget(476) > 0)
THEN
186 qin(ista:iend,jsta:jend,1:lm,nfds)=gtg(ista:iend,jsta:jend,1:lm)
189 IF(iget(477) > 0)
THEN
192 qin(ista:iend,jsta:jend,1:lm,nfds)=catedr(ista:iend,jsta:jend,1:lm)
195 IF(iget(478) > 0)
THEN
198 qin(ista:iend,jsta:jend,1:lm,nfds)=mwt(ista:iend,jsta:jend,1:lm)
201 IF(iget(519) > 0)
THEN
204 qin(ista:iend,jsta:jend,1:lm,nfds)=t(ista:iend,jsta:jend,1:lm)
210 n = iavblfld(iget(iid))
211 nfdctl=
size(pset%param(n)%level)
212 if(
allocated(itypefdlvlctl))
deallocate(itypefdlvlctl)
213 allocate(itypefdlvlctl(nfdctl))
215 itypefdlvlctl(ifd)=lvls(ifd,iget(iid))
217 if(
allocated(htfdctl))
deallocate(htfdctl)
218 allocate(htfdctl(nfdctl))
219 htfdctl=pset%param(n)%level
221 htfdctl(i)=
p2h(htfdctl(i)/100.)
224 if(
allocated(qfd))
deallocate(qfd)
225 ALLOCATE(qfd(ista:iend,jsta:jend,nfdctl,nfds))
228 call fdlvl_mass(itypefdlvlctl,nfdctl,pset%param(n)%level,htfdctl,nfds,qin,qtype,qfd)
241 if(qfd(i,j,ifd,n) < spval)
then
242 qfd(i,j,ifd,n)=max(0.0,qfd(i,j,ifd,n))
243 qfd(i,j,ifd,n)=min(1.0,qfd(i,j,ifd,n))
263 if(qfd(i,j,ifd,n1) < 0.001) qfd(i,j,ifd,n)=0.
265 if(qfd(i,j,ifd,n) == spval) cycle
266 if (qfd(i,j,ifd,n) < 0.08)
then
268 elseif (qfd(i,j,ifd,n) <= 0.21)
then
270 else if(qfd(i,j,ifd,n) <= 0.37)
then
272 else if(qfd(i,j,ifd,n) <= 0.67)
then
283 if(iid==476 .or. iid==477 .or. iid==478)
then
287 if(qfd(i,j,ifd,n) < spval)
then
288 qfd(i,j,ifd,n)=max(0.0,qfd(i,j,ifd,n))
289 qfd(i,j,ifd,n)=min(1.0,qfd(i,j,ifd,n))
302 IF (lvls(ifd,iget(iid)) > 0)
THEN
306 grid1(i,j)=qfd(i,j,ifd,n)
309 if(grib==
'grib2')
then
311 fld_info(cfld)%ifld=iavblfld(iget(iid))
312 fld_info(cfld)%lvl=lvlsxml(ifd,iget(iid))
318 datapd(i,j,cfld) = grid1(ii,jj)
333 IF(iget(518) > 0)
THEN
335 n = iavblfld(iget(iid))
336 nfdctl=
size(pset%param(n)%level)
337 if(
allocated(htfdctl))
deallocate(htfdctl)
338 allocate(htfdctl(nfdctl))
339 htfdctl=pset%param(n)%level
341 htfdctl(i)=
p2h(htfdctl(i)/100.)
345 IF (lvls(ifd,iget(iid)) > 0)
THEN
349 grid1(i,j)=htfdctl(ifd)
352 if(grib==
'grib2')
then
354 fld_info(cfld)%ifld=iavblfld(iget(iid))
355 fld_info(cfld)%lvl=lvlsxml(ifd,iget(iid))
361 datapd(i,j,cfld) = grid1(ii,jj)
371 ids = (/ 481,479,476,477,478,518,519,520,521,(0,i=10,50) /)
375 n = iavblfld(iget(iid))
376 nfdctl=
size(pset%param(n)%level)
378 pset%param(n)%level(j) =
relabel(pset%param(n)%level(j))