260 integer,
intent(in):: its,ite,kts,kte
261 integer,
intent(in),
optional :: microphysics_debug
262 integer,
intent(in),
optional :: diag_i_dbg
263 integer,
intent(in),
optional :: diag_j_dbg
264 integer,
intent(in),
optional :: diag_k_raw_base
266 real(kind=kind_phys),
intent(in),
dimension(its:,:):: &
270 real(kind=kind_phys),
intent(in):: &
291 real(kind=kind_phys),
intent(inout),
dimension(its:,:):: &
293 real(kind=kind_phys),
intent(inout),
dimension(its:,:):: &
300 real(kind=kind_phys),
intent(inout),
dimension(its:):: &
305 real(kind=kind_phys),
intent(inout),
dimension(its:),
optional:: &
309 real(kind=kind_phys),
intent(inout),
dimension(its:),
optional:: &
313 real(kind=kind_phys),
intent(inout),
dimension(its:,:),
optional:: &
318 character(len=*),
intent(out):: errmsg
319 integer,
intent(out):: errflg
322 real(kind=kind_phys),
dimension(its:ite,kts:kte,3):: &
333 real(kind=kind_phys),
dimension(its:ite,kts:kte):: &
340 real(kind=kind_phys),
dimension(its:ite,kts:kte):: &
343 real(kind=kind_phys),
dimension(its:ite,kts:kte):: &
375 real(kind=kind_phys),
dimension(its:ite,kts:kte):: &
387 real(kind=kind_phys),
dimension(its:ite):: &
392 real(kind=kind_phys),
dimension(its:ite):: &
395 integer,
dimension(its:ite):: &
398 logical,
dimension(its:ite):: flgcld
399 real(kind=kind_phys):: &
400 cpmcal, xlcal, diffus, &
401 viscos, xka, venfac, conden, diffac, &
402 x, y, z, a, b, c, d, e, &
403 qdt, holdrr, holdrs, holdrg, supcol, supcolt, pvt, &
404 coeres, supsat, dtcld, xmi, eacrs, satdt, &
405 qimax, diameter, xni0, roqi0, &
406 fallsum, fallsum_qsi, fallsum_qg, &
407 vt2i,vt2r,vt2s,vt2g,acrfac,egs,egi, &
408 xlwork2, factor, source,
value, &
409 xlf, pfrzdtc, pfrzdtr, supice, alpha2, delta2, delta3
410 real(kind=kind_phys):: vt2ave
411 real(kind=kind_phys):: holdc, holdci
412 integer:: i, j, k, mstepmax, &
413 iprt, latd, lond, loop, loops, ifsat, n, idim, kdim, idbg_col
414 integer :: mpdbg_level
415 integer :: i_dbg_local
416 integer :: j_dbg_local
417 integer :: k_raw_base_local
420 real(kind=kind_phys):: dldti, xb, xai, tr, xbi, xa, hvap, cvap, hsub, dldt, ttp
423 real(kind=kind_phys),
dimension(its:ite):: dvec1,tvec1
424 real(kind=kind_phys):: temp
430 cpmcal(x) = cpd*(1.-max(x,qmin))+max(x,qmin)*cpv
431 xlcal(x) = xlv0-xlv1*(x-t0c)
437 diffus(x,y) = 8.794e-5 * exp(log(x)*(1.81)) / y
438 viscos(x,y) = 1.496e-6 * (x*sqrt(x)) /(x+120.)/y
439 xka(x,y) = 1.414e3*viscos(x,y)*y
440 diffac(a,b,c,d,e) = d*a*a/(xka(c,d)*rv*c*c)+1./(e*diffus(c,b))
441 venfac(a,b,c) = exp(log((viscos(b,c)/diffus(b,a)))*((.3333333))) &
442 /sqrt(viscos(b,c))*sqrt(sqrt(den0/c))
443 conden(a,b,c,d,e) = (max(b,qmin)-c)/(1.+d*d/(rv*e)*c/(a*a))
449 if (
present(microphysics_debug)) mpdbg_level = microphysics_debug
451 if (
present(diag_i_dbg)) i_dbg_local = max(its, min(ite, diag_i_dbg))
453 if (
present(diag_j_dbg)) j_dbg_local = diag_j_dbg
455 if (
present(diag_k_raw_base)) k_raw_base_local = diag_k_raw_base
462 qc(i,k) = max(qc(i,k),0.0)
463 qr(i,k) = max(qr(i,k),0.0)
464 qi(i,k) = max(qi(i,k),0.0)
465 qs(i,k) = max(qs(i,k),0.0)
466 qg(i,k) = max(qg(i,k),0.0)
476 cpm(i,k) = cpmcal(q(i,k))
477 xl(i,k) = xlcal(t(i,k))
482 delz_tmp(i,k) = delz(i,k)
483 den_tmp(i,k) = den(i,k)
492 if(
present(snowncv) .and.
present(snow)) snowncv(i) = 0.
493 if(
present(graupelncv) .and.
present(graupel)) graupelncv(i) = 0.
503 loops = max(nint(delt/dtcldcr),1)
505 if(delt.le.dtcldcr) dtcld = delt
526 call vrec(tvec1,dvec1,ite-its+1)
528 tvec1(i) = tvec1(i)*den0
530 call vsqrt(dvec1,tvec1,ite-its+1)
532 denfac(i,k) = dvec1(i)
548 xbi=xai+hsub/(rv*ttp)
552 qsat(i,k,1)=psat*exp(log(tr)*(xa))*exp(xb*(1.-tr))
553 qsat(i,k,1) = min(qsat(i,k,1),0.99*p(i,k))
554 qsat(i,k,1) = ep2 * qsat(i,k,1) / (p(i,k) - qsat(i,k,1))
555 qsat(i,k,1) = max(qsat(i,k,1),qmin)
556 rh(i,k,1) = max(q(i,k) / qsat(i,k,1),qmin)
558 if(t(i,k).lt.ttp)
then
559 qsat(i,k,2)=psat*exp(log(tr)*(xai))*exp(xbi*(1.-tr))
561 qsat(i,k,2)=psat*exp(log(tr)*(xa))*exp(xb*(1.-tr))
563 qsat(i,k,2) = min(qsat(i,k,2),0.99*p(i,k))
564 qsat(i,k,2) = ep2 * qsat(i,k,2) / (p(i,k) - qsat(i,k,2))
565 qsat(i,k,2) = max(qsat(i,k,2),qmin)
566 rh(i,k,2) = max(q(i,k) / qsat(i,k,2),qmin)
627 temp = (den(i,k)*max(qi(i,k),qmin))
628 temp = sqrt(sqrt(temp*temp*temp))
629 xni(i,k) = min(max(5.38e7*temp,1.e3),1.e6)
643 qrs_tmp(i,k,1) = qr(i,k)
644 qrs_tmp(i,k,2) = qs(i,k)
645 qrs_tmp(i,k,3) = qg(i,k)
648 call slope_wsm6(qrs_tmp,den_tmp,denfac,t,rslope,rslopeb,rslope2,rslope3, &
649 work1,its,ite,kts,kte)
653 workr(i,k) = work1(i,k,1)
654 qsum(i,k) = max( (qs(i,k)+qg(i,k)), 1.e-15)
655 if( qsum(i,k) .gt. 1.e-15 )
then
656 worka(i,k) = (work1(i,k,2)*qs(i,k) + work1(i,k,3)*qg(i,k)) &
661 denqrs1(i,k) = den(i,k)*qr(i,k)
662 denqrs2(i,k) = den(i,k)*qs(i,k)
663 denqrs3(i,k) = den(i,k)*qg(i,k)
664 if(qr(i,k).le.0.0) workr(i,k) = 0.0
667 call nislfv_rain_plm(idim,kdim,den_tmp,denfac,t,delz_tmp,workr,denqrs1, &
669 call nislfv_rain_plm6(idim,kdim,den_tmp,denfac,t,delz_tmp,worka, &
670 denqrs2,denqrs3,delqrs2,delqrs3,dtcld,1,1)
673 qr(i,k) = max(denqrs1(i,k)/den(i,k),0.)
674 qs(i,k) = max(denqrs2(i,k)/den(i,k),0.)
675 qg(i,k) = max(denqrs3(i,k)/den(i,k),0.)
676 fall(i,k,1) = denqrs1(i,k)*workr(i,k)/delz(i,k)
677 fall(i,k,2) = denqrs2(i,k)*worka(i,k)/delz(i,k)
678 fall(i,k,3) = denqrs3(i,k)*worka(i,k)/delz(i,k)
682 fall(i,1,1) = delqrs1(i)/delz(i,1)/dtcld
683 fall(i,1,2) = delqrs2(i)/delz(i,1)/dtcld
684 fall(i,1,3) = delqrs3(i)/delz(i,1)/dtcld
692 qrs_tmp(i,k,1) = qr(i,k)
693 qrs_tmp(i,k,2) = qs(i,k)
694 qrs_tmp(i,k,3) = qg(i,k)
697 call slope_wsm6(qrs_tmp,den_tmp,denfac,t,rslope,rslopeb,rslope2,rslope3, &
698 work1,its,ite,kts,kte)
707 n0sfac(i,k) = max(min(exp(alpha*supcol),n0smax/n0s),1.)
708 if(t(i,k).gt.t0c)
then
714 work2(i,k) = venfac(p(i,k),t(i,k),den(i,k))
715 if(qs(i,k).gt.0.)
then
716 coeres = rslope2(i,k,2)*sqrt(rslope(i,k,2)*rslopeb(i,k,2))
717 psmlt(i,k) = xka(t(i,k),den(i,k))/xlf*(t0c-t(i,k))*pi/2. &
718 *n0sfac(i,k)*(precs1*rslope2(i,k,2) &
719 +precs2*work2(i,k)*coeres)/den(i,k)
720 psmlt(i,k) = min(max(psmlt(i,k)*dtcld/mstep(i), &
721 -qs(i,k)/mstep(i)),0.)
722 qs(i,k) = qs(i,k) + psmlt(i,k)
723 qr(i,k) = qr(i,k) - psmlt(i,k)
724 t(i,k) = t(i,k) + xlf/cpm(i,k)*psmlt(i,k)
730 if(qg(i,k).gt.0.)
then
731 coeres = rslope2(i,k,3)*sqrt(rslope(i,k,3)*rslopeb(i,k,3))
732 pgmlt(i,k) = xka(t(i,k),den(i,k))/xlf &
733 *(t0c-t(i,k))*(precg1*rslope2(i,k,3) &
734 +precg2*work2(i,k)*coeres)/den(i,k)
735 pgmlt(i,k) = min(max(pgmlt(i,k)*dtcld/mstep(i), &
736 -qg(i,k)/mstep(i)),0.)
737 qg(i,k) = qg(i,k) + pgmlt(i,k)
738 qr(i,k) = qr(i,k) - pgmlt(i,k)
739 t(i,k) = t(i,k) + xlf/cpm(i,k)*pgmlt(i,k)
753 if(qi(i,k).le.0.)
then
756 xmi = den(i,k)*qi(i,k)/xni(i,k)
757 diameter = max(min(dicon * sqrt(xmi),dimax), 1.e-25)
758 work1c(i,k) = 1.49e4*exp(log(diameter)*(1.31))
767 denqci(i,k) = den(i,k)*qi(i,k)
770 call nislfv_rain_plm(idim,kdim,den_tmp,denfac,t,delz_tmp,work1c,denqci, &
774 qi(i,k) = max(denqci(i,k)/den(i,k),0.)
778 fallc(i,1) = delqi(i)/delz(i,1)/dtcld
789 fallsum = fall(i,kts,1)+fall(i,kts,2)+fall(i,kts,3)+fallc(i,kts)
790 fallsum_qsi = fall(i,kts,2)+fallc(i,kts)
791 fallsum_qg = fall(i,kts,3)
792 if(fallsum.gt.0.)
then
793 rainncv(i) = fallsum*delz(i,kts)/denr*dtcld*1000. + rainncv(i)
794 rain(i) = fallsum*delz(i,kts)/denr*dtcld*1000. + rain(i)
796 if(fallsum_qsi.gt.0.)
then
797 tstepsnow(i) = fallsum_qsi*delz(i,kts)/denr*dtcld*1000. &
799 if(
present(snowncv) .and.
present(snow))
then
800 snowncv(i) = fallsum_qsi*delz(i,kts)/denr*dtcld*1000. &
802 snow(i) = fallsum_qsi*delz(i,kts)/denr*dtcld*1000. + snow(i)
805 if(fallsum_qg.gt.0.)
then
806 tstepgraup(i) = fallsum_qg*delz(i,kts)/denr*dtcld*1000. &
808 if(
present (graupelncv) .and.
present (graupel))
then
809 graupelncv(i) = fallsum_qg*delz(i,kts)/denr*dtcld*1000. &
811 graupel(i) = fallsum_qg*delz(i,kts)/denr*dtcld*1000. + graupel(i)
814 if(
present (snowncv))
then
815 if(fallsum.gt.0.)sr(i)=(snowncv(i) + graupelncv(i))/(rainncv(i)+1.e-12)
817 if(fallsum.gt.0.)sr(i)=(tstepsnow(i) + tstepgraup(i))/(rainncv(i)+1.e-12)
837 if(supcol.lt.0.) xlf = xlf0
838 if(supcol.lt.0.and.qi(i,k).gt.0.)
then
840 qc(i,k) = qc(i,k) + qi(i,k)
841 t(i,k) = t(i,k) - xlf/cpm(i,k)*qi(i,k)
848 if(supcol.gt.40..and.qc(i,k).gt.0.)
then
850 qi(i,k) = qi(i,k) + qc(i,k)
851 t(i,k) = t(i,k) + xlf/cpm(i,k)*qc(i,k)
858 if(supcol.gt.0..and.qc(i,k).gt.qmin)
then
861 supcolt=min(supcol,50.)
862 pfrzdtc = min(pfrz1*(exp(pfrz2*supcolt)-1.) &
863 * den(i,k)/denr/xncr*qc(i,k)*qc(i,k)*dtcld,qc(i,k))
865 qi(i,k) = qi(i,k) + pfrzdtc
866 t(i,k) = t(i,k) + xlf/cpm(i,k)*pfrzdtc
867 qc(i,k) = qc(i,k)-pfrzdtc
873 if(supcol.gt.0..and.qr(i,k).gt.0.)
then
877 temp = rslope3(i,k,1)
878 temp = temp*temp*rslope(i,k,1)
879 supcolt=min(supcol,50.)
880 pfrzdtr = min(20.*(pi*pi)*pfrz1*n0r*denr/den(i,k) &
881 *(exp(pfrz2*supcolt)-1.)*temp*dtcld, &
884 qg(i,k) = qg(i,k) + pfrzdtr
885 t(i,k) = t(i,k) + xlf/cpm(i,k)*pfrzdtr
886 qr(i,k) = qr(i,k)-pfrzdtr
901 qrs_tmp(i,k,1) = qr(i,k)
902 qrs_tmp(i,k,2) = qs(i,k)
903 qrs_tmp(i,k,3) = qg(i,k)
906 call slope_wsm6(qrs_tmp,den_tmp,denfac,t,rslope,rslopeb,rslope2,rslope3, &
907 work1,its,ite,kts,kte)
920 work1(i,k,1) = diffac(xl(i,k),p(i,k),t(i,k),den(i,k),qsat(i,k,1))
921 work1(i,k,2) = diffac(xls,p(i,k),t(i,k),den(i,k),qsat(i,k,2))
922 work2(i,k) = venfac(p(i,k),t(i,k),den(i,k))
936 supsat = max(q(i,k),qmin)-qsat(i,k,1)
942 if(qc(i,k).gt.qc0)
then
943 praut(i,k) = qck1*qc(i,k)**(7./3.)
944 praut(i,k) = min(praut(i,k),qc(i,k)/dtcld)
950 if(qr(i,k).gt.qcrmin.and.qc(i,k).gt.qmin)
then
951 pracw(i,k) = min(pacrr*rslope3(i,k,1)*rslopeb(i,k,1) &
952 * qc(i,k)*denfac(i,k),qc(i,k)/dtcld)
958 if(qr(i,k).gt.0.)
then
959 coeres = rslope2(i,k,1)*sqrt(rslope(i,k,1)*rslopeb(i,k,1))
960 prevp(i,k) = (rh(i,k,1)-1.)*(precr1*rslope2(i,k,1) &
961 + precr2*work2(i,k)*coeres)/work1(i,k,1)
962 if(prevp(i,k).lt.0.)
then
963 prevp(i,k) = max(prevp(i,k),-qr(i,k)/dtcld)
964 prevp(i,k) = max(prevp(i,k),satdt/2)
966 prevp(i,k) = min(prevp(i,k),satdt/2)
988 n0sfac(i,k) = max(min(exp(alpha*supcol),n0smax/n0s),1.)
989 supsat = max(q(i,k),qmin)-qsat(i,k,2)
997 temp = (den(i,k)*max(qi(i,k),qmin))
998 temp = sqrt(sqrt(temp*temp*temp))
999 xni(i,k) = min(max(5.38e7*temp,1.e3),1.e6)
1000 eacrs = exp(0.07*(-supcol))
1002 xmi = den(i,k)*qi(i,k)/xni(i,k)
1003 diameter = min(dicon * sqrt(xmi),dimax)
1004 vt2i = 1.49e4*diameter**1.31
1005 vt2r=pvtr*rslopeb(i,k,1)*denfac(i,k)
1006 vt2s=pvts*rslopeb(i,k,2)*denfac(i,k)
1007 vt2g=pvtg*rslopeb(i,k,3)*denfac(i,k)
1008 qsum(i,k) = max( (qs(i,k)+qg(i,k)), 1.e-15)
1009 if(qsum(i,k) .gt. 1.e-15)
then
1010 vt2ave=(vt2s*qs(i,k)+vt2g*qg(i,k))/(qsum(i,k))
1014 if(supcol.gt.0.and.qi(i,k).gt.qmin)
then
1015 if(qr(i,k).gt.qcrmin)
then
1024 acrfac = 2.*rslope3(i,k,1)+2.*diameter*rslope2(i,k,1) &
1025 + diameter**2*rslope(i,k,1)
1026 praci(i,k) = pi*qi(i,k)*n0r*abs(vt2r-vt2i)*acrfac/4.
1028 praci(i,k) = praci(i,k)*min(max(0.0,qr(i,k)/qi(i,k)),1.)**2
1029 praci(i,k) = min(praci(i,k),qi(i,k)/dtcld)
1034 piacr(i,k) = pi**2*avtr*n0r*denr*xni(i,k)*denfac(i,k) &
1035 * g6pbr*rslope3(i,k,1)*rslope3(i,k,1) &
1036 * rslopeb(i,k,1)/24./den(i,k)
1038 piacr(i,k) = piacr(i,k)*min(max(0.0,qi(i,k)/qr(i,k)),1.)**2
1039 piacr(i,k) = min(piacr(i,k),qr(i,k)/dtcld)
1049 if(qs(i,k).gt.qcrmin)
then
1050 acrfac = 2.*rslope3(i,k,2)+2.*diameter*rslope2(i,k,2) &
1051 + diameter**2*rslope(i,k,2)
1052 psaci(i,k) = pi*qi(i,k)*eacrs*n0s*n0sfac(i,k) &
1053 * abs(vt2ave-vt2i)*acrfac/4.
1054 psaci(i,k) = min(psaci(i,k),qi(i,k)/dtcld)
1060 if(qg(i,k).gt.qcrmin)
then
1061 egi = exp(0.07*(-supcol))
1062 acrfac = 2.*rslope3(i,k,3)+2.*diameter*rslope2(i,k,3) &
1063 + diameter**2*rslope(i,k,3)
1064 pgaci(i,k) = pi*egi*qi(i,k)*n0g*abs(vt2ave-vt2i)*acrfac/4.
1065 pgaci(i,k) = min(pgaci(i,k),qi(i,k)/dtcld)
1072 if(qs(i,k).gt.qcrmin.and.qc(i,k).gt.qmin)
then
1073 psacw(i,k) = min(pacrc*n0sfac(i,k)*rslope3(i,k,2)*rslopeb(i,k,2) &
1075 * min(max(0.0,qs(i,k)/qc(i,k)),1.)**2 &
1076 * qc(i,k)*denfac(i,k),qc(i,k)/dtcld)
1082 if(qg(i,k).gt.qcrmin.and.qc(i,k).gt.qmin)
then
1083 pgacw(i,k) = min(pacrg*rslope3(i,k,3)*rslopeb(i,k,3) &
1085 * min(max(0.0,qg(i,k)/qc(i,k)),1.)**2 &
1086 * qc(i,k)*denfac(i,k),qc(i,k)/dtcld)
1092 if(qsum(i,k) .gt. 1.e-15)
then
1093 paacw(i,k) = (qs(i,k)*psacw(i,k)+qg(i,k)*pgacw(i,k)) &
1104 if(qs(i,k).gt.qcrmin.and.qr(i,k).gt.qcrmin)
then
1105 if(supcol.gt.0)
then
1106 acrfac = 5.*rslope3(i,k,2)*rslope3(i,k,2)*rslope(i,k,1) &
1107 + 2.*rslope3(i,k,2)*rslope2(i,k,2)*rslope2(i,k,1) &
1108 + .5*rslope2(i,k,2)*rslope2(i,k,2)*rslope3(i,k,1)
1109 pracs(i,k) = pi**2*n0r*n0s*n0sfac(i,k)*abs(vt2r-vt2ave) &
1110 * (dens/den(i,k))*acrfac
1112 pracs(i,k) = pracs(i,k)*min(max(0.0,qr(i,k)/qs(i,k)),1.)**2
1113 pracs(i,k) = min(pracs(i,k),qs(i,k)/dtcld)
1119 acrfac = 5.*rslope3(i,k,1)*rslope3(i,k,1)*rslope(i,k,2) &
1120 + 2.*rslope3(i,k,1)*rslope2(i,k,1)*rslope2(i,k,2) &
1121 +.5*rslope2(i,k,1)*rslope2(i,k,1)*rslope3(i,k,2)
1122 psacr(i,k) = pi**2*n0r*n0s*n0sfac(i,k)*abs(vt2ave-vt2r) &
1123 * (denr/den(i,k))*acrfac
1125 psacr(i,k) = psacr(i,k)*min(max(0.0,qs(i,k)/qr(i,k)),1.)**2
1126 psacr(i,k) = min(psacr(i,k),qr(i,k)/dtcld)
1132 if(qg(i,k).gt.qcrmin.and.qr(i,k).gt.qcrmin)
then
1133 acrfac = 5.*rslope3(i,k,1)*rslope3(i,k,1)*rslope(i,k,3) &
1134 + 2.*rslope3(i,k,1)*rslope2(i,k,1)*rslope2(i,k,3) &
1135 + .5*rslope2(i,k,1)*rslope2(i,k,1)*rslope3(i,k,3)
1136 pgacr(i,k) = pi**2*n0r*n0g*abs(vt2ave-vt2r)*(denr/den(i,k)) &
1139 pgacr(i,k) = pgacr(i,k)*min(max(0.0,qg(i,k)/qr(i,k)),1.)**2
1140 pgacr(i,k) = min(pgacr(i,k),qr(i,k)/dtcld)
1148 if(qg(i,k).gt.qcrmin.and.qs(i,k).gt.qcrmin)
then
1151 if(supcol.le.0)
then
1162 pseml(i,k) = min(max(cliq*supcol*(paacw(i,k)+psacr(i,k)) &
1163 / xlf,-qs(i,k)/dtcld),0.)
1169 pgeml(i,k) = min(max(cliq*supcol*(paacw(i,k)+pgacr(i,k)) &
1170 / xlf,-qg(i,k)/dtcld),0.)
1172 if(supcol.gt.0)
then
1181 if(qi(i,k).gt.0.and.ifsat.ne.1)
then
1182 pidep(i,k) = 4.*diameter*xni(i,k)*(rh(i,k,2)-1.)/work1(i,k,2)
1183 supice = satdt-prevp(i,k)
1184 if(pidep(i,k).lt.0.)
then
1185 pidep(i,k) = max(max(pidep(i,k),satdt/2),supice)
1186 pidep(i,k) = max(pidep(i,k),-qi(i,k)/dtcld)
1188 pidep(i,k) = min(min(pidep(i,k),satdt/2),supice)
1190 if(abs(prevp(i,k)+pidep(i,k)).ge.abs(satdt)) ifsat = 1
1196 if(qs(i,k).gt.0..and.ifsat.ne.1)
then
1197 coeres = rslope2(i,k,2)*sqrt(rslope(i,k,2)*rslopeb(i,k,2))
1198 psdep(i,k) = (rh(i,k,2)-1.)*n0sfac(i,k)*(precs1*rslope2(i,k,2) &
1199 + precs2*work2(i,k)*coeres)/work1(i,k,2)
1200 supice = satdt-prevp(i,k)-pidep(i,k)
1201 if(psdep(i,k).lt.0.)
then
1202 psdep(i,k) = max(psdep(i,k),-qs(i,k)/dtcld)
1203 psdep(i,k) = max(max(psdep(i,k),satdt/2),supice)
1205 psdep(i,k) = min(min(psdep(i,k),satdt/2),supice)
1207 if(abs(prevp(i,k)+pidep(i,k)+psdep(i,k)).ge.abs(satdt)) &
1214 if(qg(i,k).gt.0..and.ifsat.ne.1)
then
1215 coeres = rslope2(i,k,3)*sqrt(rslope(i,k,3)*rslopeb(i,k,3))
1216 pgdep(i,k) = (rh(i,k,2)-1.)*(precg1*rslope2(i,k,3) &
1217 + precg2*work2(i,k)*coeres)/work1(i,k,2)
1218 supice = satdt-prevp(i,k)-pidep(i,k)-psdep(i,k)
1219 if(pgdep(i,k).lt.0.)
then
1220 pgdep(i,k) = max(pgdep(i,k),-qg(i,k)/dtcld)
1221 pgdep(i,k) = max(max(pgdep(i,k),satdt/2),supice)
1223 pgdep(i,k) = min(min(pgdep(i,k),satdt/2),supice)
1225 if(abs(prevp(i,k)+pidep(i,k)+psdep(i,k)+pgdep(i,k)).ge. &
1226 abs(satdt)) ifsat = 1
1232 if(supsat.gt.0.and.ifsat.ne.1)
then
1233 supice = satdt-prevp(i,k)-pidep(i,k)-psdep(i,k)-pgdep(i,k)
1234 xni0 = 1.e3*exp(0.1*supcol)
1235 roqi0 = 4.92e-11*xni0**1.33
1236 pigen(i,k) = max(0.,(roqi0/den(i,k)-max(qi(i,k),0.))/dtcld)
1237 pigen(i,k) = min(min(pigen(i,k),satdt),supice)
1248 if(qi(i,k).gt.0.)
then
1249 qimax = roqimax/den(i,k)
1250 psaut(i,k) = max(0.,(qi(i,k)-qimax)/dtcld)
1257 if(qs(i,k).gt.0.)
then
1258 alpha2 = 1.e-3*exp(0.09*(-supcol))
1259 pgaut(i,k) = min(max(0.,alpha2*(qs(i,k)-qs0)),qs(i,k)/dtcld)
1271 if(supcol.lt.0.)
then
1272 if(qs(i,k).gt.0..and.rh(i,k,1).lt.1.)
then
1273 coeres = rslope2(i,k,2)*sqrt(rslope(i,k,2)*rslopeb(i,k,2))
1274 psevp(i,k) = (rh(i,k,1)-1.)*n0sfac(i,k)*(precs1 &
1275 * rslope2(i,k,2)+precs2*work2(i,k) &
1276 * coeres)/work1(i,k,1)
1277 psevp(i,k) = min(max(psevp(i,k),-qs(i,k)/dtcld),0.)
1283 if(qg(i,k).gt.0..and.rh(i,k,1).lt.1.)
then
1284 coeres = rslope2(i,k,3)*sqrt(rslope(i,k,3)*rslopeb(i,k,3))
1285 pgevp(i,k) = (rh(i,k,1)-1.)*(precg1*rslope2(i,k,3) &
1286 + precg2*work2(i,k)*coeres)/work1(i,k,1)
1287 pgevp(i,k) = min(max(pgevp(i,k),-qg(i,k)/dtcld),0.)
1307 if(qr(i,k).lt.1.e-4.and.qs(i,k).lt.1.e-4) delta2=1.
1308 if(qr(i,k).lt.1.e-4) delta3=1.
1309 if(t(i,k).le.t0c)
then
1313 value = max(qmin,qc(i,k))
1314 source = (praut(i,k)+pracw(i,k)+paacw(i,k)+paacw(i,k))*dtcld
1315 if (source.gt.
value)
then
1316 factor =
value/source
1317 praut(i,k) = praut(i,k)*factor
1318 pracw(i,k) = pracw(i,k)*factor
1319 paacw(i,k) = paacw(i,k)*factor
1324 value = max(qmin,qi(i,k))
1325 source = (psaut(i,k)-pigen(i,k)-pidep(i,k)+praci(i,k)+psaci(i,k) &
1327 if (source.gt.
value)
then
1328 factor =
value/source
1329 psaut(i,k) = psaut(i,k)*factor
1330 pigen(i,k) = pigen(i,k)*factor
1331 pidep(i,k) = pidep(i,k)*factor
1332 praci(i,k) = praci(i,k)*factor
1333 psaci(i,k) = psaci(i,k)*factor
1334 pgaci(i,k) = pgaci(i,k)*factor
1339 value = max(qmin,qr(i,k))
1340 source = (-praut(i,k)-prevp(i,k)-pracw(i,k)+piacr(i,k)+psacr(i,k) &
1342 if (source.gt.
value)
then
1343 factor =
value/source
1344 praut(i,k) = praut(i,k)*factor
1345 prevp(i,k) = prevp(i,k)*factor
1346 pracw(i,k) = pracw(i,k)*factor
1347 piacr(i,k) = piacr(i,k)*factor
1348 psacr(i,k) = psacr(i,k)*factor
1349 pgacr(i,k) = pgacr(i,k)*factor
1354 value = max(qmin,qs(i,k))
1355 source = -(psdep(i,k)+psaut(i,k)-pgaut(i,k)+paacw(i,k)+piacr(i,k) &
1356 * delta3+praci(i,k)*delta3-pracs(i,k)*(1.-delta2) &
1357 + psacr(i,k)*delta2+psaci(i,k)-pgacs(i,k) )*dtcld
1358 if (source.gt.
value)
then
1359 factor =
value/source
1360 psdep(i,k) = psdep(i,k)*factor
1361 psaut(i,k) = psaut(i,k)*factor
1362 pgaut(i,k) = pgaut(i,k)*factor
1363 paacw(i,k) = paacw(i,k)*factor
1364 piacr(i,k) = piacr(i,k)*factor
1365 praci(i,k) = praci(i,k)*factor
1366 psaci(i,k) = psaci(i,k)*factor
1367 pracs(i,k) = pracs(i,k)*factor
1368 psacr(i,k) = psacr(i,k)*factor
1369 pgacs(i,k) = pgacs(i,k)*factor
1374 value = max(qmin,qg(i,k))
1375 source = -(pgdep(i,k)+pgaut(i,k) &
1376 + piacr(i,k)*(1.-delta3)+praci(i,k)*(1.-delta3) &
1377 + psacr(i,k)*(1.-delta2)+pracs(i,k)*(1.-delta2) &
1378 + pgaci(i,k)+paacw(i,k)+pgacr(i,k)+pgacs(i,k))*dtcld
1379 if (source.gt.
value)
then
1380 factor =
value/source
1381 pgdep(i,k) = pgdep(i,k)*factor
1382 pgaut(i,k) = pgaut(i,k)*factor
1383 piacr(i,k) = piacr(i,k)*factor
1384 praci(i,k) = praci(i,k)*factor
1385 psacr(i,k) = psacr(i,k)*factor
1386 pracs(i,k) = pracs(i,k)*factor
1387 paacw(i,k) = paacw(i,k)*factor
1388 pgaci(i,k) = pgaci(i,k)*factor
1389 pgacr(i,k) = pgacr(i,k)*factor
1390 pgacs(i,k) = pgacs(i,k)*factor
1393 work2(i,k)=-(prevp(i,k)+psdep(i,k)+pgdep(i,k)+pigen(i,k)+pidep(i,k))
1395 q(i,k) = q(i,k)+work2(i,k)*dtcld
1396 qc(i,k) = max(qc(i,k)-(praut(i,k)+pracw(i,k) &
1397 + paacw(i,k)+paacw(i,k))*dtcld,0.)
1398 qr(i,k) = max(qr(i,k)+(praut(i,k)+pracw(i,k) &
1399 + prevp(i,k)-piacr(i,k)-pgacr(i,k) &
1400 - psacr(i,k))*dtcld,0.)
1401 qi(i,k) = max(qi(i,k)-(psaut(i,k)+praci(i,k) &
1402 + psaci(i,k)+pgaci(i,k)-pigen(i,k)-pidep(i,k)) &
1404 qs(i,k) = max(qs(i,k)+(psdep(i,k)+psaut(i,k)+paacw(i,k) &
1405 - pgaut(i,k)+piacr(i,k)*delta3 &
1406 + praci(i,k)*delta3+psaci(i,k)-pgacs(i,k) &
1407 - pracs(i,k)*(1.-delta2)+psacr(i,k)*delta2) &
1409 qg(i,k) = max(qg(i,k)+(pgdep(i,k)+pgaut(i,k) &
1410 + piacr(i,k)*(1.-delta3) &
1411 + praci(i,k)*(1.-delta3)+psacr(i,k)*(1.-delta2) &
1412 + pracs(i,k)*(1.-delta2)+pgaci(i,k)+paacw(i,k) &
1413 + pgacr(i,k)+pgacs(i,k))*dtcld,0.)
1415 xlwork2 = -xls*(psdep(i,k)+pgdep(i,k)+pidep(i,k)+pigen(i,k)) &
1416 -xl(i,k)*prevp(i,k)-xlf*(piacr(i,k)+paacw(i,k) &
1417 +paacw(i,k)+pgacr(i,k)+psacr(i,k))
1418 t(i,k) = t(i,k)-xlwork2/cpm(i,k)*dtcld
1423 value = max(qmin,qc(i,k))
1424 source=(praut(i,k)+pracw(i,k)+paacw(i,k)+paacw(i,k))*dtcld
1425 if (source.gt.
value)
then
1426 factor =
value/source
1427 praut(i,k) = praut(i,k)*factor
1428 pracw(i,k) = pracw(i,k)*factor
1429 paacw(i,k) = paacw(i,k)*factor
1434 value = max(qmin,qr(i,k))
1435 source = (-paacw(i,k)-praut(i,k)+pseml(i,k)+pgeml(i,k)-pracw(i,k) &
1436 -paacw(i,k)-prevp(i,k))*dtcld
1437 if (source.gt.
value)
then
1438 factor =
value/source
1439 praut(i,k) = praut(i,k)*factor
1440 prevp(i,k) = prevp(i,k)*factor
1441 pracw(i,k) = pracw(i,k)*factor
1442 paacw(i,k) = paacw(i,k)*factor
1443 pseml(i,k) = pseml(i,k)*factor
1444 pgeml(i,k) = pgeml(i,k)*factor
1449 value = max(qcrmin,qs(i,k))
1450 source=(pgacs(i,k)-pseml(i,k)-psevp(i,k))*dtcld
1451 if (source.gt.
value)
then
1452 factor =
value/source
1453 pgacs(i,k) = pgacs(i,k)*factor
1454 psevp(i,k) = psevp(i,k)*factor
1455 pseml(i,k) = pseml(i,k)*factor
1460 value = max(qcrmin,qg(i,k))
1461 source=-(pgacs(i,k)+pgevp(i,k)+pgeml(i,k))*dtcld
1462 if (source.gt.
value)
then
1463 factor =
value/source
1464 pgacs(i,k) = pgacs(i,k)*factor
1465 pgevp(i,k) = pgevp(i,k)*factor
1466 pgeml(i,k) = pgeml(i,k)*factor
1469 work2(i,k)=-(prevp(i,k)+psevp(i,k)+pgevp(i,k))
1471 q(i,k) = q(i,k)+work2(i,k)*dtcld
1472 qc(i,k) = max(qc(i,k)-(praut(i,k)+pracw(i,k) &
1473 + paacw(i,k)+paacw(i,k))*dtcld,0.)
1474 qr(i,k) = max(qr(i,k)+(praut(i,k)+pracw(i,k) &
1475 + prevp(i,k)+paacw(i,k)+paacw(i,k)-pseml(i,k) &
1476 - pgeml(i,k))*dtcld,0.)
1477 qs(i,k) = max(qs(i,k)+(psevp(i,k)-pgacs(i,k) &
1478 + pseml(i,k))*dtcld,0.)
1479 qg(i,k) = max(qg(i,k)+(pgacs(i,k)+pgevp(i,k) &
1480 + pgeml(i,k))*dtcld,0.)
1482 xlwork2 = -xl(i,k)*(prevp(i,k)+psevp(i,k)+pgevp(i,k)) &
1483 -xlf*(pseml(i,k)+pgeml(i,k))
1484 t(i,k) = t(i,k)-xlwork2/cpm(i,k)*dtcld
1505 xbi=xai+hsub/(rv*ttp)
1509 qsat(i,k,1)=psat*exp(log(tr)*(xa))*exp(xb*(1.-tr))
1510 qsat(i,k,1) = min(qsat(i,k,1),0.99*p(i,k))
1511 qsat(i,k,1) = ep2 * qsat(i,k,1) / (p(i,k) - qsat(i,k,1))
1512 qsat(i,k,1) = max(qsat(i,k,1),qmin)
1514 if(t(i,k).lt.ttp)
then
1515 qsat(i,k,2)=psat*exp(log(tr)*(xai))*exp(xbi*(1.-tr))
1517 qsat(i,k,2)=psat*exp(log(tr)*(xa))*exp(xb*(1.-tr))
1519 qsat(i,k,2) = min(qsat(i,k,2),0.99*p(i,k))
1520 qsat(i,k,2) = ep2 * qsat(i,k,2) / (p(i,k) - qsat(i,k,2))
1521 qsat(i,k,2) = max(qsat(i,k,2),qmin)
1536 work1(i,k,1) = conden(t(i,k),q(i,k),qsat(i,k,1),xl(i,k),cpm(i,k))
1537 work2(i,k) = qc(i,k)+work1(i,k,1)
1538 pcond(i,k) = min(max(work1(i,k,1)/dtcld,0.),max(q(i,k),0.)/dtcld)
1539 if(qc(i,k).gt.0..and.work1(i,k,1).lt.0.) &
1540 pcond(i,k) = max(work1(i,k,1),-qc(i,k))/dtcld
1541 q(i,k) = q(i,k)-pcond(i,k)*dtcld
1542 qc(i,k) = max(qc(i,k)+pcond(i,k)*dtcld,0.)
1543 t(i,k) = t(i,k)+pcond(i,k)*xl(i,k)/cpm(i,k)*dtcld
1557 if(qc(i,k).le.qmin) qc(i,k) = 0.0
1558 if(qi(i,k).le.qmin) qi(i,k) = 0.0
1563 if(
present(rainprod2d) .and.
present(evapprod2d))
then
1566 rainprod2d(i,k) = praut(i,k)+pracw(i,k)+praci(i,k)+psaci(i,k)+pgaci(i,k) &
1567 + psacw(i,k)+pgacw(i,k)+paacw(i,k)+psaut(i,k)
1568 evapprod2d(i,k) = -(prevp(i,k)+psevp(i,k)+pgevp(i,k)+psdep(i,k)+pgdep(i,k))
1577 errmsg =
'mp_wsm6_run OK'