65 SUBROUTINE calmict_new(P1D,T1D,Q1D,C1D,FI1D,FR1D,FS1D,CUREFL, &
66 QW1,QI1,QR1,QS1,DBZ1,DBZR1,DBZI1,DBZC1,NLICE1,NRAIN1)
69 use params_mod,
only: dbzmin, epsq, tfrz, eps, rd, d608
70 use ctlblk_mod,
only: jsta, jend, jsta_2l, jend_2u,im, &
71 ista, iend, ista_2l, iend_2u
72 use cmassi_mod,
only: t_ice, rqr_drmin, n0rmin, cn0r_dmrmin, &
73 mdrmin, rqr_drmax, cn0r_dmrmax, mdrmax, n0r0, xmrmin, &
74 xmrmax, massi, cn0r0, mdimin, xmimax, mdimax
78 INTEGER INDEXS, INDEXR
80 REAL,
PARAMETER :: Cice=1.634e13, cwet=1./.189, cboth=cice/.224, &
81 & nli_min=1.e3, rfmax=45.259, rqmix=0.1e-3,nsi_max=250.e3
83 real,
dimension(ista_2l:iend_2u,jsta_2l:jend_2u),
intent(in) :: P1D,T1D,Q1D,C1D,FI1D,FR1D, &
85 real,
dimension(ista_2l:iend_2u,jsta_2l:jend_2u),
intent(inout) :: QW1,QI1,QR1,QS1,DBZ1,DBZR1,&
86 dbzi1,dbzc1,nlice1,nrain1
89 real :: TC,Frain,Fice,RimeF,Xsimass,Qice,Qsat,ESAT,WV,RHO,RRHO, &
90 & rqr,drmm,qsigrd,wvqw,dum,xli,qlice,wc,dli,nlimax,nsimax, &
91 & rqlice, n0r,ztot,zrain,zice,zconv,zmin,zmix,nlice,nsmice, &
92 & qsmice,nrain,nmix,zsmice
93 logical :: LARGE_RF, HAIL
99 zmin=10.**(0.1*dbzmin)
121 IF (c1d(i,j) <= epsq)
THEN
138 IF (tc<=t_ice .OR. fice>=1.)
THEN
141 ELSE IF (fice <= 0.)
THEN
147 IF (qw1(i,j)>0. .AND. frain>0.)
THEN
148 IF (frain >= 1.)
THEN
152 qr1(i,j)=frain*qw1(i,j)
153 qw1(i,j)=qw1(i,j)-qr1(i,j)
156 wv=q1d(i,j)/(1.-q1d(i,j))
160 esat=1000.*
fpvs(t1d(i,j))
161 qsat=eps*esat/(p1d(i,j)-esat)
162 rho=p1d(i,j)/(rd*t1d(i,j)*(1.+d608*q1d(i,j)))
168 IF (qr1(i,j) > epsq)
THEN
170 IF (rqr <= rqr_drmin)
THEN
171 n0r=max(n0rmin, cn0r_dmrmin*rqr)
173 ELSE IF (rqr >= rqr_drmax)
THEN
178 indexr=max( xmrmin, min(cn0r0*rqr**.25, xmrmax) )
183 drmm=1.e-3*real(indexr)
187 nrain=n0r*1.e-6*real(indexr)
189 zrain=0.72*n0r*drmm*drmm*drmm*drmm*drmm*drmm*drmm
196 IF (qi1(i,j) > epsq)
THEN
220 nsimax=max(nsi_max,0.1*rho*qice/massi(mdimin) )
225 nsmice=min(0.01*exp(-0.6*tc), nsimax)
226 dum=rrho*massi(mdimin)
227 nsmice=min(nsmice, qice/dum)
230 qlice=max(0., qice-qsmice)
233 rimef=amax1(1., fs1d(i,j) )
234 rimef=min(rimef, rfmax)
236 dum=xmimax*exp(.0536*tc)
237 indexs=min(mdimax, max(mdimin, int(dum) ) )
247 nlimax=10.e3*exp(-0.017*dum)
249 nlice=rqlice/(rimef*massi(indexs))
250 dum=nli_min*massi(mdimin)
251new_nlice:
IF (rqlice<dum)
THEN
252 nlice=rqlice/massi(mdimin)
253 ELSE IF (nlice<nli_min .OR. nlice>nlimax)
THEN new_nlice
258 nlice=max(nli_min, min(nlimax, nlice) )
259 xli=rqlice/(nlice*rimef)
260new_size:
IF (xli <= massi(mdimin) )
THEN
262 ELSE IF (xli <= massi(450) )
THEN new_size
263 dli=9.5885e5*xli**.42066
264 indexs=min(mdimax, max(mdimin, int(dli) ) )
265 ELSE IF (xli <= massi(mdimax) )
THEN new_size
266 dli=3.9751e6*xli**.49870
267 indexs=min(mdimax, max(mdimin, int(dli) ) )
270 IF (large_rf) hail=.true.
272no_hail:
IF (.NOT. hail)
THEN
273 nlice=rqlice/(rimef*massi(indexs))
287 IF (nsmice > 0.)
THEN
288 zsmice=cice*rho*rho*qsmice*qsmice/nsmice
290 if (nlice1(i,j) /= 0.0) zice=cice*rqlice*rqlice/nlice1(i,j)
291 IF (tc>=0.) zice=cwet*zice
297dbz_mix:
IF (rqr>rqmix .AND. rqlice>rqmix)
THEN
304 zmix=cboth*dum*dum/nmix
305 IF (zmix > zrain+zice)
THEN
317 ztot=zrain+zice+zconv
318 IF (ztot > zmin) dbz1(i,j)= 10.*alog10(ztot)
319 IF (zrain > zmin) dbzr1(i,j)=10.*alog10(zrain)
320 IF (zice > zmin) dbzi1(i,j)=10.*alog10(zice)
322 IF (zconv > zmin) dbzc1(i,j)=10.*alog10(zconv)
332 QW1,QI1,QR1,QS1,DBZ1,DBZR1,DBZI1,DBZC1,NLICE1,NRAIN1)
369 use params_mod,
only: dbzmin, epsq, tfrz, eps, rd, d608, oneps, nlimin
370 use ctlblk_mod,
only: jsta, jend, jsta_2l, jend_2u, im, &
371 ista, iend, ista_2l, iend_2u
372 use rhgrd_mod,
only: rhgrd
373 use cmassi_mod,
only: t_ice, rqr_drmin, n0rmin, cn0r_dmrmin, mdrmin, &
374 rqr_drmax,cn0r_dmrmax, mdrmax, n0r0, xmrmin, xmrmax,flarge2, &
375 massi, cn0r0, mdimin, xmimax, mdimax,nlimax
379 INTEGER INDEXS, INDEXR
380 REAL,
PARAMETER :: Cice=1.634e13
382 real,
dimension(ista_2l:iend_2u,jsta_2l:jend_2u),
intent(in) :: P1D,T1D,Q1D,C1D,FI1D,FR1D, &
384 real,
dimension(ista_2l:iend_2u,jsta_2l:jend_2u),
intent(inout) :: QW1,QI1,QR1,QS1,DBZ1,DBZR1,&
385 dbzi1,dbzc1,nlice1,nrain1
387 REAL N0r,Ztot,Zrain,Zice,Zconv,Zmin
389 real TC, Frain,Fice,Flimass,FLARGE, &
390 fsmall,rimef,xsimass,qice,qsat,esat,wv,rho,rrho,rqr, &
391 drmm,qsigrd,wvqw,dum,xli,qlice,wc,dli,xlimass
392 real,
external :: fpvs
397 zmin=10.**(0.1*dbzmin)
417 IF (c1d(i,j) <= epsq)
THEN
434 IF (tc<=t_ice .OR. fice>=1.)
THEN
437 ELSE IF (fice <= 0.)
THEN
443 IF (qw1(i,j)>0. .AND. frain>0.)
THEN
444 IF (frain >= 1.)
THEN
448 qr1(i,j)=frain*qw1(i,j)
449 qw1(i,j)=qw1(i,j)-qr1(i,j)
452 wv=q1d(i,j)/(1.-q1d(i,j))
456 esat=1000.*
fpvs(t1d(i,j))
457 qsat=eps*esat/(p1d(i,j)-esat)
458 rho=p1d(i,j)/(rd*t1d(i,j)*(1.+d608*q1d(i,j)))
463 IF (qr1(i,j) > epsq)
THEN
465 IF (rqr <= rqr_drmin)
THEN
466 n0r=max(n0rmin, cn0r_dmrmin*rqr)
468 ELSE IF (rqr >= rqr_drmax)
THEN
473 indexr=max( xmrmin, min(cn0r0*rqr**.25, xmrmax) )
478 drmm=1.e-3*real(indexr)
479 zrain=0.72*n0r*drmm*drmm*drmm*drmm*drmm*drmm*drmm
483 nrain1(i,j)=n0r*1.e-6*real(indexr)
489 IF (qi1(i,j) > epsq)
THEN
491 rho=p1d(i,j)/(rd*t1d(i,j)*(1.+oneps*q1d(i,j)))
509 IF (tc>=0. .OR. wvqw<qsigrd)
THEN
515 fsmall=(1.-flarge)/flarge
516 xsimass=rrho*massi(mdimin)*fsmall
517 dum=xmimax*exp(.0536*tc)
518 indexs=min(mdimax, max(mdimin, int(dum) ) )
519 rimef=amax1(1., fs1d(i,j) )
520 xlimass=rrho*rimef*massi(indexs)
521 flimass=xlimass/(xlimass+xsimass)
523 nlice1(i,j)=qlice/xlimass
524 IF (nlice1(i,j)<nlimin .OR. nlice1(i,j)>nlimax)
THEN
528 dum=max(nlimin, min(nlimax, nlice1(i,j)) )
529 xli=rho*(qice/dum-xsimass)/rimef
530 IF (xli <= massi(mdimin) )
THEN
532 ELSE IF (xli <= massi(450) )
THEN
533 dli=9.5885e5*xli**.42066
534 indexs=min(mdimax, max(mdimin, int(dli) ) )
535 ELSE IF (xli <= massi(mdimax) )
THEN
536 dli=3.9751e6*xli**.49870
537 indexs=min(mdimax, max(mdimin, int(dli) ) )
546 rimef=rho*(qice/nlimax-xsimass)/massi(indexs)
548 xlimass=rrho*rimef*massi(indexs)
549 flimass=xlimass/(xlimass+xsimass)
551 nlice1(i,j)=qlice/xlimass
553 qs1(i,j)=amin1(qi1(i,j), qlice)
554 qi1(i,j)=amax1(0., qi1(i,j)-qs1(i,j))
565 zice=cice*rho*rho*qlice*qlice/nlice1(i,j)
56910 ztot=zrain+zice+zconv
570 IF (ztot > zmin) dbz1(i,j)= 10.*alog10(ztot)
571 IF (zrain > zmin) dbzr1(i,j)=10.*alog10(zrain)
572 IF (zice > zmin) dbzi1(i,j)=10.*alog10(zice)
573 IF (zconv > zmin) dbzc1(i,j)=10.*alog10(zconv)