303 QW1,QI1,QR1,QS1,DBZ1,DBZR1,DBZI1,DBZC1,NLICE1,NRAIN1)
337 use params_mod,
only: dbzmin, epsq, tfrz, eps, rd, d608, oneps, nlimin
338 use ctlblk_mod,
only: jsta, jend, jsta_2l, jend_2u, im, &
339 ista, iend, ista_2l, iend_2u
340 use rhgrd_mod,
only: rhgrd
341 use cmassi_mod,
only: t_ice, rqr_drmin, n0rmin, cn0r_dmrmin, mdrmin, &
342 rqr_drmax,cn0r_dmrmax, mdrmax, n0r0, xmrmin, xmrmax,flarge2, &
343 massi, cn0r0, mdimin, xmimax, mdimax,nlimax
347 INTEGER INDEXS, INDEXR
348 REAL,
PARAMETER :: Cice=1.634e13
350 real,
dimension(ista_2l:iend_2u,jsta_2l:jend_2u),
intent(in) :: P1D
352 real,
dimension(ista_2l:iend_2u,jsta_2l:jend_2u),
intent(inout) :: QW1
355 REAL N0r,Ztot,Zrain,Zice,Zconv,Zmin
357 real TC, Frain,Fice,Flimass,FLARGE, &
358 fsmall,rimef,xsimass,qice,qsat,esat,wv,rho,rrho,rqr,
359 drmm,qsigrd,wvqw,dum,xli,qlice,wc,dli,xlimass
360 real,
external :: fpvs
365 zmin=10.**(0.1*dbzmin)
385 IF (c1d(i,j) <= epsq)
THEN
402 IF (tc<=t_ice .OR. fice>=1.)
THEN
405 ELSE IF (fice <= 0.)
THEN
411 IF (qw1(i,j)>0. .AND. frain>0.)
THEN
412 IF (frain >= 1.)
THEN
416 qr1(i,j)=frain*qw1(i,j)
417 qw1(i,j)=qw1(i,j)-qr1(i,j)
420 wv=q1d(i,j)/(1.-q1d(i,j))
424 esat=1000.*
fpvs(t1d(i,j))
425 qsat=eps*esat/(p1d(i,j)-esat)
426 rho=p1d(i,j)/(rd*t1d(i,j)*(1.+d608*q1d(i,j)))
431 IF (qr1(i,j) > epsq)
THEN
433 IF (rqr <= rqr_drmin)
THEN
434 n0r=max(n0rmin, cn0r_dmrmin*rqr)
436 ELSE IF (rqr >= rqr_drmax)
THEN
441 indexr=max( xmrmin, min(cn0r0*rqr**.25, xmrmax) )
446 drmm=1.e-3*real(indexr)
447 zrain=0.72*n0r*drmm*drmm*drmm*drmm*drmm*drmm*drmm
451 nrain1(i,j)=n0r*1.e-6*real(indexr)
457 IF (qi1(i,j) > epsq)
THEN
459 rho=p1d(i,j)/(rd*t1d(i,j)*(1.+oneps*q1d(i,j)))
477 IF (tc>=0. .OR. wvqw<qsigrd)
THEN
483 fsmall=(1.-flarge)/flarge
484 xsimass=rrho*massi(mdimin)*fsmall
485 dum=xmimax*exp(.0536*tc)
486 indexs=min(mdimax, max(mdimin, int(dum) ) )
487 rimef=amax1(1., fs1d(i,j) )
488 xlimass=rrho*rimef*massi(indexs)
489 flimass=xlimass/(xlimass+xsimass)
491 nlice1(i,j)=qlice/xlimass
492 IF (nlice1(i,j)<nlimin .OR. nlice1(i,j)>nlimax)
THEN
496 dum=max(nlimin, min(nlimax, nlice1(i,j)) )
497 xli=rho*(qice/dum-xsimass)/rimef
498 IF (xli <= massi(mdimin) )
THEN
500 ELSE IF (xli <= massi(450) )
THEN
501 dli=9.5885e5*xli**.42066
502 indexs=min(mdimax, max(mdimin, int(dli) ) )
503 ELSE IF (xli <= massi(mdimax) )
THEN
504 dli=3.9751e6*xli**.49870
505 indexs=min(mdimax, max(mdimin, int(dli) ) )
514 rimef=rho*(qice/nlimax-xsimass)/massi(indexs)
516 xlimass=rrho*rimef*massi(indexs)
517 flimass=xlimass/(xlimass+xsimass)
519 nlice1(i,j)=qlice/xlimass
521 qs1(i,j)=amin1(qi1(i,j), qlice)
522 qi1(i,j)=amax1(0., qi1(i,j)-qs1(i,j))
533 zice=cice*rho*rho*qlice*qlice/nlice1(i,j)
53710 ztot=zrain+zice+zconv
538 IF (ztot > zmin) dbz1(i,j)= 10.*alog10(ztot)
539 IF (zrain > zmin) dbzr1(i,j)=10.*alog10(zrain)
540 IF (zice > zmin) dbzi1(i,j)=10.*alog10(zice)
541 IF (zconv > zmin) dbzc1(i,j)=10.*alog10(zconv)