443 integer ,
intent(in ) :: &
444 ids,ide, jds,jde, kds,kde, &
445 ims,ime, jms,jme, kms,kme, &
446 its,ite, jts,jte, kts,kte
447 integer ,
intent(in ) :: lat
448 integer ,
optional,
intent(in ) :: microphysics_debug, diag_i_dbg, diag_j_dbg
449 real(kind=kind_phys) ,
intent(in ) :: delt
450 real(kind=kind_phys) ,
intent(in ) :: g, cpd, cpv, t0c, &
456 real(kind=kind_phys) ,
intent(in ) :: ccn0
457 real(kind=kind_phys),
dimension(ims:ime) ,
intent(in ) :: slmsk
458 real(kind=kind_phys),
dimension(ims:ime,kms:kme) ,
intent(in ) :: p
459 real(kind=kind_phys),
dimension(ims:ime,kms:kme) ,
intent(in ) :: delz
460 real(kind=kind_phys),
dimension(ims:ime,kms:kme) ,
intent(in ) :: den
461 real(kind=kind_phys),
dimension(its:ite,kts:kte) ,
intent(inout) :: t
462 real(kind=kind_phys),
dimension(its:ite,kts:kte,2) ,
intent(inout) :: qci
463 real(kind=kind_phys),
dimension(its:ite,kts:kte,3) ,
intent(inout) :: qrs
464 real(kind=kind_phys),
dimension(its:ite,kts:kte,3) ,
intent(inout) :: ncr
465 real(kind=kind_phys),
dimension(ims:ime,kms:kme) ,
intent(inout) :: q
466 real(kind=kind_phys),
dimension(ims:ime) ,
intent(inout) :: rain
467 real(kind=kind_phys),
dimension(ims:ime) ,
intent(inout) :: rainncv
468 real(kind=kind_phys),
dimension(ims:ime) ,
intent(inout) :: sr
469 real(kind=kind_phys),
dimension(ims:ime),
optional ,
intent(inout) :: snow
470 real(kind=kind_phys),
dimension(ims:ime),
optional ,
intent(inout) :: snowncv
471 real(kind=kind_phys),
dimension(ims:ime),
optional ,
intent(inout) :: graupel
472 real(kind=kind_phys),
dimension(ims:ime),
optional ,
intent(inout) :: graupelncv
475 real(kind=kind_phys),
dimension(ims:ime),
optional ,
intent(inout) :: rainonly
476 real(kind=kind_phys),
dimension(ims:ime),
optional ,
intent(inout) :: snowonly
479 integer :: debug_local, i_dbg_local, j_dbg_local
481 real(kind=kind_phys),
dimension(its:ite,kts:kte) :: dend
482 real(kind=kind_phys),
dimension(its:ite,kts:kte) :: qcr
483 real(kind=kind_phys),
dimension(its:ite,kts:kte,3) :: rh
484 real(kind=kind_phys),
dimension(its:ite,kts:kte,3) :: qs
485 real(kind=kind_phys),
dimension(its:ite,kts:kte,3) :: rslope, rslope2, rslope3, rslopeb
486 real(kind=kind_phys),
dimension(its:ite,kts:kte,3) :: falk, fall
487 real(kind=kind_phys),
dimension(its:ite,kts:kte,3) :: work1
488 real(kind=kind_phys),
dimension(its:ite,kts:kte,3) :: qrs_tmp
489 real(kind=kind_phys),
dimension(its:ite,kts:kte,2) :: avedia
490 real(kind=kind_phys),
dimension(its:ite,kts:kte) :: rslopec, rslopec2,rslopec3
491 real(kind=kind_phys),
dimension(its:ite,kts:kte) :: workn, falln, falkn
492 real(kind=kind_phys),
dimension(its:ite,kts:kte) :: worka, workr
493 real(kind=kind_phys),
dimension(its:ite,kts:kte) :: den_tmp, delz_tmp, ncr_tmp
494 real(kind=kind_phys),
dimension(its:ite,kts:kte) :: lamdr_tmp
495 real(kind=kind_phys),
dimension(its:ite,kts:kte) :: lamdc_tmp
496 real(kind=kind_phys),
dimension(its:ite,kts:kte) :: falkc, work1c, work2c, fallc
497 real(kind=kind_phys),
dimension(its:ite,kts:kte) :: dqr,dnr
498 real(kind=kind_phys),
dimension(its:ite,kts:kte) :: pcact, prevp, psdep, pgdep, praut, &
499 psaut, pgaut, pracw, psacw, pgacw, &
500 pgacr, pgacs, psaci, pgmlt, praci, &
501 piacr, pracs, psacr, pgaci, pseml, &
502 pgeml, paacw, pigen, pidep, pcond, &
504 real(kind=kind_phys),
dimension(its:ite,kts:kte) :: nraut, nracw, ncevp, nccol, nrcol, &
505 nsacw, ngacw, niacr, nsacr, ngacr, &
506 naacw, nseml, ngeml, ncact
507 real(kind=kind_phys),
dimension(its:ite,kts:kte) :: xl, cpm, work2, denfac, xni, n0sfac, &
509 real(kind=kind_phys),
dimension(its:ite,kts:kte) :: denqrs1, denqrs2, denqrs3
510 real(kind=kind_phys),
dimension(its:ite,kts:kte) :: denqr1, denncr3, denqci
511 real(kind=kind_phys),
dimension(its:ite) :: delqrs1, delqrs2, delqrs3, delncr3
512 real(kind=kind_phys),
dimension(its:ite) :: delqi
513 real(kind=kind_phys),
dimension(its:ite) :: tstepsnow, tstepgraup
514 real(kind=kind_phys) :: gfac, sfac
522 real(kind=kind_phys),
dimension(its:ite) :: tvec1
523 integer,
dimension(its:ite) :: mnstep, numndt
524 integer,
dimension(its:ite) :: mstep, numdt
525 logical,
dimension(its:ite) :: flgcld
526 real(kind=kind_phys) :: temp
527 real(kind=kind_phys) :: vt2ave
528 real(kind=kind_phys) :: holdc, holdci
529 real(kind=kind_phys) :: cpmcal, xlcal, lamdac, diffus, &
530 viscos, xka, venfac, conden, diffac, &
531 x, y, z, a, b, c, d, e, &
532 ndt, qdt, holdrr, holdrs, holdrg, &
533 supcol, supcolt, pvt, coeres, supsat, &
534 dtcld, xmi, eacrs, satdt, qimax, &
535 diameter, xni0, roqi0, &
536 fallsum, fallsum_qsi, fallsum_qg, &
537 vt2i, vt2r, vt2s, vt2g, acrfac, &
539 xlwork2, factor, source,
value, &
541 taucon, lencon, lenconcr, &
542 xlf, pfrzdtc, pfrzdtr, supice, &
543 alpha2, delta2, delta3
545 integer :: i, j, k, mstepmax, &
546 iprt, latd, lond, loop, loops, ifsat, &
551 real(kind=kind_phys) :: dldti, xb, xai, tr, xbi, xa, hvap, &
552 cvap, hsub, dldt, ttp
557 cpmcal(x) = cpd*(1.-max(x,qmin))+max(x,qmin)*cpv
558 xlcal(x) = xlv0-xlv1*(x-t0c)
565 lamdac(x,y,z)= exp(log(((pidnc*z)/(x*y)))*((.33333333)))
570 diffus(x,y) = 8.794e-5 * exp(log(x)*(1.81)) / y
571 viscos(x,y) = 1.496e-6 * (x*sqrt(x)) /(x+120.)/y
572 xka(x,y) = 1.414e3*viscos(x,y)*y
573 diffac(a,b,c,d,e) = d*a*a/(xka(c,d)*rv*c*c)+1./(e*diffus(c,b))
574 venfac(a,b,c) = exp(log((viscos(b,c)/diffus(b,a)))*((.3333333))) &
575 /sqrt(viscos(b,c))*sqrt(sqrt(den0/c))
576 conden(a,b,c,d,e) = (max(b,qmin)-c)/(1.+d*d/(rv*e)*c/(a*a))
584 if (
present(microphysics_debug))
then
585 debug_local = microphysics_debug
589 if (
present(diag_i_dbg))
then
590 i_dbg_local = diag_i_dbg
594 if (
present(diag_j_dbg))
then
595 j_dbg_local = diag_j_dbg
602 qci(i,k,1) = max(qci(i,k,1),0.0)
603 qrs(i,k,1) = max(qrs(i,k,1),0.0)
604 qci(i,k,2) = max(qci(i,k,2),0.0)
605 qrs(i,k,2) = max(qrs(i,k,2),0.0)
606 qrs(i,k,3) = max(qrs(i,k,3),0.0)
607 ncr(i,k,1) = min(max(ncr(i,k,1),1.e8),2.e10)
608 ncr(i,k,2) = max(ncr(i,k,2),0.0)
609 ncr(i,k,3) = max(ncr(i,k,3),0.0)
625 cpm(i,k) = cpmcal(q(i,k))
626 xl(i,k) = xlcal(t(i,k))
632 if(slmsk(i).eq.2)
then
641 delz_tmp(i,k) = delz(i,k)
642 den_tmp(i,k) = den(i,k)
650 if(
present(snowncv) .and.
present(snow)) snowncv(i) = 0.
651 if(
present (graupelncv) .and.
present(graupel)) graupelncv(i) = 0.
662 loops = max(nint(delt/dtcldcr),1)
664 if(delt.le.dtcldcr) dtcld = delt
677 call vrec_d( tvec1(its), den(its,k), ite-its+1)
679 tvec1(i) = tvec1(i)*den0
681 call vsqrt_d( denfac(its,k), tvec1(its), ite-its+1)
694 xb = xa+hvap/(rv*ttp)
697 xbi = xai+hsub/(rv*ttp)
705 qs(i,k,1) = psat*exp(log(tr)*(xa))*exp(xb*(1.-tr))
706 qs(i,k,1) = min(qs(i,k,1),0.99*p(i,k))
708 qs(i,k,1) = ep2*qs(i,k,1)/(p(i,k)-qs(i,k,1))
710 qs(i,k,1) = max(qs(i,k,1),qmin)
712 rh(i,k,1) = max(q(i,k)/qs(i,k,1),qmin)
716 if(t(i,k).lt.ttp)
then
718 qs(i,k,2) = psat*exp(log(tr)*(xai))*exp(xbi*(1.-tr))
721 qs(i,k,2) = psat*exp(log(tr)*(xa))*exp(xb*(1.-tr))
723 qs(i,k,2) = min(qs(i,k,2),0.99*p(i,k))
725 qs(i,k,2) = ep2*qs(i,k,2)/(p(i,k)-qs(i,k,2))
727 qs(i,k,2) = max(qs(i,k,2),qmin)
729 rh(i,k,2) = max(q(i,k)/qs(i,k,2),qmin)
801 if(qci(i,k,1).le.qmin .or. ncr(i,k,2).le.ncmin )
then
802 rslopec(i,k) = rslopecmax
803 rslopec2(i,k) = rslopec2max
804 rslopec3(i,k) = rslopec3max
806 rslopec(i,k) = 1./lamdac(qci(i,k,1),den(i,k),ncr(i,k,2))
807 rslopec2(i,k) = rslopec(i,k)*rslopec(i,k)
808 rslopec3(i,k) = rslopec2(i,k)*rslopec(i,k)
813 temp = (den(i,k)*max(qci(i,k,2),qmin))
814 temp = sqrt(sqrt(temp*temp*temp))
815 xni(i,k) = min(max(5.38e7*temp,1.e3),1.e6)
828 qrs_tmp(i,k,1) = qrs(i,k,1)
829 qrs_tmp(i,k,2) = qrs(i,k,2)
830 qrs_tmp(i,k,3) = qrs(i,k,3)
831 ncr_tmp(i,k) = ncr(i,k,3)
834 call slope_wdm6(qrs_tmp,ncr_tmp,den_tmp,denfac,t,rslope,rslopeb,rslope2, &
835 rslope3,work1,workn,its,ite,kts,kte)
847 work1(i,k,1) = work1(i,k,1)/delz(i,k)
848 workn(i,k) = workn(i,k)/delz(i,k)
849 numdt(i) = max(nint(max(work1(i,k,1),workn(i,k))*dtcld+.5),1)
850 if(numdt(i).ge.mstep(i)) mstep(i) = numdt(i)
854 if(mstepmax.le.mstep(i)) mstepmax = mstep(i)
864 if(n.le.mstep(i))
then
865 falk(i,k,1) = dend(i,k)*qrs(i,k,1)*work1(i,k,1)/mstep(i)
866 falkn(i,k) = ncr(i,k,3)*workn(i,k)/mstep(i)
867 fall(i,k,1) = fall(i,k,1)+falk(i,k,1)
868 falln(i,k) = falln(i,k)+falkn(i,k)
869 qrs(i,k,1) = max(qrs(i,k,1)-falk(i,k,1)*dtcld/dend(i,k),0.)
870 ncr(i,k,3) = max(ncr(i,k,3)-falkn(i,k)*dtcld,0.)
874 do k = kte_in-1,kts,-1
876 if(n.le.mstep(i))
then
877 falk(i,k,1) = dend(i,k)*qrs(i,k,1)*work1(i,k,1)/mstep(i)
878 falkn(i,k) = ncr(i,k,3)*workn(i,k)/mstep(i)
879 fall(i,k,1) = fall(i,k,1)+falk(i,k,1)
880 falln(i,k) = falln(i,k)+falkn(i,k)
881 dqr(i,k) = min(falk(i,k,1)*dtcld/dend(i,k),qrs(i,k,1))
882 dqr(i,k+1) = min(falk(i,k+1,1)*delz(i,k+1)/delz(i,k) &
883 *dtcld/dend(i,k),qrs(i,k+1,1))
884 dnr(i,k) = min(falkn(i,k)*dtcld,ncr(i,k,3))
885 dnr(i,k+1) = min(falkn(i,k+1)*delz(i,k+1)/delz(i,k)*dtcld, &
887 qrs(i,k,1) = max(qrs(i,k,1)-dqr(i,k)+dqr(i,k+1),0.)
888 ncr(i,k,3) = max(ncr(i,k,3)-dnr(i,k)+dnr(i,k+1),0.)
894 qrs_tmp(i,k,1) = qrs(i,k,1)
895 ncr_tmp(i,k) = ncr(i,k,3)
898 call slope_rain(qrs_tmp,ncr_tmp,den_tmp,denfac,t,rslope,rslopeb,rslope2, &
899 rslope3,work1,workn,its,ite,kts,kte)
902 work1(i,k,1) = work1(i,k,1)/delz(i,k)
903 workn(i,k) = workn(i,k)/delz(i,k)
915 qsum(i,k) = max( (qrs(i,k,2)+qrs(i,k,3)), 1.e-15)
916 if(qsum(i,k) .gt. 1.e-15 )
then
917 worka(i,k) = (work1(i,k,2)*qrs(i,k,2) + work1(i,k,3)*qrs(i,k,3)) &
922 denqrs2(i,k) = den(i,k)*qrs(i,k,2)
923 denqrs3(i,k) = den(i,k)*qrs(i,k,3)
926 call nislfv_rain_plm6(idim,kdim,den_tmp,denfac,t,delz_tmp,worka, &
927 denqrs2,denqrs3,delqrs2,delqrs3,dtcld,1,1)
930 qrs(i,k,2) = max(denqrs2(i,k)/den(i,k),0.)
931 qrs(i,k,3) = max(denqrs3(i,k)/den(i,k),0.)
932 fall(i,k,2) = denqrs2(i,k)*worka(i,k)/delz(i,k)
933 fall(i,k,3) = denqrs3(i,k)*worka(i,k)/delz(i,k)
937 fall(i,1,2) = delqrs2(i)/delz(i,1)/dtcld
938 fall(i,1,3) = delqrs3(i)/delz(i,1)/dtcld
947 qrs_tmp(i,k,1) = qrs(i,k,1)
948 qrs_tmp(i,k,2) = qrs(i,k,2)
949 qrs_tmp(i,k,3) = qrs(i,k,3)
950 ncr_tmp(i,k) = ncr(i,k,3)
953 call slope_wdm6(qrs_tmp,ncr_tmp,den_tmp,denfac,t,rslope,rslopeb,rslope2, &
954 rslope3,work1,workn,its,ite,kts,kte)
963 n0sfac(i,k) = max(min(exp(alpha*supcol),n0smax/n0s),1.)
964 if(t(i,k).gt.t0c)
then
970 work2(i,k) = venfac(p(i,k),t(i,k),den(i,k))
971 if(qrs(i,k,2).gt.0.)
then
972 coeres = rslope2(i,k,2)*sqrt(rslope(i,k,2)*rslopeb(i,k,2))
973 psmlt(i,k) = xka(t(i,k),den(i,k))/xlf*(t0c-t(i,k))*pi/2. &
974 *n0sfac(i,k)*(precs1*rslope2(i,k,2) &
975 +precs2*work2(i,k)*coeres)/den(i,k)
976 psmlt(i,k) = min(max(psmlt(i,k)*dtcld,-qrs(i,k,2)),0.)
981 if(qrs(i,k,2).gt.qcrmin)
then
982 sfac = rslope(i,k,2)*n0s*n0sfac(i,k)/qrs(i,k,2)
983 ncr(i,k,3) = ncr(i,k,3) - sfac*psmlt(i,k)
986 qrs(i,k,2) = qrs(i,k,2) + psmlt(i,k)
987 qrs(i,k,1) = qrs(i,k,1) - psmlt(i,k)
988 t(i,k) = t(i,k) + xlf/cpm(i,k)*psmlt(i,k)
994 if(qrs(i,k,3).gt.0.)
then
995 coeres = rslope2(i,k,3)*sqrt(rslope(i,k,3)*rslopeb(i,k,3))
996 pgmlt(i,k) = xka(t(i,k),den(i,k))/xlf*(t0c-t(i,k))*(precg1 &
997 *rslope2(i,k,3) + precg2*work2(i,k)*coeres) &
999 pgmlt(i,k) = min(max(pgmlt(i,k)*dtcld,-qrs(i,k,3)),0.)
1004 if(qrs(i,k,3).gt.qcrmin)
then
1005 gfac = rslope(i,k,3)*n0g/qrs(i,k,3)
1006 ncr(i,k,3) = ncr(i,k,3) - gfac*pgmlt(i,k)
1009 qrs(i,k,3) = qrs(i,k,3) + pgmlt(i,k)
1010 qrs(i,k,1) = qrs(i,k,1) - pgmlt(i,k)
1011 t(i,k) = t(i,k) + xlf/cpm(i,k)*pgmlt(i,k)
1023 if(qci(i,k,2).le.0.)
then
1026 xmi = den(i,k)*qci(i,k,2)/xni(i,k)
1027 diameter = max(min(dicon * sqrt(xmi),dimax), 1.e-25)
1028 work1c(i,k) = 1.49e4*exp(log(diameter)*(1.31))
1039 denqci(i,k) = den(i,k)*qci(i,k,2)
1042 call nislfv_rain_plmr(idim,kdim,den_tmp,denfac,t,delz_tmp,work1c,denqci,denqci, &
1046 qci(i,k,2) = max(denqci(i,k)/den(i,k),0.)
1050 fallc(i,1) = delqi(i)/delz(i,1)/dtcld
1061 fallsum = fall(i,kts,1)+fall(i,kts,2)+fall(i,kts,3)+fallc(i,kts)
1062 fallsum_qsi = fall(i,kts,2)+fallc(i,kts)
1063 fallsum_qg = fall(i,kts,3)
1064 if(fallsum.gt.0.)
then
1065 rainncv(i) = fallsum*delz(i,kts)/denr*dtcld*1000. + rainncv(i)
1066 rain(i) = fallsum*delz(i,kts)/denr*dtcld*1000. + rain(i)
1068 If(fallsum_qsi.gt.0.)
then
1069 tstepsnow(i) = fallsum_qsi*delz(i,kts)/denr*dtcld*1000. + tstepsnow(i)
1070 IF(
PRESENT (snowncv) .AND.
PRESENT (snow))
THEN
1071 snowncv(i) = fallsum_qsi*delz(i,kts)/denr*dtcld*1000. + snowncv(i)
1072 snow(i) = fallsum_qsi*delz(i,kts)/denr*dtcld*1000. + snow(i)
1075 IF(fallsum_qg.gt.0.)
then
1076 tstepgraup(i) = fallsum_qg*delz(i,kts)/denr*dtcld*1000. &
1078 IF(
PRESENT (graupelncv) .AND.
PRESENT (graupel))
THEN
1079 graupelncv(i) = fallsum_qg*delz(i,kts)/denr*dtcld*1000. &
1081 graupel(i) = fallsum_qg*delz(i,kts)/denr*dtcld*1000. + graupel(i)
1084 IF (
PRESENT (rainonly))
THEN
1085 rainonly(i) = fall(i,kts,1)*delz(i,kts)/denr*dtcld*1000. + rainonly(i)
1087 IF (
PRESENT (snowonly))
THEN
1088 snowonly(i) = fall(i,kts,2)*delz(i,kts)/denr*dtcld*1000. + snowonly(i)
1090 IF (
PRESENT (snowncv))
THEN
1091 if(fallsum.gt.0.)sr(i)=(snowncv(i) + graupelncv(i))/(rainncv(i)+1.e-12)
1093 if(fallsum.gt.0.)sr(i)=(tstepsnow(i) + tstepgraup(i))/(rainncv(i)+1.e-12)
1109 if(supcol.lt.0.) xlf = xlf0
1110 if(supcol.lt.0 .and. qci(i,k,2).gt.0.)
then
1111 qci(i,k,1) = qci(i,k,1) + qci(i,k,2)
1116 if(qci(i,k,2).gt.qmin)
then
1117 ncr(i,k,2) = ncr(i,k,2) + xni(i,k)
1119 t(i,k) = t(i,k) - xlf/cpm(i,k)*qci(i,k,2)
1127 if(supcol.gt.40. .and. qci(i,k,1).gt.0.)
then
1128 qci(i,k,2) = qci(i,k,2) + qci(i,k,1)
1133 if(ncr(i,k,2).gt.0.) ncr(i,k,2) = 0.
1134 t(i,k) = t(i,k) + xlf/cpm(i,k)*qci(i,k,1)
1142 if(supcol.gt.0. .and. qci(i,k,1).gt.qmin)
then
1143 supcolt=min(supcol,70.)
1144 pfrzdtc = min(pi*pi*pfrz1*(exp(pfrz2*supcolt)-1.)*denr/den(i,k) &
1145 *ncr(i,k,2)*rslopec3(i,k)*rslopec3(i,k)/18.*dtcld &
1151 if(ncr(i,k,2).gt.ncmin)
then
1152 nfrzdtc = min(pi*pfrz1*(exp(pfrz2*supcolt)-1.)*ncr(i,k,2) &
1153 *rslopec3(i,k)/6.*dtcld,ncr(i,k,2))
1154 ncr(i,k,2) = ncr(i,k,2) - nfrzdtc
1156 qci(i,k,2) = qci(i,k,2) + pfrzdtc
1157 t(i,k) = t(i,k) + xlf/cpm(i,k)*pfrzdtc
1158 qci(i,k,1) = qci(i,k,1)-pfrzdtc
1165 if(supcol.gt.0. .and. qrs(i,k,1).gt.0.)
then
1166 supcolt=min(supcol,70.)
1167 pfrzdtr = min(140.*(pi*pi)*pfrz1*ncr(i,k,3)*denr/den(i,k) &
1168 *(exp(pfrz2*supcolt)-1.)*rslope3(i,k,1)*rslope3(i,k,1) &
1176 if(ncr(i,k,3).gt.nrmin)
then
1177 nfrzdtr = min(4.*pi*pfrz1*ncr(i,k,3)*(exp(pfrz2*supcolt)-1.) &
1178 *rslope3(i,k,1)*dtcld, ncr(i,k,3))
1179 ncr(i,k,3) = ncr(i,k,3) - nfrzdtr
1181 qrs(i,k,3) = qrs(i,k,3) + pfrzdtr
1182 t(i,k) = t(i,k) + xlf/cpm(i,k)*pfrzdtr
1183 qrs(i,k,1) = qrs(i,k,1) - pfrzdtr
1194 ncr(i,k,2) = max(ncr(i,k,2),0.0)
1195 ncr(i,k,3) = max(ncr(i,k,3),0.0)
1205 qrs_tmp(i,k,1) = qrs(i,k,1)
1206 qrs_tmp(i,k,2) = qrs(i,k,2)
1207 qrs_tmp(i,k,3) = qrs(i,k,3)
1208 ncr_tmp(i,k) = ncr(i,k,3)
1211 call slope_wdm6(qrs_tmp,ncr_tmp,den_tmp,denfac,t,rslope,rslopeb,rslope2, &
1212 rslope3,work1,workn,its,ite,kts,kte)
1219 avedia(i,k,2) = rslope(i,k,1)*((24.)**(.3333333))
1221 if(qci(i,k,1).le.qmin .or. ncr(i,k,2).le.ncmin)
then
1222 rslopec(i,k) = rslopecmax
1223 rslopec2(i,k) = rslopec2max
1224 rslopec3(i,k) = rslopec3max
1226 rslopec(i,k) = 1./lamdac(qci(i,k,1),den(i,k),ncr(i,k,2))
1227 rslopec2(i,k) = rslopec(i,k)*rslopec(i,k)
1228 rslopec3(i,k) = rslopec2(i,k)*rslopec(i,k)
1234 avedia(i,k,1) = rslopec(i,k)
1243 work1(i,k,1) = diffac(xl(i,k),p(i,k),t(i,k),den(i,k),qs(i,k,1))
1246 work1(i,k,2) = diffac(xls,p(i,k),t(i,k),den(i,k),qs(i,k,2))
1249 work2(i,k) = venfac(p(i,k),t(i,k),den(i,k))
1267 supsat = max(q(i,k),qmin)-qs(i,k,1)
1268 satdt = supsat/dtcld
1273 lencon = 2.7e-2*den(i,k)*qci(i,k,1)*(1.e20/16.*rslopec2(i,k) &
1275 lenconcr = max(1.2*lencon, qcrmin)
1276 if(qci(i,k,1).gt.qcr(i,k).and.ncr(i,k,2).gt.ncmin)
then
1277 praut(i,k) = qck1*qci(i,k,1)**(7./3.)*ncr(i,k,2)**(-1./3.)
1278 praut(i,k) = min(praut(i,k),qci(i,k,1)/dtcld)
1283 nraut(i,k) = 3.5e9*den(i,k)*praut(i,k)
1284 if(qrs(i,k,1).gt.lenconcr) &
1285 nraut(i,k) = ncr(i,k,3)/qrs(i,k,1)*praut(i,k)
1286 nraut(i,k) = min(nraut(i,k),ncr(i,k,2)/dtcld)
1294 if(qrs(i,k,1).ge.lenconcr)
then
1295 if(avedia(i,k,2).ge.di100)
then
1296 nracw(i,k) = min(ncrk1*ncr(i,k,2)*ncr(i,k,3)*(rslopec3(i,k) &
1297 + 24.*rslope3(i,k,1)),ncr(i,k,2)/dtcld)
1298 pracw(i,k) = min(pi/6.*(denr/den(i,k))*ncrk1*ncr(i,k,2) &
1299 *ncr(i,k,3)*rslopec3(i,k)*(2.*rslopec3(i,k) &
1300 + 24.*rslope3(i,k,1)),qci(i,k,1)/dtcld)
1302 nracw(i,k) = min(ncrk2*ncr(i,k,2)*ncr(i,k,3)*(2.*rslopec3(i,k) &
1303 *rslopec3(i,k)+5040.*rslope3(i,k,1) &
1304 *rslope3(i,k,1)),ncr(i,k,2)/dtcld)
1305 pracw(i,k) = min(pi/6.*(denr/den(i,k))*ncrk2*ncr(i,k,2) &
1306 *ncr(i,k,3)*rslopec3(i,k)*(6.*rslopec3(i,k) &
1307 *rslopec3(i,k)+5040.*rslope3(i,k,1)*rslope3(i,k,1)) &
1315 if(avedia(i,k,1).ge.di100)
then
1316 nccol(i,k) = ncrk1*ncr(i,k,2)*ncr(i,k,2)*rslopec3(i,k)
1318 nccol(i,k) = 2.*ncrk2*ncr(i,k,2)*ncr(i,k,2)*rslopec3(i,k) &
1325 if(qrs(i,k,1).ge.lenconcr)
then
1326 if(avedia(i,k,2).lt.di100)
then
1327 nrcol(i,k) = 5040.*ncrk2*ncr(i,k,3)*ncr(i,k,3)*rslope3(i,k,1) &
1329 elseif(avedia(i,k,2).ge.di100 .and. avedia(i,k,2).lt.di600)
then
1330 nrcol(i,k) = 24.*ncrk1*ncr(i,k,3)*ncr(i,k,3)*rslope3(i,k,1)
1331 elseif(avedia(i,k,2).ge.di600 .and. avedia(i,k,2).lt.di2000)
then
1332 coecol = -2.5e3*(avedia(i,k,2)-di600)
1333 nrcol(i,k) = 24.*exp(coecol)*ncrk1*ncr(i,k,3)*ncr(i,k,3) &
1343 if(qrs(i,k,1).gt.0.)
then
1344 coeres = rslope(i,k,1)*sqrt(rslope(i,k,1)*rslopeb(i,k,1))
1345 prevp(i,k) = (rh(i,k,1)-1.)*ncr(i,k,3)*(precr1*rslope(i,k,1) &
1346 + precr2*work2(i,k)*coeres)/work1(i,k,1)
1347 if(prevp(i,k).lt.0.)
then
1348 prevp(i,k) = max(prevp(i,k),-qrs(i,k,1)/dtcld)
1349 prevp(i,k) = max(prevp(i,k),satdt/2)
1354 if(prevp(i,k).eq.-qrs(i,k,1)/dtcld)
then
1355 ncr(i,k,1) = ncr(i,k,1)+ncr(i,k,3)
1358 else if(prevp(i,k).eq.0.)
then
1365 prevp(i,k) = min(prevp(i,k),satdt/2)
1384 n0sfac(i,k) = max(min(exp(alpha*supcol),n0smax/n0s),1.)
1385 supsat = max(q(i,k),qmin)-qs(i,k,2)
1386 satdt = supsat/dtcld
1393 temp = (den(i,k)*max(qci(i,k,2),qmin))
1394 temp = sqrt(sqrt(temp*temp*temp))
1395 xni(i,k) = min(max(5.38e7*temp,1.e3),1.e6)
1396 eacrs = exp(0.07*(-supcol))
1398 xmi = den(i,k)*qci(i,k,2)/xni(i,k)
1399 diameter = min(dicon * sqrt(xmi),dimax)
1400 vt2i = 1.49e4*diameter**1.31
1401 vt2r=pvtr*rslopeb(i,k,1)*denfac(i,k)
1402 vt2s=pvts*rslopeb(i,k,2)*denfac(i,k)
1403 vt2g=pvtg*rslopeb(i,k,3)*denfac(i,k)
1404 qsum(i,k) = max((qrs(i,k,2)+qrs(i,k,3)),1.e-15)
1405 if(qsum(i,k) .gt. 1.e-15)
then
1406 vt2ave=(vt2s*qrs(i,k,2)+vt2g*qrs(i,k,3))/(qsum(i,k))
1410 if(supcol.gt.0. .and. qci(i,k,2).gt.qmin)
then
1411 if(qrs(i,k,1).gt.qcrmin)
then
1416 acrfac = 6.*rslope2(i,k,1)+4.*diameter*rslope(i,k,1) + diameter**2
1417 praci(i,k) = pi*qci(i,k,2)*ncr(i,k,3)*abs(vt2r-vt2i)*acrfac/4.
1419 praci(i,k) = praci(i,k)*min(max(0.0,qrs(i,k,1)/qci(i,k,2)),1.)**2
1420 praci(i,k) = min(praci(i,k),qci(i,k,2)/dtcld)
1425 piacr(i,k) = pi*pi*avtr*ncr(i,k,3)*denr*xni(i,k)*denfac(i,k) &
1426 *g7pbr*rslope3(i,k,1)*rslope2(i,k,1)*rslopeb(i,k,1) &
1429 piacr(i,k) = piacr(i,k)*min(max(0.0,qci(i,k,2)/qrs(i,k,1)),1.)**2
1430 piacr(i,k) = min(piacr(i,k),qrs(i,k,1)/dtcld)
1436 if(ncr(i,k,3).gt.nrmin)
then
1437 niacr(i,k) = pi*avtr*ncr(i,k,3)*xni(i,k)*denfac(i,k)*g4pbr &
1438 *rslope2(i,k,1)*rslopeb(i,k,1)/4.
1440 niacr(i,k) = niacr(i,k)*min(max(0.0,qci(i,k,2)/qrs(i,k,1)),1.)**2
1441 niacr(i,k) = min(niacr(i,k),ncr(i,k,3)/dtcld)
1447 if(qrs(i,k,2).gt.qcrmin)
then
1448 acrfac = 2.*rslope3(i,k,2)+2.*diameter*rslope2(i,k,2) &
1449 + diameter**2*rslope(i,k,2)
1450 psaci(i,k) = pi*qci(i,k,2)*eacrs*n0s*n0sfac(i,k) &
1451 *abs(vt2ave-vt2i)*acrfac/4.
1452 psaci(i,k) = min(psaci(i,k),qci(i,k,2)/dtcld)
1460 if(qrs(i,k,3).gt.qcrmin)
then
1461 egi = exp(0.07*(-supcol))
1462 acrfac = 2.*rslope3(i,k,3)+2.*diameter*rslope2(i,k,3) &
1463 + diameter**2*rslope(i,k,3)
1464 pgaci(i,k) = pi*egi*qci(i,k,2)*n0g*abs(vt2ave-vt2i)*acrfac/4.
1465 pgaci(i,k) = min(pgaci(i,k),qci(i,k,2)/dtcld)
1476 if(qrs(i,k,2).gt.qcrmin .and. qci(i,k,1).gt.qmin)
then
1477 psacw(i,k) = min(pacrc*n0sfac(i,k)*rslope3(i,k,2)*rslopeb(i,k,2) &
1479 *min(max(0.0,qrs(i,k,2)/qci(i,k,1)),1.)**2 &
1480 *qci(i,k,1)*denfac(i,k),qci(i,k,1)/dtcld)
1486 if(qrs(i,k,2).gt.qcrmin .and. ncr(i,k,2).gt.ncmin)
then
1487 nsacw(i,k) = min(pacrc*n0sfac(i,k)*rslope3(i,k,2)*rslopeb(i,k,2) &
1489 *min(max(0.0,qrs(i,k,2)/qci(i,k,1)),1.)**2 &
1490 *ncr(i,k,2)*denfac(i,k),ncr(i,k,2)/dtcld)
1496 if(qrs(i,k,3).gt.qcrmin .and. qci(i,k,1).gt.qmin)
then
1497 pgacw(i,k) = min(pacrg*rslope3(i,k,3)*rslopeb(i,k,3)*qci(i,k,1) &
1499 *min(max(0.0,qrs(i,k,3)/qci(i,k,1)),1.)**2 &
1500 *denfac(i,k),qci(i,k,1)/dtcld)
1506 if(qrs(i,k,3).gt.qcrmin .and. ncr(i,k,2).gt.ncmin)
then
1507 ngacw(i,k) = min(pacrg*rslope3(i,k,3)*rslopeb(i,k,3)*ncr(i,k,2) &
1509 *min(max(0.0,qrs(i,k,3)/qci(i,k,1)),1.)**2 &
1510 *denfac(i,k),ncr(i,k,2)/dtcld)
1516 if(qsum(i,k) .gt. 1.e-15 )
then
1517 paacw(i,k) = (qrs(i,k,2)*psacw(i,k)+qrs(i,k,3)*pgacw(i,k))/(qsum(i,k))
1522 naacw(i,k) = (qrs(i,k,2)*nsacw(i,k)+qrs(i,k,3)*ngacw(i,k))/(qsum(i,k))
1529 if(qrs(i,k,2).gt.qcrmin .and. qrs(i,k,1).gt.qcrmin)
then
1530 if(supcol.gt.0)
then
1531 acrfac = 5.*rslope3(i,k,2)*rslope3(i,k,2) &
1532 + 4.*rslope3(i,k,2)*rslope2(i,k,2)*rslope(i,k,1) &
1533 + 1.5*rslope2(i,k,2)*rslope2(i,k,2)*rslope2(i,k,1)
1534 pracs(i,k) = pi*pi*ncr(i,k,3)*n0s*n0sfac(i,k)*abs(vt2r-vt2ave) &
1535 *(dens/den(i,k))*acrfac
1537 pracs(i,k) = pracs(i,k)*min(max(0.0,qrs(i,k,1)/qrs(i,k,2)),1.)**2
1538 pracs(i,k) = min(pracs(i,k),qrs(i,k,2)/dtcld)
1544 acrfac = 30.*rslope3(i,k,1)*rslope2(i,k,1)*rslope(i,k,2) &
1545 +10.*rslope2(i,k,1)*rslope2(i,k,1)*rslope2(i,k,2) &
1546 + 2.*rslope3(i,k,1)*rslope3(i,k,2)
1547 psacr(i,k) = pi*pi*ncr(i,k,3)*n0s*n0sfac(i,k)*abs(vt2ave-vt2r) &
1548 *(denr/den(i,k))*acrfac
1550 psacr(i,k) = psacr(i,k)*min(max(0.0,qrs(i,k,2)/qrs(i,k,1)),1.)**2
1551 psacr(i,k) = min(psacr(i,k),qrs(i,k,1)/dtcld)
1553 if(qrs(i,k,2).gt.qcrmin .and. ncr(i,k,3).gt.nrmin)
then
1558 acrfac = 1.5*rslope2(i,k,1)*rslope(i,k,2) &
1559 + 1.0*rslope(i,k,1)*rslope2(i,k,2)+.5*rslope3(i,k,2)
1560 nsacr(i,k) = pi*ncr(i,k,3)*n0s*n0sfac(i,k)*abs(vt2ave-vt2r) &
1563 nsacr(i,k) = nsacr(i,k)*min(max(0.0,qrs(i,k,2)/qrs(i,k,1)),1.)**2
1564 nsacr(i,k) = min(nsacr(i,k),ncr(i,k,3)/dtcld)
1570 if(qrs(i,k,3).gt.qcrmin .and. qrs(i,k,1).gt.qcrmin)
then
1571 acrfac = 30.*rslope3(i,k,1)*rslope2(i,k,1)*rslope(i,k,3) &
1572 +10.*rslope2(i,k,1)*rslope2(i,k,1)*rslope2(i,k,3) &
1573 + 2.*rslope3(i,k,1)*rslope3(i,k,3)
1574 pgacr(i,k) = pi*pi*ncr(i,k,3)*n0g*abs(vt2ave-vt2r)*(denr/den(i,k)) &
1577 pgacr(i,k) = pgacr(i,k)*min(max(0.0,qrs(i,k,3)/qrs(i,k,1)),1.)**2
1578 pgacr(i,k) = min(pgacr(i,k),qrs(i,k,1)/dtcld)
1584 if(qrs(i,k,3).gt.qcrmin .and. ncr(i,k,3).gt.nrmin)
then
1585 acrfac = 1.5*rslope2(i,k,1)*rslope(i,k,3) &
1586 + 1.0*rslope(i,k,1)*rslope2(i,k,3) + .5*rslope3(i,k,3)
1587 ngacr(i,k) = pi*ncr(i,k,3)*n0g*abs(vt2ave-vt2r)*acrfac
1589 ngacr(i,k) = ngacr(i,k)*min(max(0.0,qrs(i,k,3)/qrs(i,k,1)),1.)**2
1590 ngacr(i,k) = min(ngacr(i,k),ncr(i,k,3)/dtcld)
1598 if(qrs(i,k,3).gt.qcrmin .and. qrs(i,k,2).gt.qcrmin)
then
1601 if(supcol.le.0)
then
1607 if(qrs(i,k,2).gt.0.) &
1608 pseml(i,k) = min(max(cliq*supcol*(paacw(i,k)+psacr(i,k)) &
1609 /xlf,-qrs(i,k,2)/dtcld),0.)
1614 if (qrs(i,k,2).gt.qcrmin)
then
1615 sfac = rslope(i,k,2)*n0s*n0sfac(i,k)/qrs(i,k,2)
1616 nseml(i,k) = -sfac*pseml(i,k)
1622 if(qrs(i,k,3).gt.0.) &
1623 pgeml(i,k) = min(max(cliq*supcol*(paacw(i,k)+pgacr(i,k))/xlf &
1624 ,-qrs(i,k,3)/dtcld),0.)
1629 if (qrs(i,k,3).gt.qcrmin)
then
1630 gfac = rslope(i,k,3)*n0g/qrs(i,k,3)
1631 ngeml(i,k) = -gfac*pgeml(i,k)
1636 if(supcol.gt.0)
then
1641 if(qci(i,k,2).gt.0. .and. ifsat.ne.1)
then
1642 pidep(i,k) = 4.*diameter*xni(i,k)*(rh(i,k,2)-1.)/work1(i,k,2)
1643 supice = satdt-prevp(i,k)
1644 if(pidep(i,k).lt.0.)
then
1645 pidep(i,k) = max(max(pidep(i,k),satdt/2),supice)
1646 pidep(i,k) = max(pidep(i,k),-qci(i,k,2)/dtcld)
1648 pidep(i,k) = min(min(pidep(i,k),satdt/2),supice)
1650 if(abs(prevp(i,k)+pidep(i,k)).ge.abs(satdt)) ifsat = 1
1657 if(qrs(i,k,2).gt.0. .and. ifsat.ne.1)
then
1658 coeres = rslope2(i,k,2)*sqrt(rslope(i,k,2)*rslopeb(i,k,2))
1659 psdep(i,k) = (rh(i,k,2)-1.)*n0sfac(i,k)*(precs1*rslope2(i,k,2) &
1660 + precs2*work2(i,k)*coeres)/work1(i,k,2)
1661 supice = satdt-prevp(i,k)-pidep(i,k)
1662 if(psdep(i,k).lt.0.)
then
1663 psdep(i,k) = max(psdep(i,k),-qrs(i,k,2)/dtcld)
1664 psdep(i,k) = max(max(psdep(i,k),satdt/2),supice)
1666 psdep(i,k) = min(min(psdep(i,k),satdt/2),supice)
1668 if(abs(prevp(i,k)+pidep(i,k)+psdep(i,k)).ge.abs(satdt)) ifsat = 1
1675 if(qrs(i,k,3).gt.0. .and. ifsat.ne.1)
then
1676 coeres = rslope2(i,k,3)*sqrt(rslope(i,k,3)*rslopeb(i,k,3))
1677 pgdep(i,k) = (rh(i,k,2)-1.)*(precg1*rslope2(i,k,3) &
1678 + precg2*work2(i,k)*coeres)/work1(i,k,2)
1679 supice = satdt-prevp(i,k)-pidep(i,k)-psdep(i,k)
1680 if(pgdep(i,k).lt.0.)
then
1681 pgdep(i,k) = max(pgdep(i,k),-qrs(i,k,3)/dtcld)
1682 pgdep(i,k) = max(max(pgdep(i,k),satdt/2),supice)
1684 pgdep(i,k) = min(min(pgdep(i,k),satdt/2),supice)
1686 if(abs(prevp(i,k)+pidep(i,k)+psdep(i,k)+pgdep(i,k)).ge. &
1687 abs(satdt)) ifsat = 1
1693 if(supsat.gt.0. .and. ifsat.ne.1)
then
1694 supice = satdt-prevp(i,k)-pidep(i,k)-psdep(i,k)-pgdep(i,k)
1695 xni0 = 1.e3*exp(0.1*supcol)
1696 roqi0 = 4.92e-11*xni0**1.33
1698 pigen(i,k) = max(0.,(roqi0/den(i,k)-max(qci(i,k,2),0.))/dtcld)
1700 pigen(i,k) = min(min(pigen(i,k),satdt),supice)
1709 if(qci(i,k,2).gt.0.)
then
1710 qimax = roqimax/den(i,k)
1711 psaut(i,k) = max(0.,(qci(i,k,2)-qimax)/dtcld)
1718 if(qrs(i,k,2).gt.0.)
then
1719 alpha2 = 1.e-3*exp(0.09*(-supcol))
1720 pgaut(i,k) = min(max(0.,alpha2*(qrs(i,k,2)-qs0)),qrs(i,k,2)/dtcld)
1730 if(supcol.lt.0.)
then
1731 if(qrs(i,k,2).gt.0. .and. rh(i,k,1).lt.1.)
then
1732 coeres = rslope2(i,k,2)*sqrt(rslope(i,k,2)*rslopeb(i,k,2))
1733 psevp(i,k) = (rh(i,k,1)-1.)*n0sfac(i,k)*(precs1*rslope2(i,k,2) &
1734 +precs2*work2(i,k)*coeres)/work1(i,k,1)
1735 psevp(i,k) = min(max(psevp(i,k),-qrs(i,k,2)/dtcld),0.)
1741 if(qrs(i,k,3).gt.0. .and. rh(i,k,1).lt.1.)
then
1742 coeres = rslope2(i,k,3)*sqrt(rslope(i,k,3)*rslopeb(i,k,3))
1743 pgevp(i,k) = (rh(i,k,1)-1.)*(precg1*rslope2(i,k,3) &
1744 + precg2*work2(i,k)*coeres)/work1(i,k,1)
1745 pgevp(i,k) = min(max(pgevp(i,k),-qrs(i,k,3)/dtcld),0.)
1763 if(qrs(i,k,1).lt.1.e-4 .and. qrs(i,k,2).lt.1.e-4) delta2=1.
1764 if(qrs(i,k,1).lt.1.e-4) delta3=1.
1765 if(t(i,k).le.t0c)
then
1769 value = max(qmin,qci(i,k,1))
1770 source = (praut(i,k)+pracw(i,k)+paacw(i,k)+paacw(i,k)) &
1772 if (source.gt.
value)
then
1773 factor =
value/source
1774 praut(i,k) = praut(i,k)*factor
1775 pracw(i,k) = pracw(i,k)*factor
1776 paacw(i,k) = paacw(i,k)*factor
1781 value = max(qmin,qci(i,k,2))
1782 source = (psaut(i,k)-pigen(i,k)-pidep(i,k)+praci(i,k)+psaci(i,k) &
1784 if (source.gt.
value)
then
1785 factor =
value/source
1786 psaut(i,k) = psaut(i,k)*factor
1787 pigen(i,k) = pigen(i,k)*factor
1788 pidep(i,k) = pidep(i,k)*factor
1789 praci(i,k) = praci(i,k)*factor
1790 psaci(i,k) = psaci(i,k)*factor
1791 pgaci(i,k) = pgaci(i,k)*factor
1796 value = max(qmin,qrs(i,k,1))
1797 source = (-praut(i,k)-prevp(i,k)-pracw(i,k)+piacr(i,k) &
1798 +psacr(i,k)+pgacr(i,k))*dtcld
1799 if (source.gt.
value)
then
1800 factor =
value/source
1801 praut(i,k) = praut(i,k)*factor
1802 prevp(i,k) = prevp(i,k)*factor
1803 pracw(i,k) = pracw(i,k)*factor
1804 piacr(i,k) = piacr(i,k)*factor
1805 psacr(i,k) = psacr(i,k)*factor
1806 pgacr(i,k) = pgacr(i,k)*factor
1811 value = max(qmin,qrs(i,k,2))
1812 source = -(psdep(i,k)+psaut(i,k)-pgaut(i,k)+paacw(i,k) &
1813 +piacr(i,k)*delta3+praci(i,k)*delta3 &
1814 -pracs(i,k)*(1.-delta2)+psacr(i,k)*delta2 &
1815 +psaci(i,k)-pgacs(i,k) )*dtcld
1816 if (source.gt.
value)
then
1817 factor =
value/source
1818 psdep(i,k) = psdep(i,k)*factor
1819 psaut(i,k) = psaut(i,k)*factor
1820 pgaut(i,k) = pgaut(i,k)*factor
1821 paacw(i,k) = paacw(i,k)*factor
1822 piacr(i,k) = piacr(i,k)*factor
1823 praci(i,k) = praci(i,k)*factor
1824 psaci(i,k) = psaci(i,k)*factor
1825 pracs(i,k) = pracs(i,k)*factor
1826 psacr(i,k) = psacr(i,k)*factor
1827 pgacs(i,k) = pgacs(i,k)*factor
1832 value = max(qmin,qrs(i,k,3))
1833 source = -(pgdep(i,k)+pgaut(i,k) &
1834 +piacr(i,k)*(1.-delta3)+praci(i,k)*(1.-delta3) &
1835 +psacr(i,k)*(1.-delta2)+pracs(i,k)*(1.-delta2) &
1836 +pgaci(i,k)+paacw(i,k)+pgacr(i,k)+pgacs(i,k))*dtcld
1837 if (source.gt.
value)
then
1838 factor =
value/source
1839 pgdep(i,k) = pgdep(i,k)*factor
1840 pgaut(i,k) = pgaut(i,k)*factor
1841 piacr(i,k) = piacr(i,k)*factor
1842 praci(i,k) = praci(i,k)*factor
1843 psacr(i,k) = psacr(i,k)*factor
1844 pracs(i,k) = pracs(i,k)*factor
1845 paacw(i,k) = paacw(i,k)*factor
1846 pgaci(i,k) = pgaci(i,k)*factor
1847 pgacr(i,k) = pgacr(i,k)*factor
1848 pgacs(i,k) = pgacs(i,k)*factor
1853 value = max(ncmin,ncr(i,k,2))
1854 source = (nraut(i,k)+nccol(i,k)+nracw(i,k) &
1855 +naacw(i,k)+naacw(i,k))*dtcld
1856 if (source.gt.
value)
then
1857 factor =
value/source
1858 nraut(i,k) = nraut(i,k)*factor
1859 nccol(i,k) = nccol(i,k)*factor
1860 nracw(i,k) = nracw(i,k)*factor
1861 naacw(i,k) = naacw(i,k)*factor
1866 value = max(nrmin,ncr(i,k,3))
1867 source = (-nraut(i,k)+nrcol(i,k)+niacr(i,k)+nsacr(i,k)+ngacr(i,k) &
1869 if (source.gt.
value)
then
1870 factor =
value/source
1871 nraut(i,k) = nraut(i,k)*factor
1872 nrcol(i,k) = nrcol(i,k)*factor
1873 niacr(i,k) = niacr(i,k)*factor
1874 nsacr(i,k) = nsacr(i,k)*factor
1875 ngacr(i,k) = ngacr(i,k)*factor
1878 work2(i,k)=-(prevp(i,k)+psdep(i,k)+pgdep(i,k)+pigen(i,k)+pidep(i,k))
1881 q(i,k) = q(i,k)+work2(i,k)*dtcld
1882 qci(i,k,1) = max(qci(i,k,1)-(praut(i,k)+pracw(i,k) &
1883 +paacw(i,k)+paacw(i,k))*dtcld,0.)
1884 qrs(i,k,1) = max(qrs(i,k,1)+(praut(i,k)+pracw(i,k) &
1885 +prevp(i,k)-piacr(i,k)-pgacr(i,k) &
1886 -psacr(i,k))*dtcld,0.)
1887 qci(i,k,2) = max(qci(i,k,2)-(psaut(i,k)+praci(i,k) &
1888 +psaci(i,k)+pgaci(i,k)-pigen(i,k)-pidep(i,k)) &
1890 qrs(i,k,2) = max(qrs(i,k,2)+(psdep(i,k)+psaut(i,k)+paacw(i,k) &
1891 -pgaut(i,k)+piacr(i,k)*delta3 &
1892 +praci(i,k)*delta3+psaci(i,k)-pgacs(i,k) &
1893 -pracs(i,k)*(1.-delta2)+psacr(i,k)*delta2) &
1895 qrs(i,k,3) = max(qrs(i,k,3)+(pgdep(i,k)+pgaut(i,k) &
1896 +piacr(i,k)*(1.-delta3) &
1897 +praci(i,k)*(1.-delta3)+psacr(i,k)*(1.-delta2) &
1898 +pracs(i,k)*(1.-delta2)+pgaci(i,k)+paacw(i,k) &
1899 +pgacr(i,k)+pgacs(i,k))*dtcld,0.)
1900 ncr(i,k,2) = max(ncr(i,k,2)+(-nraut(i,k)-nccol(i,k)-nracw(i,k) &
1901 -naacw(i,k)-naacw(i,k))*dtcld,0.)
1902 ncr(i,k,3) = max(ncr(i,k,3)+(nraut(i,k)-nrcol(i,k)-niacr(i,k) &
1903 -nsacr(i,k)-ngacr(i,k))*dtcld,0.)
1905 xlwork2 = -xls*(psdep(i,k)+pgdep(i,k)+pidep(i,k)+pigen(i,k)) &
1906 -xl(i,k)*prevp(i,k)-xlf*(piacr(i,k)+paacw(i,k) &
1907 +paacw(i,k)+pgacr(i,k)+psacr(i,k))
1909 t(i,k) = t(i,k)-xlwork2/cpm(i,k)*dtcld
1914 value = max(qmin,qci(i,k,1))
1915 source= (praut(i,k)+pracw(i,k)+paacw(i,k)+paacw(i,k)) &
1917 if (source.gt.
value)
then
1918 factor =
value/source
1919 praut(i,k) = praut(i,k)*factor
1920 pracw(i,k) = pracw(i,k)*factor
1921 paacw(i,k) = paacw(i,k)*factor
1926 value = max(qmin,qrs(i,k,1))
1927 source = (-paacw(i,k)-praut(i,k)+pseml(i,k)+pgeml(i,k) &
1928 -pracw(i,k)-paacw(i,k)-prevp(i,k))*dtcld
1929 if (source.gt.
value)
then
1930 factor =
value/source
1931 praut(i,k) = praut(i,k)*factor
1932 prevp(i,k) = prevp(i,k)*factor
1933 pracw(i,k) = pracw(i,k)*factor
1934 paacw(i,k) = paacw(i,k)*factor
1935 pseml(i,k) = pseml(i,k)*factor
1936 pgeml(i,k) = pgeml(i,k)*factor
1941 value = max(qcrmin,qrs(i,k,2))
1942 source=(pgacs(i,k)-pseml(i,k)-psevp(i,k))*dtcld
1943 if (source.gt.
value)
then
1944 factor =
value/source
1945 pgacs(i,k) = pgacs(i,k)*factor
1946 psevp(i,k) = psevp(i,k)*factor
1947 pseml(i,k) = pseml(i,k)*factor
1952 value = max(qcrmin,qrs(i,k,3))
1953 source=-(pgacs(i,k)+pgevp(i,k)+pgeml(i,k))*dtcld
1954 if (source.gt.
value)
then
1955 factor =
value/source
1956 pgacs(i,k) = pgacs(i,k)*factor
1957 pgevp(i,k) = pgevp(i,k)*factor
1958 pgeml(i,k) = pgeml(i,k)*factor
1963 value = max(ncmin,ncr(i,k,2))
1964 source = (+nraut(i,k)+nccol(i,k)+nracw(i,k)+naacw(i,k) &
1966 if (source.gt.
value)
then
1967 factor =
value/source
1968 nraut(i,k) = nraut(i,k)*factor
1969 nccol(i,k) = nccol(i,k)*factor
1970 nracw(i,k) = nracw(i,k)*factor
1971 naacw(i,k) = naacw(i,k)*factor
1976 value = max(nrmin,ncr(i,k,3))
1977 source = (-nraut(i,k)+nrcol(i,k)-nseml(i,k)-ngeml(i,k) &
1979 if (source.gt.
value)
then
1980 factor =
value/source
1981 nraut(i,k) = nraut(i,k)*factor
1982 nrcol(i,k) = nrcol(i,k)*factor
1983 nseml(i,k) = nseml(i,k)*factor
1984 ngeml(i,k) = ngeml(i,k)*factor
1987 work2(i,k)=-(prevp(i,k)+psevp(i,k)+pgevp(i,k))
1989 q(i,k) = q(i,k)+work2(i,k)*dtcld
1990 qci(i,k,1) = max(qci(i,k,1)-(praut(i,k)+pracw(i,k) &
1991 +paacw(i,k)+paacw(i,k))*dtcld,0.)
1992 qrs(i,k,1) = max(qrs(i,k,1)+(praut(i,k)+pracw(i,k) &
1993 +prevp(i,k)+paacw(i,k)+paacw(i,k)-pseml(i,k) &
1994 -pgeml(i,k))*dtcld,0.)
1995 qrs(i,k,2) = max(qrs(i,k,2)+(psevp(i,k)-pgacs(i,k) &
1996 +pseml(i,k))*dtcld,0.)
1997 qrs(i,k,3) = max(qrs(i,k,3)+(pgacs(i,k)+pgevp(i,k) &
1998 +pgeml(i,k))*dtcld,0.)
1999 ncr(i,k,2) = max(ncr(i,k,2)+(-nraut(i,k)-nccol(i,k)-nracw(i,k) &
2000 -naacw(i,k)-naacw(i,k))*dtcld,0.)
2001 ncr(i,k,3) = max(ncr(i,k,3)+(nraut(i,k)-nrcol(i,k)+nseml(i,k) &
2002 +ngeml(i,k))*dtcld,0.)
2004 xlwork2 = -xl(i,k)*(prevp(i,k)+psevp(i,k)+pgevp(i,k)) &
2005 -xlf*(pseml(i,k)+pgeml(i,k))
2006 t(i,k) = t(i,k)-xlwork2/cpm(i,k)*dtcld
2026 xbi=xai+hsub/(rv*ttp)
2030 qs(i,k,1)=psat*exp(log(tr)*(xa))*exp(xb*(1.-tr))
2031 qs(i,k,1) = min(qs(i,k,1),0.99*p(i,k))
2032 qs(i,k,1) = ep2 * qs(i,k,1) / (p(i,k) - qs(i,k,1))
2033 qs(i,k,1) = max(qs(i,k,1),qmin)
2035 if(t(i,k).lt.ttp)
then
2036 qs(i,k,2)=psat*exp(log(tr)*(xai))*exp(xbi*(1.-tr))
2038 qs(i,k,2)=psat*exp(log(tr)*(xa))*exp(xb*(1.-tr))
2040 qs(i,k,2) = min(qs(i,k,2),0.99*p(i,k))
2041 qs(i,k,2) = ep2 * qs(i,k,2) / (p(i,k) - qs(i,k,2))
2042 qs(i,k,2) = max(qs(i,k,2),qmin)
2043 rh(i,k,1) = max(q(i,k) / qs(i,k,1),qmin)
2053 qrs_tmp(i,k,1) = qrs(i,k,1)
2054 qrs_tmp(i,k,2) = qrs(i,k,2)
2055 qrs_tmp(i,k,3) = qrs(i,k,3)
2056 ncr_tmp(i,k) = ncr(i,k,3)
2060 call slope_wdm6(qrs_tmp,ncr_tmp,den_tmp,denfac,t,rslope,rslopeb,rslope2, &
2061 rslope3,work1,workn,its,ite,kts,kte)
2068 avedia(i,k,2) = rslope(i,k,1)*((24.)**(.3333333))
2073 if(avedia(i,k,2).le.di82)
then
2074 ncr(i,k,2) = ncr(i,k,2)+ncr(i,k,3)
2080 qci(i,k,1) = qci(i,k,1)+qrs(i,k,1)
2095 if(rh(i,k,1).gt.1.)
then
2097 ncact(i,k) = max(0.,((ncr(i,k,1)+ncr(i,k,2)) &
2098 *min(1.,(rh(i,k,1)/satmax)**actk) - ncr(i,k,2)))/dtcld
2099 ncact(i,k) =min(ncact(i,k),max(ncr(i,k,1),0.)/dtcld)
2100 pcact(i,k) = min(4.*pi*denr*(actr*1.e-6)**3*ncact(i,k)/ &
2101 (3.*den(i,k)),max(q(i,k),0.)/dtcld)
2102 q(i,k) = max(q(i,k)-pcact(i,k)*dtcld,0.)
2103 qci(i,k,1) = max(qci(i,k,1)+pcact(i,k)*dtcld,0.)
2104 ncr(i,k,1) = max(ncr(i,k,1)-ncact(i,k)*dtcld,0.)
2105 ncr(i,k,2) = max(ncr(i,k,2)+ncact(i,k)*dtcld,0.)
2106 t(i,k) = t(i,k)+pcact(i,k)*xl(i,k)/cpm(i,k)*dtcld
2117 qs(i,k,1)=psat*exp(log(tr)*(xa))*exp(xb*(1.-tr))
2118 qs(i,k,1) = min(qs(i,k,1),0.99*p(i,k))
2119 qs(i,k,1) = ep2 * qs(i,k,1) / (p(i,k) - qs(i,k,1))
2120 qs(i,k,1) = max(qs(i,k,1),qmin)
2121 work1(i,k,1) = conden(t(i,k),q(i,k),qs(i,k,1),xl(i,k),cpm(i,k))
2122 work2(i,k) = qci(i,k,1)+work1(i,k,1)
2123 pcond(i,k) = min(max(work1(i,k,1)/dtcld,0.),max(q(i,k),0.)/dtcld)
2124 if(qci(i,k,1).gt.0. .and. work1(i,k,1).lt.0.) &
2125 pcond(i,k) = max(work1(i,k,1),-qci(i,k,1))/dtcld
2130 if(pcond(i,k).eq.-qci(i,k,1)/dtcld)
then
2132 ncr(i,k,1) = ncr(i,k,1)+ncr(i,k,2)
2137 q(i,k) = q(i,k)-pcond(i,k)*dtcld
2138 qci(i,k,1) = max(qci(i,k,1)+pcond(i,k)*dtcld,0.)
2139 t(i,k) = t(i,k)+pcond(i,k)*xl(i,k)/cpm(i,k)*dtcld
2152 if(qci(i,k,1).le.qmin) qci(i,k,1) = 0.0
2153 if(qci(i,k,2).le.qmin) qci(i,k,2) = 0.0
2154 if(qrs(i,k,1).ge.qcrmin .and. ncr(i,k,3) .ge. nrmin)
then
2155 lamdr_tmp(i,k) = exp(log(((pidnr*ncr(i,k,3)) &
2156 /(den(i,k)*qrs(i,k,1))))*((.33333333)))
2157 if(lamdr_tmp(i,k) .le. lamdarmin)
then
2158 lamdr_tmp(i,k) = lamdarmin
2159 ncr(i,k,3) = den(i,k)*qrs(i,k,1)*lamdr_tmp(i,k)**3/pidnr
2160 elseif(lamdr_tmp(i,k) .ge. lamdarmax)
then
2161 lamdr_tmp(i,k) = lamdarmax
2162 ncr(i,k,3) = den(i,k)*qrs(i,k,1)*lamdr_tmp(i,k)**3/pidnr
2165 if(qci(i,k,1).ge.qmin .and. ncr(i,k,2) .ge. ncmin )
then
2166 lamdc_tmp(i,k) = exp(log(((pidnc*ncr(i,k,2)) &
2167 /(den(i,k)*qci(i,k,1))))*((.33333333)))
2168 if(lamdc_tmp(i,k) .le. lamdacmin)
then
2169 lamdc_tmp(i,k) = lamdacmin
2170 ncr(i,k,2) = den(i,k)*qci(i,k,1)*lamdc_tmp(i,k)**3/pidnc
2171 elseif(lamdc_tmp(i,k) .ge. lamdacmax)
then
2172 lamdc_tmp(i,k) = lamdacmax
2173 ncr(i,k,2) = den(i,k)*qci(i,k,1)*lamdc_tmp(i,k)**3/pidnc