89       subroutine moninedmf(ix,im,km,ntrac,ntcw,dv,du,tau,rtg,           &
 
   90      &   u1,v1,t1,q1,swh,hlw,xmu,                                       &
 
   91      &   psk,rbsoil,zorl,u10m,v10m,fm,fh,                               &
 
   92      &   tsea,qss,heat,evap,stress,spd1,kpbl,                           &
 
   93      &   prsi,del,prsl,prslk,phii,phil,delt,dspheat,                    &
 
   94      &   dusfc,dvsfc,dtsfc,dqsfc,hpbl,hgamt,hgamq,dkt,                  &
 
   95      &   kinver,xkzm_m,xkzm_h,xkzm_s,lprnt,ipr)
 
   97       use machine  
, only : kind_phys
 
   98       use funcphys 
, only : fpvs
 
  100      &,             hvap => 
con_hvap, fv => con_fvirt
 
  107       integer ix, im, km, ntrac, ntcw, kpbl(im), kinver(im)
 
  109       real(kind=kind_phys) delt, xkzm_m, xkzm_h, xkzm_s
 
  110       real(kind=kind_phys) dv(im,km),     du(im,km),                    &
 
  111      &                     tau(im,km),    rtg(im,km,ntrac),             &
 
  112      &                     u1(ix,km),     v1(ix,km),                    &
 
  113      &                     t1(ix,km),     q1(ix,km,ntrac),              &
 
  114      &                     swh(ix,km),    hlw(ix,km),                   &
 
  115      &                     xmu(im),       psk(im),                      &
 
  116      &                     rbsoil(im),    zorl(im),                     &
 
  117      &                     u10m(im),      v10m(im),                     &
 
  119      &                     tsea(im),      qss(im),                      &
 
  121      &                     prsi(ix,km+1), del(ix,km),                   &
 
  122      &                     prsl(ix,km),   prslk(ix,km),                 &
 
  123      &                     phii(ix,km+1), phil(ix,km),                  &
 
  124      &                     dusfc(im),     dvsfc(im),                    &
 
  125      &                     dtsfc(im),     dqsfc(im),                    &
 
  126      &                     hpbl(im),      hpblx(im),                    &
 
  127      &                     hgamt(im),     hgamq(im)
 
  134       integer i,iprt,is,iun,k,kk,km1,kmpbl,latd,lond
 
  135       integer lcld(im),icld(im),kcld(im),krad(im)
 
  136       integer kx1(im), kpblx(im)
 
  139       real(kind=kind_phys) evap(im),  heat(im),    phih(im),            &
 
  140      &                     phim(im),  rbdn(im),    rbup(im),            &
 
  141      &                     stress(im),beta(im),    sflux(im),           &
 
  142      &                     z0(im),    crb(im),     wstar(im),           &
 
  143      &                     zol(im),   ustmin(im),  ustar(im),           &
 
  144      &                     thermal(im),wscale(im), wscaleu(im)
 
  146       real(kind=kind_phys) theta(im,km),thvx(im,km),  thlvx(im,km),     &
 
  147      &                     qlx(im,km),  thetae(im,km),                  &
 
  148      &                     qtx(im,km),  bf(im,km-1),  diss(im,km),      &
 
  150      &                     govrth(im),  hrad(im),                       &
 
  152      &                     radmin(im),  vrad(im),                       &
 
  153      &                     zd(im),      zdd(im),      thlvx1(im) 
 
  155       real(kind=kind_phys) rdzt(im,km-1),dktx(im,km-1),                 &
 
  156      &                     zi(im,km+1),  zl(im,km),    xkzo(im,km-1),   &
 
  157      &                     dku(im,km-1), dkt(im,km-1), xkzmo(im,km-1),  &
 
  158      &                     cku(im,km-1), ckt(im,km-1),                  &
 
  159      &                     ti(im,km-1),  shr2(im,km-1),                 &
 
  160      &                     al(im,km-1),  ad(im,km),                     &
 
  161      &                     au(im,km-1),  a1(im,km),                     &
 
  164       real(kind=kind_phys) tcko(im,km),  qcko(im,km,ntrac),             &
 
  165      &                     ucko(im,km),  vcko(im,km),  xmf(im,km)
 
  167       real(kind=kind_phys) prinv(im), rent(im)
 
  169       logical  pblflg(im), sfcflg(im), scuflg(im), flg(im)
 
  170       logical  ublflg(im), pcnvflg(im)
 
  175       real(kind=kind_phys) aphi16,  aphi5,  bvf2,   wfac,
 
  176      &                     cfac,    conq,   cont,   conw,
 
  178      &                     dq1,     dsdz2,  dsdzq,  dsdzt,
 
  180      &                     dsig,    dt2,    dthe1,  dtodsd,
 
  181      &                     dtodsu,  dw2,    dw2min, g,
 
  182      &                     gamcrq,  gamcrt, gocp,
 
  184      &                     prnum,   prmax,  prmin,  pfac,  crbcon,
 
  185      &                     qmin,    tdzmin, qtend,  crbmin,crbmax,
 
  186      &                     rbint,   rdt,    rdz,    qlmin,
 
  187      &                     ri,      rimin,  rl2,    rlam,  rlamun,
 
  188      &                     rone,    rzero,  sfcfrac,
 
  189      &                     spdk2,   sri,    zol1,   zolcr, zolcru,
 
  193      &                     vtend,   zfac,   vpert,  cteit,
 
  194      &                     rentf1,  rentf2, radfac,
 
  195      &                     zfmin,   zk,     tem,    tem1,  tem2,
 
  196      &                     xkzm,    xkzmu,  xkzminv,
 
  197      &                     ptem,    ptem1,  ptem2, tx1(im), tx2(im)
 
  199       real(kind=kind_phys) zstblmax,h1,     h2,     qlcr,  actei,
 
  202       parameter(gravi=1.0/grav)
 
  205       parameter(cont=cp/g,conq=hvap/g,conw=1.0/g)               
 
  207       parameter(rlam=30.0,vk=0.4,vk2=vk*vk)
 
  208       parameter(prmin=0.25,prmax=4.,zolcr=0.2,zolcru=-0.5)
 
  209       parameter(dw2min=0.0001,dkmin=0.0,dkmax=1000.,rimin=-100.)
 
  210       parameter(crbcon=0.25,crbmin=0.15,crbmax=0.35)
 
  211       parameter(wfac=7.0,cfac=6.5,pfac=2.0,sfcfrac=0.1)
 
  213       parameter(qmin=1.e-8,         zfmin=1.e-8,aphi5=5.,aphi16=16.)
 
  214       parameter(tdzmin=1.e-3,qlmin=1.e-12,f0=1.e-4)
 
  215       parameter(h1=0.33333333,h2=0.66666667)
 
  216       parameter(cldtime=500.,xkzminv=0.3)
 
  219       parameter(gamcrt=3.,gamcrq=0.,rlamun=150.0)
 
  220       parameter(rentf1=0.2,rentf2=1.0,radfac=0.85)
 
  227       parameter(zstblmax = 2500., qlcr=3.5e-5)
 
  229       parameter(actei = 0.7)
 
  231 c-----------------------------------------------------------------------
 
  233  601  
format(1x,
' moninp lat lon step hour ',3i6,f6.1)
 
  234  602      
format(1x,
'    k',
'        z',
'        t',
'       th',
 
  235      1     
'      tvh',
'        q',
'        u',
'        v',
 
  237  603      
format(1x,i5,8f9.1)
 
  238  604      
format(1x,
'  sfc',9x,f9.1,18x,f9.1)
 
  239  605      
format(1x,
'    k      zl    spd2   thekv   the1v' 
  241  606      
format(1x,i5,6f8.2)
 
  242  607      
format(1x,
' kpbl    hpbl      fm      fh   hgamt',
 
  243      1         
'   hgamq      ws   ustar      cd      ch')
 
  244  608      
format(1x,i5,9f8.2)
 
  245  609      
format(1x,
' k pr dkt dku ',i5,3f8.2)
 
  246  610      
format(1x,
' k pr dkt dku ',i5,3f8.2,
' l2 ri t2',
 
  247      1         
' sr2  ',2f8.2,2e10.2)
 
  271           zi(i,k) = phii(i,k) * gravi
 
  272           zl(i,k) = phil(i,k) * gravi
 
  276          zi(i,km+1) = phii(i,km+1) * gravi
 
  281           rdzt(i,k) = 1.0 / (zl(i,k+1) - zl(i,k))
 
  287         tx1(i) = 1.0 / prsi(i,1)
 
  295           if (k < kinver(i)) 
then 
  297             ptem      = prsi(i,k+1) * tx1(i)
 
  299             tem1      = tem1 * tem1 * 10.0
 
  300             xkzo(i,k) = xkzm_h * min(1.0, exp(-tem1))
 
  303             if (ptem >= xkzm_s) 
then 
  307               if (k == kx1(i) .and. k > 1) tx2(i) = 1.0 / prsi(i,k)
 
  308               tem1 = 1.0 - prsi(i,k+1) * tx2(i)
 
  309               tem1 = tem1 * tem1 * 5.0
 
  310               xkzmo(i,k) = xkzm_m * min(1.0, exp(-tem1))
 
  325           if(zi(i,k+1) > 250.) 
then 
  326             tem1 = (t1(i,k+1)-t1(i,k)) * rdzt(i,k)
 
  327             if(tem1 > 1.e-5) 
then 
  328                xkzo(i,k)  = min(xkzo(i,k),xkzminv)
 
  335          z0(i)    = 0.01 * zorl(i)
 
  347          if(rbsoil(i) > 0.) sfcflg(i) = .false.
 
  366           theta(i,k) = t1(i,k) * psk(i) / prslk(i,k)
 
  367           qlx(i,k)   = max(q1(i,k,ntcw),qlmin)
 
  368           qtx(i,k)   = max(q1(i,k,1),qmin)+qlx(i,k)
 
  370           ptem1      = hvap*max(q1(i,k,1),qmin)/(cp*t1(i,k))
 
  371           thetae(i,k)= theta(i,k)*(1.+ptem1)
 
  372           thvx(i,k)  = theta(i,k)*(1.+fv*max(q1(i,k,1),qmin)-ptem)
 
  373           ptem2      = theta(i,k)-(hvap/cp)*ptem
 
  374           thlvx(i,k) = ptem2*(1.+fv*qtx(i,k))
 
  385           tem       = zi(i,k+1)-zi(i,k)
 
  386           radx(i,k) = tem*(swh(i,k)*xmu(i)+hlw(i,k))
 
  395           if(flg(i).and.zl(i,k) >= zstblmax) 
then 
  407          bf(i,k) = (thvx(i,k+1)-thvx(i,k))*rdz
 
  408          ti(i,k) = 2./(t1(i,k)+t1(i,k+1))
 
  409          dw2  = (u1(i,k)-u1(i,k+1))**2
 
  410      &        + (v1(i,k)-v1(i,k+1))**2
 
  411          shr2(i,k) = max(dw2,dw2min)*rdz*rdz
 
  416         govrth(i) = g/theta(i,1)
 
  420          beta(i)  = dt2 / (zi(i,2)-zi(i,1))
 
  424          ustar(i) = sqrt(stress(i))
 
  428          sflux(i)  = heat(i) + evap(i)*fv*theta(i,1)
 
  429          if(.not.sfcflg(i) .or. sflux(i) <= 0.) pblflg(i)=.false.
 
  442            thermal(i) = thvx(i,1)
 
  445            thermal(i) = tsea(i)*(1.+fv*max(q1(i,1,1),qmin))
 
  446            tem = sqrt(u10m(i)**2+v10m(i)**2)
 
  448            robn = tem / (f0 * z0(i))
 
  450            crb(i) = 0.16 * (tem1 ** (-0.18))
 
  451            crb(i) = max(min(crb(i), crbmax), crbmin)
 
  466           spdk2   = max((u1(i,k)**2+v1(i,k)**2),1.)
 
  467           rbup(i) = (thvx(i,k)-thermal(i))*
 
  468      &              (g*zl(i,k)/thvx(i,1))/spdk2
 
  470           flg(i)  = rbup(i) > crb(i)
 
  478           if(rbdn(i) >= crb(i)) 
then 
  480           elseif(rbup(i) <= crb(i)) 
then 
  483             rbint = (crb(i)-rbdn(i))/(rbup(i)-rbdn(i))
 
  485           hpbl(i) = zl(i,k-1) + rbint*(zl(i,k)-zl(i,k-1))
 
  486           if(hpbl(i) < zi(i,kpbl(i))) kpbl(i) = kpbl(i) - 1
 
  512          zol(i) = max(rbsoil(i)*fm(i)*fm(i)/fh(i),rimin)
 
  514            zol(i) = min(zol(i),-zfmin)
 
  516            zol(i) = max(zol(i),zfmin)
 
  518          zol1 = zol(i)*sfcfrac*hpbl(i)/zl(i,1)
 
  522            tem     = 1.0 / (1. - aphi16*zol1)
 
  524            phim(i) = sqrt(phih(i))
 
  526            phim(i) = 1. + aphi5*zol1
 
  529          wscale(i) = ustar(i)/phim(i)
 
  530          ustmin(i) = ustar(i)/aphi5
 
  531          wscale(i) = max(wscale(i),ustmin(i))
 
  535           if(zol(i) < zolcru .and. kpbl(i) > 1) 
then 
  540           wst3 = govrth(i)*sflux(i)*hpbl(i)
 
  543           wscaleu(i) = (ust3+wfac*vk*wst3*sfcfrac)**h1
 
  544           wscaleu(i) = max(wscaleu(i),ustmin(i))
 
  553            hgamt(i)  = min(cfac*heat(i)/wscaleu(i),gamcrt)
 
  554            hgamq(i)  = min(cfac*evap(i)/wscaleu(i),gamcrq)
 
  555            vpert     = hgamt(i) + hgamq(i)*fv*theta(i,1)
 
  556            vpert     = min(vpert,gamcrt)
 
  557            thermal(i)= thermal(i)+max(vpert,0.)
 
  558            hgamt(i)  = max(hgamt(i),0.0)
 
  559            hgamq(i)  = max(hgamq(i),0.0)
 
  576           spdk2   = max((u1(i,k)**2+v1(i,k)**2),1.)
 
  577           rbup(i) = (thvx(i,k)-thermal(i))*
 
  578      &              (g*zl(i,k)/thvx(i,1))/spdk2
 
  580           flg(i)  = rbup(i) > crb(i)
 
  587            if(rbdn(i) >= crb(i)) 
then 
  589            elseif(rbup(i) <= crb(i)) 
then 
  592               rbint = (crb(i)-rbdn(i))/(rbup(i)-rbdn(i))
 
  594            hpbl(i) = zl(i,k-1) + rbint*(zl(i,k)-zl(i,k-1))
 
  595            if(hpbl(i) < zi(i,kpbl(i))) kpbl(i) = kpbl(i) - 1
 
  596            if(kpbl(i) <= 1) 
then 
  611         if(flg(i) .and. k <= lcld(i)) 
then 
  612           if(qlx(i,k).ge.qlcr) 
then 
  620         if(scuflg(i) .and. kcld(i)==km1) scuflg(i)=.false.
 
  628         if(flg(i) .and. k <= kcld(i)) 
then 
  629           if(qlx(i,k) >= qlcr) 
then 
  630             if(radx(i,k) < radmin(i)) 
then 
  641         if(scuflg(i) .and. krad(i) <= 1) scuflg(i)=.false.
 
  642         if(scuflg(i) .and. radmin(i)>=0.) scuflg(i)=.false.
 
  650         if(flg(i) .and. k <= krad(i)) 
then 
  651           if(qlx(i,k) >= qlcr) 
then 
  660         if(scuflg(i) .and. icld(i) < 1) scuflg(i)=.false.
 
  665            hrad(i) = zi(i,krad(i)+1)
 
  671         if(scuflg(i) .and. hrad(i)<zi(i,2)) scuflg(i)=.false.
 
  677           tem  = zi(i,k+1)-zi(i,k)
 
  678           tem1 = cldtime*radmin(i)/tem
 
  679           thlvx1(i) = thlvx(i,k)+tem1
 
  689         if(flg(i) .and. k <= krad(i))
then 
  690           if(thlvx1(i) <= thlvx(i,k))
then 
  691              tem=zi(i,k+1)-zi(i,k)
 
  702           kk = max(1, krad(i)+1-icld(i))
 
  703           zdd(i) = hrad(i)-zi(i,kk)
 
  709           zd(i) = max(zd(i),zdd(i))
 
  710           zd(i) = min(zd(i),hrad(i))
 
  711           tem   = govrth(i)*zd(i)*(-radmin(i))
 
  721           tem = phih(i)/phim(i)+cfac*vk*sfcfrac
 
  723           tem = phih(i)/phim(i)
 
  726         prinv(i) = min(prinv(i),prmax)
 
  727         prinv(i) = max(prinv(i),prmin)
 
  730         if(zol(i) > zolcr) 
then 
  743             zfac = max((1.-zi(i,k+1)/hpbl(i)), zfmin)
 
  744             tem = zi(i,k+1) * (zfac**pfac)
 
  746               tem1 = vk * wscaleu(i) * tem
 
  750               dkt(i,k) = tem1 * prinv(i)
 
  752               tem1 = vk * wscale(i) * tem
 
  756               dkt(i,k) = tem1 * prinv(i)
 
  758             dku(i,k) = min(dku(i,k),dkmax)
 
  759             dku(i,k) = max(dku(i,k),xkzmo(i,k))
 
  760             dkt(i,k) = min(dkt(i,k),dkmax)
 
  761             dkt(i,k) = max(dkt(i,k),xkzo(i,k))
 
  804             if(k >= kpbl(i)) 
then 
  805                bvf2 = g*bf(i,k)*ti(i,k)
 
  806                ri   = max(bvf2/shr2(i,k),rimin)
 
  809                   rl2      = zk*rlamun/(rlamun+zk)
 
  810                   dk       = rl2*rl2*sqrt(shr2(i,k))
 
  814                   dku(i,k) = dk*(1+8.*(-ri)/(1+1.746*sri))
 
  815                   dkt(i,k) = dk*(1+8.*(-ri)/(1+1.286*sri))
 
  817                   rl2      = zk*rlam/(rlam+zk)
 
  820                   dk       = rl2*rl2*sqrt(shr2(i,k))
 
  821                   tem1     = dk/(1+5.*ri)**2
 
  823                   if(k >= kpblx(i)) 
then 
  825                     prnum = min(prnum,prmax)
 
  831                   dku(i,k) = tem1 * prnum
 
  835                dku(i,k) = min(dku(i,k),dkmax)
 
  836                dku(i,k) = max(dku(i,k),xkzmo(i,k))
 
  837                dkt(i,k) = min(dkt(i,k),dkmax)
 
  838                dkt(i,k) = max(dkt(i,k),xkzo(i,k))
 
  863             qcko(i,k,kk) = q1(i,k,kk)
 
  869       call mfpbl(im,ix,km,ntrac,dt2,pcnvflg,
 
  870      &       zl,zi,thvx,q1,t1,u1,v1,hpbl,kpbl,
 
  871      &       sflux,ustar,wstar,xmf,tcko,qcko,ucko,vcko)
 
  891            tem = thetae(i,k) - thetae(i,k+1)
 
  892            tem1 = qtx(i,k) - qtx(i,k+1)
 
  893            if (tem > 0. .and. tem1 > 0.) 
then 
  894              cteit= cp*tem/(hvap*tem1)
 
  895              if(cteit > actei) rent(i) = rentf2
 
  902            tem1  = max(bf(i,k),tdzmin)
 
  903            ckt(i,k) = -rent(i)*radmin(i)/tem1
 
  910             if(scuflg(i) .and. k < krad(i)) 
then 
  915                   if(ptem.ge.1.) ptem= 1.
 
  916                   ptem= tem2*ptem*sqrt(1.-ptem)
 
  917                   ckt(i,k) = radfac*vk*vrad(i)*ptem
 
  918                   cku(i,k) = 0.75*ckt(i,k)
 
  919                   ckt(i,k) = max(ckt(i,k),dkmin)
 
  920                   ckt(i,k) = min(ckt(i,k),dkmax)
 
  921                   cku(i,k) = max(cku(i,k),dkmin)
 
  922                   cku(i,k) = min(cku(i,k),dkmax)
 
  934              dkt(i,k) = dkt(i,k)+ckt(i,k)
 
  935              dku(i,k) = dku(i,k)+cku(i,k)
 
  936              dkt(i,k) = min(dkt(i,k),dkmax)
 
  937              dku(i,k) = min(dku(i,k),dkmax)
 
  948          a1(i,1) = t1(i,1)   + beta(i) * heat(i)
 
  949          a2(i,1) = q1(i,1,1) + beta(i) * evap(i)
 
  956             a2(i,1+is) = q1(i,1,k)
 
  963           dtodsd = dt2/del(i,k)
 
  964           dtodsu = dt2/del(i,k+1)
 
  965           dsig   = prsl(i,k)-prsl(i,k+1)
 
  967           tem1   = dsig * dkt(i,k) * rdz
 
  969           au(i,k)   = -dtodsd*dsdz2
 
  970           al(i,k)   = -dtodsu*dsdz2
 
  972           if(pcnvflg(i) .and. k < kpbl(i)) 
then 
  974              ptem      = 0.5 * tem2 * xmf(i,k)
 
  975              ptem1     = dtodsd * ptem
 
  976              ptem2     = dtodsu * ptem
 
  977              ad(i,k)   = ad(i,k)-au(i,k)-ptem1
 
  978              ad(i,k+1) = 1.-al(i,k)+ptem2
 
  979              au(i,k)   = au(i,k)-ptem1
 
  980              al(i,k)   = al(i,k)+ptem2
 
  981              ptem      = tcko(i,k) + tcko(i,k+1)
 
  983              a1(i,k)   = a1(i,k)+dtodsd*dsdzt-ptem1*ptem
 
  984              a1(i,k+1) = t1(i,k+1)-dtodsu*dsdzt+ptem2*ptem
 
  985              ptem      = qcko(i,k,1) + qcko(i,k+1,1)
 
  986              a2(i,k)   = a2(i,k) - ptem1 * ptem
 
  987              a2(i,k+1) = q1(i,k+1,1) + ptem2 * ptem
 
  988           elseif(ublflg(i) .and. k < kpbl(i)) 
then 
  989              ptem1 = dsig * dktx(i,k) * rdz
 
  991              dsdzt = tem1 * gocp - ptem1 * hgamt(i) * tem
 
  992              dsdzq = - ptem1 * hgamq(i) * tem
 
  993              ad(i,k)   = ad(i,k)-au(i,k)
 
  994              ad(i,k+1) = 1.-al(i,k)
 
  995              a1(i,k)   = a1(i,k)+dtodsd*dsdzt
 
  996              a1(i,k+1) = t1(i,k+1)-dtodsu*dsdzt
 
  997              a2(i,k)   = a2(i,k)+dtodsd*dsdzq
 
  998              a2(i,k+1) = q1(i,k+1,1)-dtodsu*dsdzq
 
 1000              ad(i,k)   = ad(i,k)-au(i,k)
 
 1001              ad(i,k+1) = 1.-al(i,k)
 
 1003              a1(i,k)   = a1(i,k)+dtodsd*dsdzt
 
 1004              a1(i,k+1) = t1(i,k+1)-dtodsu*dsdzt
 
 1005              a2(i,k+1) = q1(i,k+1,1)
 
 1016               if(pcnvflg(i) .and. k < kpbl(i)) 
then 
 1017                 dtodsd = dt2/del(i,k)
 
 1018                 dtodsu = dt2/del(i,k+1)
 
 1019                 dsig  = prsl(i,k)-prsl(i,k+1)
 
 1020                 tem   = dsig * rdzt(i,k)
 
 1021                 ptem  = 0.5 * tem * xmf(i,k)
 
 1022                 ptem1 = dtodsd * ptem
 
 1023                 ptem2 = dtodsu * ptem
 
 1024                 tem1  = qcko(i,k,kk) + qcko(i,k+1,kk)
 
 1025                 a2(i,k+is) = a2(i,k+is) - ptem1*tem1
 
 1026                 a2(i,k+1+is)= q1(i,k+1,kk) + ptem2*tem1
 
 1028                 a2(i,k+1+is) = q1(i,k+1,kk)
 
 1038       call tridin(im,km,ntrac,al,ad,au,a1,a2,au,a1,a2)
 
 1046             ttend      = (a1(i,k)-t1(i,k)) * rdt
 
 1047             qtend      = (a2(i,k)-q1(i,k,1))*rdt
 
 1048             tau(i,k)   = tau(i,k)+ttend
 
 1049             rtg(i,k,1) = rtg(i,k,1)+qtend
 
 1050             dtsfc(i)   = dtsfc(i)+cont*del(i,k)*ttend
 
 1051             dqsfc(i)   = dqsfc(i)+conq*del(i,k)*qtend
 
 1059               qtend = (a2(i,k+is)-q1(i,k,kk))*rdt
 
 1060               rtg(i,k,kk) = rtg(i,k,kk)+qtend
 
 1074           diss(i,k) = dku(i,k)*shr2(i,k)-g*ti(i,k)*dkt(i,k)*bf(i,k)
 
 1083          tem   = govrth(i)*sflux(i)
 
 1084          tem1  = tem + stress(i)*spd1(i)/zl(i,1)
 
 1085          tem2  = 0.5 * (tem1+diss(i,1))
 
 1086          tem2  = max(tem2, 0.)
 
 1088          tau(i,1) = tau(i,1)+0.5*ttend
 
 1095           tem = 0.5 * (diss(i,k-1)+diss(i,k))
 
 1098           tau(i,k) = tau(i,k) + 0.5*ttend
 
 1109          ad(i,1) = 1.0 + beta(i) * stress(i) / spd1(i)
 
 1116           dtodsd  = dt2/del(i,k)
 
 1117           dtodsu  = dt2/del(i,k+1)
 
 1118           dsig    = prsl(i,k)-prsl(i,k+1)
 
 1120           tem1    = dsig*dku(i,k)*rdz
 
 1122           au(i,k) = -dtodsd*dsdz2
 
 1123           al(i,k) = -dtodsu*dsdz2
 
 1125           if(pcnvflg(i) .and. k < kpbl(i)) 
then 
 1127              ptem      = 0.5 * tem2 * xmf(i,k)
 
 1128              ptem1     = dtodsd * ptem
 
 1129              ptem2     = dtodsu * ptem
 
 1130              ad(i,k)   = ad(i,k)-au(i,k)-ptem1
 
 1131              ad(i,k+1) = 1.-al(i,k)+ptem2
 
 1132              au(i,k)   = au(i,k)-ptem1
 
 1133              al(i,k)   = al(i,k)+ptem2
 
 1134              ptem      = ucko(i,k) + ucko(i,k+1)
 
 1135              a1(i,k)   = a1(i,k) - ptem1 * ptem
 
 1136              a1(i,k+1) = u1(i,k+1) + ptem2 * ptem
 
 1137              ptem      = vcko(i,k) + vcko(i,k+1)
 
 1138              a2(i,k)   = a2(i,k) - ptem1 * ptem
 
 1139              a2(i,k+1) = v1(i,k+1) + ptem2 * ptem
 
 1141              ad(i,k)   = ad(i,k)-au(i,k)
 
 1142              ad(i,k+1) = 1.-al(i,k)
 
 1143              a1(i,k+1) = u1(i,k+1)
 
 1144              a2(i,k+1) = v1(i,k+1)
 
 1152       call tridi2(im,km,al,ad,au,a1,a2,au,a1,a2)
 
 1159             utend = (a1(i,k)-u1(i,k))*rdt
 
 1160             vtend = (a2(i,k)-v1(i,k))*rdt
 
 1161             du(i,k)  = du(i,k)  + utend
 
 1162             dv(i,k)  = dv(i,k)  + vtend
 
 1163             dusfc(i) = dusfc(i) + conw*del(i,k)*utend
 
 1164             dvsfc(i) = dvsfc(i) + conw*del(i,k)*vtend
 
 1190 c-----------------------------------------------------------------------
 
 1195       subroutine tridi2(l,n,cl,cm,cu,r1,r2,au,a1,a2)             
 
 1197       use machine     
, only : kind_phys
 
 1200       real(kind=kind_phys) fk
 
 1202       real(kind=kind_phys) cl(l,2:n),cm(l,n),cu(l,n-1),r1(l,n),r2(l,n),        &
 
 1203      &          au(l,n-1),a1(l,n),a2(l,n)
 
 1204 c-----------------------------------------------------------------------
 
 1207         au(i,1) = fk*cu(i,1)
 
 1208         a1(i,1) = fk*r1(i,1)
 
 1209         a2(i,1) = fk*r2(i,1)
 
 1213           fk      = 1./(cm(i,k)-cl(i,k)*au(i,k-1))
 
 1214           au(i,k) = fk*cu(i,k)
 
 1215           a1(i,k) = fk*(r1(i,k)-cl(i,k)*a1(i,k-1))
 
 1216           a2(i,k) = fk*(r2(i,k)-cl(i,k)*a2(i,k-1))
 
 1220         fk      = 1./(cm(i,n)-cl(i,n)*au(i,n-1))
 
 1221         a1(i,n) = fk*(r1(i,n)-cl(i,n)*a1(i,n-1))
 
 1222         a2(i,n) = fk*(r2(i,n)-cl(i,n)*a2(i,n-1))
 
 1226           a1(i,k) = a1(i,k)-au(i,k)*a1(i,k+1)
 
 1227           a2(i,k) = a2(i,k)-au(i,k)*a2(i,k+1)
 
 1230 c-----------------------------------------------------------------------
 
 1233 c-----------------------------------------------------------------------
 
 1238       subroutine tridin(l,n,nt,cl,cm,cu,r1,r2,au,a1,a2)
 
 1240       use machine     
, only : kind_phys
 
 1242       integer             is,k,kk,n,nt,l,i
 
 1243       real(kind=kind_phys) fk(l)
 
 1245       real(kind=kind_phys) cl(l,2:n), cm(l,n), cu(l,n-1),               &
 
 1246      &                     r1(l,n),   r2(l,n*nt),                       &
 
 1247      &                     au(l,n-1), a1(l,n), a2(l,n*nt),              &
 
 1249 c-----------------------------------------------------------------------
 
 1252         au(i,1) = fk(i)*cu(i,1)
 
 1253         a1(i,1) = fk(i)*r1(i,1)
 
 1258           a2(i,1+is) = fk(i) * r2(i,1+is)
 
 1263           fkk(i,k) = 1./(cm(i,k)-cl(i,k)*au(i,k-1))
 
 1264           au(i,k)  = fkk(i,k)*cu(i,k)
 
 1265           a1(i,k)  = fkk(i,k)*(r1(i,k)-cl(i,k)*a1(i,k-1))
 
 1272             a2(i,k+is) = fkk(i,k)*(r2(i,k+is)-cl(i,k)*a2(i,k+is-1))
 
 1277         fk(i)   = 1./(cm(i,n)-cl(i,n)*au(i,n-1))
 
 1278         a1(i,n) = fk(i)*(r1(i,n)-cl(i,n)*a1(i,n-1))
 
 1283           a2(i,n+is) = fk(i)*(r2(i,n+is)-cl(i,n)*a2(i,n+is-1))
 
 1288           a1(i,k) = a1(i,k) - au(i,k)*a1(i,k+1)
 
 1295             a2(i,k+is) = a2(i,k+is) - au(i,k)*a2(i,k+is+1)
 
 1299 c-----------------------------------------------------------------------
 
real(kind=kind_phys), parameter con_g
gravity ( ) 
 
subroutine tridi2(l, n, cl, cm, cu, r1, r2, au, a1, a2)
Routine to solve the tridiagonal system to calculate temperature and moisture at ; part of two-part p...
 
subroutine moninedmf(ix, im, km, ntrac, ntcw, dv, du, tau, rtg,                                               u1, v1, t1, q1, swh, hlw, xmu,                                                                                                                                                               psk, rbsoil, zorl, u10m, v10m, fm, fh,                                                                                                                               tsea, qss, heat, evap, stress, spd1, kpbl,                                                                                                               prsi, del, prsl, prslk, phii, phil, delt, dspheat,                                                                                   dusfc, dvsfc, dtsfc, dqsfc, hpbl, hgamt, hgamq, dkt,                                                                           kinver, xkzm_m, xkzm_h, xkzm_s, lprnt, ipr)
This subroutine contains all of logic for the Hybrid EDMF PBL scheme except for the calculation of th...
 
subroutine tridin(l, n, nt, cl, cm, cu, r1, r2, au, a1, a2)
Routine to solve the tridiagonal system to calculate u- and v-momentum at ; part of two-part process ...
 
subroutine mfpbl(im, ix, km, ntrac, delt, cnvflg,                                                                                           zl, zm, thvx, q1, t1, u1, v1, hpbl, kpbl,                                                                                                                           sflx, ustar, wstar, xmf, tcko, qcko, ucko, vcko)
This subroutine is used for calculating the mass flux and updraft properties. 
 
real(kind=kind_phys), parameter con_cp
spec heat air at p ( ) 
 
real(kind=kind_phys), parameter con_hvap
lat heat H2O cond ( ) 
 
real(kind=kind_phys), parameter con_rd
gas constant air ( )