Ignore:
Timestamp:
Mar 19, 2026, 2:35:46 PM (3 weeks ago)
Author:
gmilcareck
Message:

Thermodynamics update on LMDZ.GENERIC

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.GENERIC/libf/phygeneric/vdifc_mod.F

    r3236 r4146  
    88     &     ptimestep,pcapcal,lecrit,                       
    99     &     pplay,pplev,pzlay,pzlev,pz0,
    10      &     pu,pv,ph,pq,ptsrf,pemis,pqsurf,
     10     &     pu,pv,pt,ph,pq,ptsrf,pemis,pqsurf,
    1111     &     pdhfi,pdqfi,pfluxsrf,
    1212     &     pdudif,pdvdif,pdhdif,pdtsrf,sensibFlux,pq2,
     
    1818      use surfdat_h, only: dryness
    1919      use tracer_h, only: igcm_h2o_vap, igcm_h2o_ice
    20       use comcstfi_mod, only: g, r, cpp, rcp
     20      use comcstfi_mod, only: g, rd_ref, cppd_ref, rcp_ref
    2121      use callkeys_mod, only: water,tracer,nosurf
    2222
     
    5353      REAL,INTENT(IN) :: pplay(ngrid,nlay),pplev(ngrid,nlay+1)
    5454      REAL,INTENT(IN) :: pzlay(ngrid,nlay),pzlev(ngrid,nlay+1)
    55       REAL,INTENT(IN) :: pu(ngrid,nlay),pv(ngrid,nlay),ph(ngrid,nlay)
     55      REAL,INTENT(IN) :: pu(ngrid,nlay),pv(ngrid,nlay)
     56      REAL,INTENT(IN) :: pt(ngrid,nlay),ph(ngrid,nlay)
    5657      REAL,INTENT(IN) :: ptsrf(ngrid),pemis(ngrid)
    5758      REAL,INTENT(IN) :: pdhfi(ngrid,nlay)
     
    179180      ENDDO
    180181
    181       zcst1=4.*g*ptimestep/(R*R)
     182      zcst1=4.*g*ptimestep/(rd_ref*rd_ref)
    182183      DO ilev=2,nlev-1
    183184         DO ig=1,ngrid
    184185            zb0(ig,ilev)=pplev(ig,ilev)*
    185      s           (pplev(ig,1)/pplev(ig,ilev))**rcp /
     186     s           (pplev(ig,1)/pplev(ig,ilev))**rcp_ref /
    186187     s           (ph(ig,ilev-1)+ph(ig,ilev))
    187188            zb0(ig,ilev)=zcst1*zb0(ig,ilev)*zb0(ig,ilev)/
     
    190191      ENDDO
    191192      DO ig=1,ngrid
    192          zb0(ig,1)=ptimestep*pplev(ig,1)/(R*ptsrf(ig))
     193         zb0(ig,1)=ptimestep*pplev(ig,1)/(rd_ref*ptsrf(ig))
    193194      ENDDO
    194195
     
    246247!     ------------------------------------------------------
    247248
    248       call vdif_kc(ngrid,nlay,nq,ptimestep,g,pzlev,pzlay
    249      &     ,pu,pv,pq,ph,zcdv_true
     249      call vdif_kc(ngrid,nlay,nq,ptimestep,g,pzlev,pzlay,
     250     &     pplev,pplay,pu,pv,pt,pq,ph,zcdv_true
    250251     &     ,pq2,zkv,zkh)
    251252
     
    405406         DO ig=1,ngrid
    406407
    407             z1(ig) = pcapcal(ig)*ptsrf(ig) + cpp*zb(ig,1)*zc(ig,1)
    408      &           + zdplanck(ig)*ptsrf(ig) + pfluxsrf(ig)*ptimestep
    409             z2(ig) = pcapcal(ig) + cpp*zb(ig,1)*(1.-zd(ig,1))
    410      &           +zdplanck(ig)
    411             ztsrf2(ig) = z1(ig) / z2(ig)
    412             pdtsrf(ig) = (ztsrf2(ig) - ptsrf(ig))/ptimestep
    413             zh(ig,1)   = zc(ig,1) + zd(ig,1)*ztsrf2(ig)
     408           z1(ig)=pcapcal(ig)*ptsrf(ig)+cppd_ref*zb(ig,1)*zc(ig,1)
     409     &          + zdplanck(ig)*ptsrf(ig) + pfluxsrf(ig)*ptimestep
     410           z2(ig) = pcapcal(ig) + cppd_ref*zb(ig,1)*(1.-zd(ig,1))
     411     &          +zdplanck(ig)
     412           ztsrf2(ig) = z1(ig) / z2(ig)
     413           pdtsrf(ig) = (ztsrf2(ig) - ptsrf(ig))/ptimestep
     414           zh(ig,1)   = zc(ig,1) + zd(ig,1)*ztsrf2(ig)
    414415         ENDDO
    415416
     
    552553! calculation of h0 and h1
    553554               do ig=1,ngrid
    554                   zdq0(ig) = dqsat(ig)
    555                   zcq0(ig) = qsat(ig)-dqsat(ig)*ptsrf(ig)
    556 
    557                   z1(ig) = pcapcal(ig)*ptsrf(ig) +cpp*zb(ig,1)*zc(ig,1)
    558      &                 + zdplanck(ig)*ptsrf(ig) + pfluxsrf(ig)*ptimestep
    559      &                 +  zb(ig,1)*dryness(ig)*RLVTT*
    560      &                 ((zdq(ig,1)-1.0)*zcq0(ig)+zcq(ig,1))
    561 
    562                   z2(ig) = pcapcal(ig) + cpp*zb(ig,1)*(1.-zd(ig,1))
    563      &                 +zdplanck(ig)
    564      &                 +zb(ig,1)*dryness(ig)*RLVTT*zdq0(ig)*
    565      &                 (1.0-zdq(ig,1))
    566 
    567                   ztsrf2(ig) = z1(ig) / z2(ig)
    568                   pdtsrf(ig) = (ztsrf2(ig) - ptsrf(ig))/ptimestep
    569                   zh(ig,1)   = zc(ig,1) + zd(ig,1)*ztsrf2(ig)
     555                 zdq0(ig) = dqsat(ig)
     556                 zcq0(ig) = qsat(ig)-dqsat(ig)*ptsrf(ig)
     557
     558                 z1(ig)=pcapcal(ig)*ptsrf(ig)+cppd_ref*zb(ig,1)*zc(ig,1)
     559     &                + zdplanck(ig)*ptsrf(ig) + pfluxsrf(ig)*ptimestep
     560     &                +  zb(ig,1)*dryness(ig)*RLVTT*
     561     &                ((zdq(ig,1)-1.0)*zcq0(ig)+zcq(ig,1))
     562
     563                 z2(ig) = pcapcal(ig) + cppd_ref*zb(ig,1)*(1.-zd(ig,1))
     564     &                +zdplanck(ig)
     565     &                +zb(ig,1)*dryness(ig)*RLVTT*zdq0(ig)*
     566     &                (1.0-zdq(ig,1))
     567
     568                 ztsrf2(ig) = z1(ig) / z2(ig)
     569                 pdtsrf(ig) = (ztsrf2(ig) - ptsrf(ig))/ptimestep
     570                 zh(ig,1)   = zc(ig,1) + zd(ig,1)*ztsrf2(ig)
    570571               enddo
    571572
     
    664665
    665666      DO ig=1,ngrid  ! computing sensible heat flux (atm => surface)
    666          sensibFlux(ig)=cpp*zb(ig,1)/ptimestep*(zh(ig,1)-ztsrf2(ig))
     667        sensibFlux(ig)=cppd_ref*zb(ig,1)/ptimestep*(zh(ig,1)-ztsrf2(ig))
    667668      ENDDO     
    668669
Note: See TracChangeset for help on using the changeset viewer.