Changeset 2259 for LMDZ5/trunk/libf


Ignore:
Timestamp:
Apr 15, 2015, 12:51:04 PM (10 years ago)
Author:
jyg
Message:

Changes in Emanuel's deep convection scheme: the
upper bound of deep convection loops is set at
the first level above 22 km.

Modified files:

physiq.F90,
concvl.F90,
cva_driver.F90,
cv3a_compress.F90,
cv3a_uncompress.F90,
cv3_routines.F90

Location:
LMDZ5/trunk/libf/phylmd
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • LMDZ5/trunk/libf/phylmd/concvl.F90

    r2253 r2259  
    11SUBROUTINE concvl(iflag_clos, &
    2                   dtime, paprs, pplay, &
     2                  dtime, paprs, pplay, k_upper_cv, &
    33                  t, q, t_wake, q_wake, s_wake, u, v, tra, ntra, &
    44                  Ale, Alp, sig1, w01, &
     
    8888
    8989  REAL dtime, paprs(klon, klev+1), pplay(klon, klev)
     90  INTEGER k_upper_cv
    9091  REAL t(klon, klev), q(klon, klev), u(klon, klev), v(klon, klev)
    9192  REAL t_wake(klon, klev), q_wake(klon, klev)
     
    405406!LF   necessary for gathered fields
    406407    nloc = klon
    407     CALL cva_driver(klon, klev, klev+1, ntra, nloc, &
     408    CALL cva_driver(klon, klev, klev+1, ntra, nloc, k_upper_cv, &
    408409                    iflag_con, iflag_mix, iflag_ice_thermo, &
    409410                    iflag_clos, ok_conserv_q, dtime, cvl_comp_threshold, &
  • LMDZ5/trunk/libf/phylmd/cv3_routines.F90

    r2257 r2259  
    55
    66
    7 SUBROUTINE cv3_param(nd, delt)
     7SUBROUTINE cv3_param(nd, k_upper, delt)
    88
    99  use mod_phys_lmdz_para
     
    3636  include "conema3.h"
    3737
    38   INTEGER nd
    39   REAL delt ! timestep (seconds)
     38  INTEGER, INTENT(IN)              :: nd
     39  INTEGER, INTENT(IN)              :: k_upper
     40  REAL, INTENT(IN)                 :: delt ! timestep (seconds)
    4041
    4142
     
    5152! -- limit levels for convection:
    5253
    53   noff = 1
     54!jyg<
     55!  noff is chosen such that nl = k_upper so that upmost loops end at about 22 km
     56!
     57  noff = min(max(nd-k_upper, 1), (nd+1)/2)
     58!!  noff = 1
     59!>jyg
    5460  minorig = 1
    5561  nl = nd - noff
     
    27972803                     iflag, precip, Vprecip, ft, fr, fu, fv, ftra, &
    27982804                     cbmf, upwd, dnwd, dnwd0, ma, mip, &
    2799                      tls, tps, qcondc, wd, &
     2805!!                     tls, tps,                             ! useless . jyg
     2806                     qcondc, wd, &
    28002807                     ftd, fqd, qnk, qtc, sigt, tau_cld_cv, coefw_cld_cv)
    28012808
     
    28452852      REAL dnwd0(nloc, nd), mip(nloc, nd)
    28462853      REAL Vprecip(nloc, nd+1)
    2847       REAL tls(nloc, nd), tps(nloc, nd)
     2854!!      REAL tls(nloc, nd), tps(nloc, nd)                 ! useless . jyg
    28482855      REAL qcondc(nloc, nd) ! cld
    28492856      REAL qtc(nloc,nd), sigt(nloc,nd) ! cld
     
    28572864      REAL cpinv, rdcp, dpinv
    28582865      REAL awat(nloc)
    2859       REAL lvcp(nloc, na), lfcp(nloc, na), mke(nloc, na)
     2866      REAL lvcp(nloc, na), lfcp(nloc, na)                  ! , mke(nloc, na) ! unused . jyg
    28602867      REAL am(nloc), work(nloc), ad(nloc), amp1(nloc)
    28612868!!      real up1(nloc), dn1(nloc)
     
    37823789! ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
    37833790
    3784   DO i = 1, nd
    3785     DO il = 1, ncum
    3786       mke(il, i) = upwd(il, i) + dnwd(il, i)
    3787     END DO
    3788   END DO
    3789 
    3790   DO i = 1, nd
    3791     DO il = 1, ncum
    3792       rdcp = (rrd*(1.-rr(il,i))-rr(il,i)*rrv)/(cpd*(1.-rr(il,i))+rr(il,i)*cpv)
    3793       tls(il, i) = t(il, i)*(1000.0/p(il,i))**rdcp
    3794       tps(il, i) = tp(il, i)
    3795     END DO
    3796   END DO
     3791!!  DO i = 1, nd                                  ! unused . jyg
     3792!!    DO il = 1, ncum                             ! unused . jyg
     3793!!      mke(il, i) = upwd(il, i) + dnwd(il, i)    ! unused . jyg
     3794!!    END DO                                      ! unused . jyg
     3795!!  END DO                                        ! unused . jyg
     3796
     3797!!  DO i = 1, nd                                                                 ! unused . jyg
     3798!!    DO il = 1, ncum                                                            ! unused . jyg
     3799!!      rdcp = (rrd*(1.-rr(il,i))-rr(il,i)*rrv)/(cpd*(1.-rr(il,i))+rr(il,i)*cpv) ! unused . jyg
     3800!!      tls(il, i) = t(il, i)*(1000.0/p(il,i))**rdcp                             ! unused . jyg
     3801!!      tps(il, i) = tp(il, i)                                                   ! unused . jyg
     3802!!    END DO                                                                     ! unused . jyg
     3803!!  END DO                                                                       ! unused . jyg
    37973804
    37983805
  • LMDZ5/trunk/libf/phylmd/cv3a_compress.F90

    r2253 r2259  
    175175      pbase(nn) = pbase1(i)
    176176      buoybase(nn) = buoybase1(i)
     177      sig(nn, nd) = sig1(i, nd)
    177178      ptop2(nn) = ptop2(i)
    178179      Ale(nn) = Ale1(i)
     
    192193      ncum = len
    193194!
    194       wghti(:,:) = wghti1(:,:)
    195       t(:,:) = t1(:,:)
    196       q(:,:) = q1(:,:)
    197       qs(:,:) = qs1(:,:)
    198       t_wake(:,:) = t1_wake(:,:)
    199       q_wake(:,:) = q1_wake(:,:)
    200       qs_wake(:,:) = qs1_wake(:,:)
    201       u(:,:) = u1(:,:)
    202       v(:,:) = v1(:,:)
    203       gz(:,:) = gz1(:,:)
    204       th(:,:) = th1(:,:)
    205       th_wake(:,:) = th1_wake(:,:)
    206       h(:,:) = h1(:,:)
    207       lv(:,:) = lv1(:,:)
    208       lf(:,:) = lf1(:,:)
    209       cpn(:,:) = cpn1(:,:)
    210       p(:,:) = p1(:,:)
    211       ph(:,:) = ph1(:,:)
    212       tv(:,:) = tv1(:,:)
    213       tp(:,:) = tp1(:,:)
    214       tvp(:,:) = tvp1(:,:)
    215       clw(:,:) = clw1(:,:)
    216       h_wake(:,:) = h1_wake(:,:)
    217       lv_wake(:,:) = lv1_wake(:,:)
    218       lf_wake(:,:) = lf1_wake(:,:)
    219       cpn_wake(:,:) = cpn1_wake(:,:)
    220       tv_wake(:,:) = tv1_wake(:,:)
    221       sig(:,:) = sig1(:,:)
    222       w0(:,:) = w01(:,:)
    223       omega(:,:) = omega1(:,:)
     195      wghti(:,1:nl+1) = wghti1(:,1:nl+1)
     196      t(:,1:nl+1) = t1(:,1:nl+1)
     197      q(:,1:nl+1) = q1(:,1:nl+1)
     198      qs(:,1:nl+1) = qs1(:,1:nl+1)
     199      t_wake(:,1:nl+1) = t1_wake(:,1:nl+1)
     200      q_wake(:,1:nl+1) = q1_wake(:,1:nl+1)
     201      qs_wake(:,1:nl+1) = qs1_wake(:,1:nl+1)
     202      u(:,1:nl+1) = u1(:,1:nl+1)
     203      v(:,1:nl+1) = v1(:,1:nl+1)
     204      gz(:,1:nl+1) = gz1(:,1:nl+1)
     205      th(:,1:nl+1) = th1(:,1:nl+1)
     206      th_wake(:,1:nl+1) = th1_wake(:,1:nl+1)
     207      h(:,1:nl+1) = h1(:,1:nl+1)
     208      lv(:,1:nl+1) = lv1(:,1:nl+1)
     209      lf(:,1:nl+1) = lf1(:,1:nl+1)
     210      cpn(:,1:nl+1) = cpn1(:,1:nl+1)
     211      p(:,1:nl+1) = p1(:,1:nl+1)
     212      ph(:,1:nl+1) = ph1(:,1:nl+1)
     213      tv(:,1:nl+1) = tv1(:,1:nl+1)
     214      tp(:,1:nl+1) = tp1(:,1:nl+1)
     215      tvp(:,1:nl+1) = tvp1(:,1:nl+1)
     216      clw(:,1:nl+1) = clw1(:,1:nl+1)
     217      h_wake(:,1:nl+1) = h1_wake(:,1:nl+1)
     218      lv_wake(:,1:nl+1) = lv1_wake(:,1:nl+1)
     219      lf_wake(:,1:nl+1) = lf1_wake(:,1:nl+1)
     220      cpn_wake(:,1:nl+1) = cpn1_wake(:,1:nl+1)
     221      tv_wake(:,1:nl+1) = tv1_wake(:,1:nl+1)
     222      sig(:,1:nl+1) = sig1(:,1:nl+1)
     223      w0(:,1:nl+1) = w01(:,1:nl+1)
     224      omega(:,1:nl+1) = omega1(:,1:nl+1)
    224225!
    225226      s_wake(:) = s1_wake(:)
     
    237238      pbase(:) = pbase1(:)
    238239      buoybase(:) = buoybase1(:)
     240      sig(:, nd) = sig1(:, nd)
    239241      ptop2(:) = ptop2(:)
    240242      Ale(:) = Ale1(:)
  • LMDZ5/trunk/libf/phylmd/cv3a_uncompress.F90

    r2253 r2259  
    124124!>jyg
    125125    DO i = 1, ncum
     126      sig1(idcum(i), nd) = sig(i, nd)
    126127      ptop21(idcum(i)) = ptop2(i)
    127128      sigd1(idcum(i)) = sigd(i)
     
    143144    END DO
    144145   
    145     DO k = 1, nd
     146    DO k = 1, nl+1
    146147      DO i = 1, ncum
    147148        sig1(idcum(i), k) = sig(i, k)
     
    178179      END DO
    179180    END DO
    180 
    181     DO i = 1, ncum
    182       sig1(idcum(i), nd) = sig(i, nd)
    183     END DO
    184    
    185181   
    186182    ! AC!        do 2100 j=1,ntra
     
    209205      DO i = 1, ncum
    210206        jdcum=idcum(i)
    211         phi1(jdcum,:,:) = phi(i,:,:)          !AC!
    212         phi21(jdcum,:,:) = phi2(i,:,:)        !RomP
    213         sigij1(jdcum,:,:) = sigij(i,:,:)      !RomP
    214         elij1(jdcum,:,:) = elij(i,:,:)        !RomP
    215         epmlmMm1(jdcum,:,:) = epmlmMm(i,:,:)  !RomP+jyg
     207        phi1    (jdcum, 1:nl+1, 1:nl+1) = phi    (i, 1:nl+1, 1:nl+1)          !AC!
     208        phi21   (jdcum, 1:nl+1, 1:nl+1) = phi2   (i, 1:nl+1, 1:nl+1)          !RomP
     209        sigij1  (jdcum, 1:nl+1, 1:nl+1) = sigij  (i, 1:nl+1, 1:nl+1)          !RomP
     210        elij1   (jdcum, 1:nl+1, 1:nl+1) = elij   (i, 1:nl+1, 1:nl+1)          !RomP
     211        epmlmMm1(jdcum, 1:nl+1, 1:nl+1) = epmlmMm(i, 1:nl+1, 1:nl+1)          !RomP+jyg
    216212      END DO
    217213!>jyg
     
    231227  ELSE  !(compress)
    232228!
     229      sig1(:,nd) = sig(:,nd)
    233230      ptop21(:) = ptop2(:)
    234231      sigd1(:) = sigd(:)
     
    249246      asupmaxmin1(:) = asupmaxmin(:)
    250247!
    251       sig1(:,:) = sig(:,:)
    252       w01(:,:) = w0(:,:)
    253       ft1(:,:) = ft(:,:)
    254       fq1(:,:) = fq(:,:)
    255       fu1(:,:) = fu(:,:)
    256       fv1(:,:) = fv(:,:)
    257       ma1(:,:) = ma(:,:)
    258       mip1(:,:) = mip(:,:)
    259       vprecip1(:,:) = vprecip(:,:)
    260       upwd1(:,:) = upwd(:,:)
    261       dnwd1(:,:) = dnwd(:,:)
    262       dnwd01(:,:) = dnwd0(:,:)
    263       qcondc1(:,:) = qcondc(:,:)
    264       tvp1(:,:) = tvp(:,:)
    265       ftd1(:,:) = ftd(:,:)
    266       fqd1(:,:) = fqd(:,:)
    267       asupmax1(:,:) = asupmax(:,:)
    268 
    269       da1(:,:) = da(:,:)              !AC!
    270       mp1(:,:) = mp(:,:)              !RomP
    271       d1a1(:,:) = d1a(:,:)            !RomP
    272       dam1(:,:) = dam(:,:)            !RomP
    273       clw1(:,:) = clw(:,:)            !RomP
    274       evap1(:,:) = evap(:,:)          !RomP
    275       ep1(:,:) = ep(:,:)              !RomP
    276       eplamM1(:,:) = eplamM(:,:)       !RomP+jyg
    277       wdtrainA1(:,:) = wdtrainA(:,:)  !RomP
    278       wdtrainM1(:,:) = wdtrainM(:,:)  !RomP
    279       qtc1(:,:) = qtc(:,:)
    280       sigt1(:,:) = sigt(:,:)
    281 !
    282       sig1(:,:) = sig(:,:)
    283 !
    284       phi1(:,:,:)   = phi(:,:,:)      !AC!
    285       phi21(:,:,:)  = phi2(:,:,:)     !RomP
    286       sigij1(:,:,:) = sigij(:,:,:)    !RomP
    287       elij1(:,:,:)  = elij(:,:,:)     !RomP
    288       epmlmMm1(:,:,:) = epmlmMm(:,:,:) !RomP+jyg
     248      sig1(:, 1:nl+1) = sig(:, 1:nl+1)
     249      w01(:, 1:nl+1) = w0(:, 1:nl+1)
     250      ft1(:, 1:nl+1) = ft(:, 1:nl+1)
     251      fq1(:, 1:nl+1) = fq(:, 1:nl+1)
     252      fu1(:, 1:nl+1) = fu(:, 1:nl+1)
     253      fv1(:, 1:nl+1) = fv(:, 1:nl+1)
     254      ma1(:, 1:nl+1) = ma(:, 1:nl+1)
     255      mip1(:, 1:nl+1) = mip(:, 1:nl+1)
     256      vprecip1(:, 1:nl+1) = vprecip(:, 1:nl+1)
     257      upwd1(:, 1:nl+1) = upwd(:, 1:nl+1)
     258      dnwd1(:, 1:nl+1) = dnwd(:, 1:nl+1)
     259      dnwd01(:, 1:nl+1) = dnwd0(:, 1:nl+1)
     260      qcondc1(:, 1:nl+1) = qcondc(:, 1:nl+1)
     261      tvp1(:, 1:nl+1) = tvp(:, 1:nl+1)
     262      ftd1(:, 1:nl+1) = ftd(:, 1:nl+1)
     263      fqd1(:, 1:nl+1) = fqd(:, 1:nl+1)
     264      asupmax1(:, 1:nl+1) = asupmax(:, 1:nl+1)
     265
     266      da1(:, 1:nl+1) = da(:, 1:nl+1)              !AC!
     267      mp1(:, 1:nl+1) = mp(:, 1:nl+1)              !RomP
     268      d1a1(:, 1:nl+1) = d1a(:, 1:nl+1)            !RomP
     269      dam1(:, 1:nl+1) = dam(:, 1:nl+1)            !RomP
     270      clw1(:, 1:nl+1) = clw(:, 1:nl+1)            !RomP
     271      evap1(:, 1:nl+1) = evap(:, 1:nl+1)          !RomP
     272      ep1(:, 1:nl+1) = ep(:, 1:nl+1)              !RomP
     273      eplamM1(:, 1:nl+1) = eplamM(:, 1:nl+1)       !RomP+jyg
     274      wdtrainA1(:, 1:nl+1) = wdtrainA(:, 1:nl+1)  !RomP
     275      wdtrainM1(:, 1:nl+1) = wdtrainM(:, 1:nl+1)  !RomP
     276      qtc1(:, 1:nl+1) = qtc(:, 1:nl+1)
     277      sigt1(:, 1:nl+1) = sigt(:, 1:nl+1)
     278!
     279      phi1    (:, 1:nl+1, 1:nl+1) = phi    (:, 1:nl+1, 1:nl+1)  !AC!
     280      phi21   (:, 1:nl+1, 1:nl+1) = phi2   (:, 1:nl+1, 1:nl+1)  !RomP
     281      sigij1  (:, 1:nl+1, 1:nl+1) = sigij  (:, 1:nl+1, 1:nl+1)  !RomP
     282      elij1   (:, 1:nl+1, 1:nl+1) = elij   (:, 1:nl+1, 1:nl+1)  !RomP
     283      epmlmMm1(:, 1:nl+1, 1:nl+1) = epmlmMm(:, 1:nl+1, 1:nl+1)  !RomP+jyg
    289284  ENDIF !(compress)
    290285!>jyg
  • LMDZ5/trunk/libf/phylmd/cva_driver.F90

    r2255 r2259  
    22! $Id$
    33
    4 SUBROUTINE cva_driver(len, nd, ndp1, ntra, nloc, &
     4SUBROUTINE cva_driver(len, nd, ndp1, ntra, nloc, k_upper, &
    55                      iflag_con, iflag_mix, iflag_ice_thermo, iflag_clos, ok_conserv_q, &
    66!!                      delt, t1, q1, qs1, t1_wake, q1_wake, qs1_wake, s1_wake, &  ! jyg
     
    5454! ndp1          Integer        Input        nd + 1
    5555! ntra          Integer        Input        number of tracors
     56! nloc          Integer        Input        dimension of arrays for compressed fields
     57! k_upper       Integer        Input        upmost level for vertical loops
    5658! iflag_con     Integer        Input        version of convect (3/4)
    5759! iflag_mix     Integer        Input        version of mixing  (0/1/2)
     
    165167  INTEGER, INTENT (IN)                               :: ndp1
    166168  INTEGER, INTENT (IN)                               :: ntra
     169  INTEGER, INTENT(IN)                                :: nloc ! (nloc=klon)  pour l'instant
     170  INTEGER, INTENT (IN)                               :: k_upper
    167171  INTEGER, INTENT (IN)                               :: iflag_con
    168172  INTEGER, INTENT (IN)                               :: iflag_mix
     
    435439! (local) compressed fields:
    436440
    437   INTEGER nloc
    438 ! parameter (nloc=klon) ! pour l'instant
    439441
    440442  INTEGER idcum(nloc)
     
    492494  REAL fu(nloc, klev), fv(nloc, klev)
    493495  REAL upwd(nloc, klev), dnwd(nloc, klev), dnwd0(nloc, klev)
    494   REAL ma(nloc, klev), mip(nloc, klev), tls(nloc, klev)
    495   REAL tps(nloc, klev), qprime(nloc), tprime(nloc)
     496  REAL ma(nloc, klev), mip(nloc, klev)
     497!!  REAL tls(nloc, klev), tps(nloc, klev)                 ! unused . jyg
     498  REAL qprime(nloc), tprime(nloc)
    496499  REAL precip(nloc)
    497500! real Vprecip(nloc,klev)
     
    559562
    560563  IF (iflag_con==3) THEN
    561     CALL cv3_param(nd, delt)
     564    CALL cv3_param(nd, k_upper, delt)
    562565
    563566  END IF
     
    10211024                     iflag, precip, vprecip, ft, fq, fu, fv, ftra, &
    10221025                     cbmf, upwd, dnwd, dnwd0, ma, mip, &
    1023                      tls, tps, qcondc, wd, &
     1026!!                     tls, tps, &                            ! useless . jyg
     1027                     qcondc, wd, &
    10241028                     ftd, fqd, qnk, qtc, sigt, tau_cld_cv, coefw_cld_cv)
    10251029    END IF
  • LMDZ5/trunk/libf/phylmd/physiq.F90

    r2245 r2259  
    316316  SAVE top
    317317  !$OMP THREADPRIVATE(bas, top)
    318 
     318  !------------------------------------------------------------------
     319  ! Upmost level reached by deep convection and related variable (jyg)
     320  !
     321  INTEGER izero
     322  INTEGER k_upper_cv
     323  !------------------------------------------------------------------
    319324  !
    320325  !=================================================================================================
     
    528533  !                            !par la masse/airetot (moyglo_pondaima) et la vraie masse (moyglo_pondmass)
    529534  !
    530   ! Variables locales
     535  !
     536!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     537  ! Local variables
     538!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    531539  !
    532540  REAL rhcl(klon,klev)    ! humiditi relative ciel clair
     
    570578  REAL zx_t, zx_qs, zdelta, zcor, zlvdcp, zlsdcp
    571579  real zqsat(klon,klev)
     580!
    572581  INTEGER i, k, iq, ig, j, nsrf, ll, l, iiq
     582!
    573583  REAL t_coup
    574584  PARAMETER (t_coup=234.0)
     
    885895     igout=klon/2+1/klon
    886896     write(lunout,*) 'DEBUT DE PHYSIQ !!!!!!!!!!!!!!!!!!!!'
     897     write(lunout,*) 'igout, rlat, rlon ',igout, rlatd(igout)*180./3.141593, rlond(igout)*180./3.141593
    887898     write(lunout,*) &
    888899          'nlon,klev,nqtot,debut,lafin, jD_cur, jH_cur,pdtphys'
     
    904915
    905916  if (first) then
    906 
     917     
    907918     !CR:nvelles variables convection/poches froides
    908919
     
    13331344#endif
    13341345     END IF
    1335      !
    13361346     !
    13371347!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     
    22302240     !
    22312241     IF (ok_cvl) THEN ! new driver for convectL
    2232 
     2242     !
     2243!jyg<
     2244!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     2245     ! Calculate the upmost level of deep convection loops: k_upper_cv
     2246     !  (near 22 km)
     2247   izero = igout
     2248   DO i = 1,klon
     2249     IF (abs(rlatd(i)) < 4.e-2 .AND. abs(rlond(i)) < 4.e-2) izero = i
     2250   ENDDO
     2251!
     2252   k_upper_cv = klev
     2253   DO k = klev,1,-1
     2254     IF (pphi(izero,k) > 22.e4) k_upper_cv = k
     2255   ENDDO
     2256   IF (prt_level .ge. 5) THEN
     2257     Print *, 'upmost level of deep convection loops: k_upper_cv = ',k_upper_cv
     2258   ENDIF
     2259     !
     2260!>jyg
    22332261        IF (type_trac == 'repr') THEN
    22342262           nbtr_tmp=ntra
     
    22392267        !c          CALL concvl (iflag_con,iflag_clos,
    22402268        CALL concvl (iflag_clos, &
    2241              dtime,paprs,pplay,t_undi,q_undi, &
     2269             dtime, paprs, pplay, k_upper_cv, t_undi,q_undi, &
    22422270             t_wake,q_wake,wake_s, &
    22432271             u_seri,v_seri,tr_seri,nbtr_tmp, &
Note: See TracChangeset for help on using the changeset viewer.